Das Marketingvideo für Terminal enthielt einen Teil, in dem Links in der Vorschau beim Hover gezeigt werden. Ist diese Funktion derzeit verfügbar?
Nö.
Die Marketing-Promo ist eher ein "was kommt" als ein "was jetzt verfügbar ist". Wir danken Ihnen für Ihre Geduld, während wir weiter an diesem Projekt arbeiten :)
Auch zum Verlinken, #555
@tackyunicorn – das Terminalvideo ist ambitioniert – es soll einige der wichtigsten Funktionen veranschaulichen, an deren
Derzeit sind der Erweiterbarkeitshost und Erweiterungen wie "Link Preview" noch nicht entworfen oder implementiert und werden wahrscheinlich nach v1.0 ausgeliefert. Wir möchten die Zeit und Mühe aufwenden, um sicherzustellen, dass wir solche wichtigen Funktionen "richtig" entwickeln, um spätere Störungen zu minimieren.
Wir arbeiten an unserer zukünftigen Roadmap und werden sie in den nächsten Wochen mit der Community teilen.
Zusammenfassung der neuen Funktion/Erweiterung
URLs erkennen und anklickbar machen (URL im Standardbrowser öffnen). Dies ist eine Komfortfunktion, die in vielen anderen Terminals vorhanden ist.
Ich glaube, der Wert ist offensichtlich, aber hier ist trotzdem ein konkretes Anwendungsbeispiel: Wenn ich
yarn outdated
ausführe (Yarn ist ein Paketmanager), gibt es für jedes aufgelistete Paket eine Repository-/Homepage-URL aus. Ich möchte in der Lage sein, auf eine dieser URLs zu klicken, um die Seite schnell/einfach zu öffnen und mir anzusehen, was sich in der neuen Version des Pakets geändert hat.Implementierungsdetails
- Wahrscheinlich müssen Sie nicht mehr als Text unterstützen, der mit
http://
oderhttps://
beginnt.- URLs, die sich über mehrere Zeilen erstrecken (da sie um die Fensterbreite gekürzt werden) sollten korrekt behandelt werden.
- Es sollte wahrscheinlich ein Hinweis darauf sein, dass die URL anklickbar ist, zB Cursorwechsel + Unterstreichen bei Mauszeiger.
- Die meisten anderen Terminals erfordern einen Alt- oder Strg-Klick, ich nehme an, um versehentliche Klicks beim Kopieren und so weiter zu vermeiden.
Sie können sich etwas wie das Terminal von VS Code zur Inspiration ansehen. Auch dies ist wahrscheinlich alles selbstverständlich.
Stretch Goal (in #204 behandelt)
IMO sollte es aus Gründen der Vervollständigung alle Schemata unterstützen, um weitere Probleme zu vermeiden, die das Hinzufügen neuer und die Wiederverwendbarkeit des Codes/der Bibliothek erfordern.
Eine Sache, die komplex werden kann, ist die Behandlung von Klammern: Die meisten Implementierungen, die ich kennengelernt habe, überspringen fälschlicherweise das schließende Klammerzeichen (
)
), wenn es das letzte Zeichen im Link ist, das mehrere Wikipedia-Links unterbricht. Wahrscheinlich sollte ein Algorithmus zum Abgleichen von Klammern verwendet werden, um zu entscheiden, ob dieses letzte Zeichen ein Teil des Links ist oder nicht.EDIT: Tippfehler
Die meisten Implementierungen, die ich getroffen habe, überspringen fälschlicherweise das schließende Klammerzeichen (
)
), wenn es das letzte Zeichen im Link ist, der mehrere Wikipedia-Links zerstörtAndererseits werden URLs im Textfluss oft in Klammern eingeschlossen (siehe zB http://example.com/foobar) <- wie hier, ebenso in Markdown-Dateien.
In gnome-terminal haben wir diese beiden widersprüchlichen Anforderungen berücksichtigt, indem wir Klammern
()
und eckige Klammern[]
, solange sie in ausgeglichenen Paaren vorkommen. Dies wurde mit rekursiven regulären Ausdrücken implementiert. Siehe GT763980 .Ein weiterer ähnlich kniffliger Fall ist das nachgestellte Apostroph, siehe gt 448044 .
Wir können das nicht herausfinden, ohne den Server abzufragen
Haha, das ist auch eine Möglichkeit – ich persönlich würde es aber nicht machen. Ich bin sicher, Sie teilen meine Bedenken bezüglich Datenverlust und Langsamkeit.
Es ist alles Vermutung, es gibt keine perfekte Lösung (nun, es gibt #204, um diese Lücke zu schließen). Wir fanden, dass das passende Parents-Ding gut genug funktioniert, wir haben keinen Bericht erhalten, seit wir das implementiert haben. Zumindest stellte sich heraus, dass es definitiv besser war, als entweder immer mit dem Elternteil zu übereinstimmen oder nie zu passen. Es war etwas schwierig zu implementieren, sich in selten verwendete und kaum bekannte Regex-Funktionen bestimmter Regex-Bibliotheken einzuarbeiten (deshalb überrascht es mich nicht, dass sich viele Terminals nicht damit beschäftigen), aber ich denke, es hat sich gelohnt. :)
Ich denke, wir müssen den Pfad von Ordnern erkennen und sie auch anklickbar machen.
Einfacher zu debuggen von Code:
Das TeachingTip- Steuerelement könnte für die Linkvorschau-Funktion verwendet werden
Sie können sich etwas wie das Terminal von VS Code zur Inspiration ansehen. Auch dies ist wahrscheinlich alles selbstverständlich.
Warum nicht einfach denselben Code teilen?
Wahrscheinlich müssen Sie nicht mehr als Text unterstützen, der mit http:// oder https:// beginnt
Ich denke, Sie sollten die Erkennung von www.
hinzufügen.
Warum nicht einfach denselben Code teilen?
Nun, es ist in TypeScript geschrieben, einem Dialekt von Javascript ... also wird es in unserem C++-Projekt nicht genau funktionieren.
Ich kann diese Funktion kaum erwarten!! Ich liebe es, STRG gedrückt zu halten und zu sehen, wie ein Link in ConEmu unterstrichen wird, wo ein Linksklick ihn im Standardbrowser öffnet. Hoffentlich schafft es eine einfache Regex-Implementierung von URL-Highlighting vor Ende des Jahres :)
Das TeachingTip- Steuerelement könnte für die Linkvorschau-Funktion verwendet werden
Sie können sich vorstellen, dass dieses Steuerelement über dem Link erscheint, mit dem Favicon, dem Site-Namen und der URL- oder Bing-Beschreibung für den Link
@mdtauk & @awarmfastbear - Du meinst wie das Link-Vorschau-Popup, das wir im Sizzle-Video des Terminals illustriert haben ?
Die Funktion wurde in dieser Sizzle-Rolle angedeutet, wie Sie auf @bitcrazed hinweisen - Mein Kommentar
@bitcrazed , das ist
@mdtauk Einverstanden. Wir wollen auf keinen Fall das Rad unnötig neu erfinden. Wenn wir Standard-XAML-Steuerelemente verwenden können, um Funktionen wie diese zu implementieren, werden wir dies tun.
Wenn nicht, arbeiten wir mit den XAML-Steuerelementteams zusammen, um herauszufinden, ob Änderungen an vorhandenen Steuerelementen vorgenommen werden müssen oder ob ein neues Steuerelement mit dem richtigen Verhalten erforderlich ist.
Um ehrlich zu sein, wird die größte Herausforderung hier wahrscheinlich nicht darin bestehen, welches Steuerelement verwendet werden soll, sondern wie man einen Erweiterbarkeitsmechanismus baut, der alle erforderlichen Funktionen bietet und gleichzeitig ausreichend schnell, stabil und sicher bleibt.
Es wäre wunderbar, wenn Sie https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda unterstützen könnten
Bei einer der Ignite 2019-Sitzungen wurde darauf hingewiesen, dass dies über eine Erweiterungsfunktion unterstützt wird. Wir müssen also warten, bis die Erweiterungsunterstützung durchgeführt wird.
@bitcrazed Im Moment ist Windows Terminal beim Benchmark "Regenbogenmodus" unter https://github.com/pew/ternimal wahnsinnig schnell
Ich habe eine Idee: Was ist, wenn Links überhaupt nicht geparst und NICHT anklickbar sind, BIS der Benutzer die Strg-Taste (oder vielleicht Alt) gedrückt hält UND seine Maus über das Windows-Terminal bewegt. In diesem Szenario würde der Code die Zeile scannen (mit Unterstützung für Zeilen, die in vorhergehenden/folgenden Zeilen umgebrochen werden) und genau am Mauszeiger nach einer URL oder einem DATEIPFAD suchen. Wenn ja, markieren Sie die URL, zeigen Sie die Vorschau an, machen Sie sie anklickbar (solange die Strg-Taste noch gedrückt wird) usw.
Wenn der Benutzer mit der rechten Maustaste klickt, parsen Sie außerdem die ununterbrochene Zeichenfolge an dieser Stelle (also stoppen Sie bei Leerzeichen vor/nach der angeklickten Zeichenfolge), wodurch das gesamte Wort hervorgehoben wird. Führen Sie dann das Link-Parsing durch. Wenn ein Link erkannt wird, zeigen Sie einen Menüpunkt "Open Link" an.
Sowohl im Strg-und-Hover- als auch im Rechtsklick-Szenario ist der Parser identisch:
C:\Tools\foo.cpp:80
von links nach rechts geparst und erkannt, dass C:\Tools\foo.cpp
eine Datei ist).Diese beiden Lösungen wären DIE leistungsstärkste Antwort, und das Halten von Strg (oder vielleicht Alt) ist keine große Sache. Viele Terminals gehen so damit um, wie zum Beispiel das macOS-Terminal. Im macOS-Terminal halten Sie Befehlstaste + Doppelklick gedrückt, um Links zu öffnen, oder klicken Sie mit der rechten Maustaste, um ein Menü zu erhalten, das das markierte Wort / den Link "parsiert" (wenn Sie mit der rechten Maustaste auf einen Link klicken, wird dieser Umstand erkannt und markiert das ganzen Link) und wählen Sie dann "Link öffnen".
Alle Alternativen wären verschwenderisch und viel langsamer.
PS: Falls es hilfreich ist, definiert das Alacritty-Terminal diese Zeichen als "Zeichenfolge-Link-Trennzeichen": ",│`|:\"' ()[]{}<>\t"
, was nützlich sein kann, um zu definieren, wie Strings geteilt werden, um Pfade, URLs usw. in den angeklickten zu erkennen /hovered-Zeichenfolge. Wenn ich einen Parser schreiben würde, würde ich die oben beschriebene Technik "Komplette Zeichenfolge ohne Leerzeichen abrufen" verwenden, gefolgt von einem Durchgang durch den "Streifen um den Müll wie <>
oder ()
danach, um den endgültigen Link zu erkennen.
Hey @VideoPlayerCode - danke, dass du deine Gedanken hier eingereicht hast.
Ich stimme zu, nur das Analysieren von URLs, wenn der Benutzer eine Taste / einen Akkord drückt, würde das Zurückstellen des Regex-Scannens ermöglichen, aber es würde immer noch bedeuten, dass wir URLs, die in Text eingebettet sind, nicht farblich hervorheben könnten - etwas, nach dem bereits viele Benutzer gefragt haben.
Außerdem sind URLs nur eine von einer Klasse von Textmustern, die wir suchen und identifizieren möchten: Zum Beispiel würde ich gerne die Möglichkeit haben, Terminal anzuweisen, ein rotes Kästchen mit einer gelben Füllung unter dem passenden Text zu zeichnen ein angegebenes Textmuster/regex/etc. - Stellen Sie sich vor, Sie könnten auf diese Weise Fehlermeldungen in einem Webserver-Protokoll hervorheben, während es vorbeiströmt. 😁
Ich bin mir ziemlich sicher, dass wir eine Strategie finden werden, um Muster/Regex-Übereinstimmungen auf ziemlich performante Weise zu identifizieren. Letztlich. Eines Tages
@bitcrazed
Ich stimme zu, nur das Analysieren von URLs, wenn der Benutzer eine Taste / einen Akkord drückt, würde das Zurückstellen des Regex-Scannens ermöglichen, aber es würde immer noch bedeuten, dass wir URLs, die in Text eingebettet sind, nicht farblich hervorheben könnten - etwas, nach dem bereits viele Benutzer gefragt haben.
Ahh, mir ist gerade aufgefallen, dass die Funktion "Immer aktiver Scanner" im Marketingvideo vorgestellt wurde und von den Nutzern erwartet wird. Hoppla.
Außerdem sind URLs nur eine von einer Klasse von Textmustern, die wir suchen und identifizieren möchten: Zum Beispiel würde ich gerne die Möglichkeit haben, Terminal anzuweisen, ein rotes Kästchen mit einer gelben Füllung unter dem passenden Text zu zeichnen ein angegebenes Textmuster/regex/etc. - Stellen Sie sich vor, Sie könnten auf diese Weise Fehlermeldungen in einem Webserver-Protokoll hervorheben, während es vorbeiströmt. 😁
Woah, ich liebe diese Idee! Es wäre fantastisch, eine Regex in der Benutzerkonfiguration festlegen und auswählen zu können, wie Übereinstimmungen hervorgehoben werden sollen.
Ich bin mir ziemlich sicher, dass wir eine Strategie finden werden, um Muster/Regex-Übereinstimmungen auf ziemlich performante Weise zu identifizieren. Letztlich. Eines Tages
Nun, wenn ein kontinuierliches Scannen erforderlich ist... hier sind einige Ideen:
hub.com/foo
, ist aber eigentlich eine gewickelte Fortsetzung von https://git<wrap>hub.com/foo
).Kurz gesagt: Oh je, viel Glück, die Erwartungen der Benutzer an ein ziemlich verrücktes (in einer schlechten Leistung) Feature zu erfüllen. Dieses Problem ist ein bisschen wie der Versuch, einen schnellen Regexp zu schreiben, um eine HTML-Webseite zu scannen, die ständig mehr und mehr Daten herunterlädt und alte Daten selbst modifiziert...
Danke, dass du deine Gedanken teilst :) Schön, dass dir diese Funktion genauso gut gefällt wie mir ;)
Welchen Scan-Mechanismus wir auch immer verwenden, am Ende wird es ziemlich sicher sein:
1) Asynchron
2) Effizient
3) Konfigurierbar
Da hast du den Nagel auf den Kopf getroffen. Ihre Kommentare zu perf - dies ist ein wichtiges Anliegen eines Features wie dieses, dem wir besondere Aufmerksamkeit schenken müssen. Es war einfach nicht möglich, eine allgemeine Lösung auf der alten Konsolen-Engine zu entwickeln, aber wir nähern uns dem Punkt, an dem uns insbesondere die neu gestaltete Engine, die dem Terminal zugrunde liegt, den Zugriff und die Funktionen geben sollte, die wir brauchen.
Wenn wir nur mehr Entwickler und/oder ausreichend motivierte Community-Mitglieder mit den Fähigkeiten und der Zeit hätten, um zu helfen
In der Sekunde, in der Sie Erweiterungspunkte haben, sind wir sicher, dass es viele von uns mit den Fähigkeiten gibt. Und wir werden uns sehr bemühen, die Zeit zu schaffen :) Zähle mich zumindest dazu.
Freue mich auf diesen Tag :)
Wenn dies erreicht wird, wäre es großartig, die Standardanwendung pro Profil überschreiben zu können. Der ultimative Traum wäre es, verschiedene Akkorde verwenden zu können, um eine URL in verschiedenen Browsern zu starten.
Ich kann mir vorstellen, dass Sie sich bereits bewusst sind, aber es gibt einige Sicherheitsrisiken, die in der Vergangenheit zu ähnlichen Problemen geführt haben, insbesondere hatte iTerm Probleme bei der DNS-Suche, wenn der Mauszeiger über Links fuhr, um sie vor dem Durchklicken hervorzuheben. Dies war ein ziemlich großes Problem für Sicherheitsanalysten, die Live-Angriffe untersuchten, verursachte jedoch auch Probleme, da DNS-Lookups nach URLs gesendet wurden (einschließlich sensibler Informationen - z. B. Passwörter) im Klartext.
Ich werde nicht so weit gehen zu sagen, dass dieses Verhalten richtig oder falsch ist, aber auf jeden Fall etwas, das man bei der Umsetzung beachten sollte. Als Referenz:
https://gitlab.com/gnachman/iterm2/issues/6050
https://gitlab.com/gnachman/iterm2/issues/3688
https://gitlab.com/gnachman/iterm2/issues/5303
https://gitlab.com/gnachman/iterm2/-/wikis/dnslookupissue
https://nvd.nist.gov/vuln/detail/CVE-2015-9231
Ich schreibe, um respektvoll zu bitten, dass dies klein mit den Augen für die größere Funktionsanfrage beginnt. Es wäre ein guter Anfang, http(s)://-Links im Standardbrowser zu öffnen, wenn Sie mit STRG + darauf klicken! So viele Befehlszeilentools spucken Weblinks aus, die jetzt kopiert und in einen Browser eingefügt werden müssen. Wenn wir nur diese Funktionalität hätten, könnte das meiner Meinung nach für eine ganze Weile ausreichen. Danke für deine Rücksicht!
Ich mag das Windows-Terminal, aber ich hasse es, jedes Mal zu einem anderen Terminal zu wechseln, wenn ich auf Links klicken möchte. Das ist alles.
Springen Sie hier auf den Zug, um nach dieser Funktion zu fragen. Da ich von macOS komme, vermisse ich wirklich eine schnelle Möglichkeit, auf URLs zu klicken, ohne das umständliche Kopieren/Einfügen-Ritual durchlaufen zu müssen.
Anklickbare Links sind auf der Roadmap für V2.0: https://github.com/microsoft/terminal/blob/master/doc/terminal-v2-roadmap.md
Im Namen einiger Abonnenten, die dies auf bemerkenswerte Änderungen / Aktualisierungen achten; Können wir dieses Problem vorerst sperren / stummschalten?
Die zusätzlichen Anfragen, +1, bieten keinen Wert und bringen mehr Verschmutzung in unsere Posteingänge. Wenn jemand dazu beitragen möchte, kann er eine CR erstellen und auf dieses Problem verweisen. :)
Hilfreichster Kommentar
Ich schreibe, um respektvoll zu bitten, dass dies klein mit den Augen für die größere Funktionsanfrage beginnt. Es wäre ein guter Anfang, http(s)://-Links im Standardbrowser zu öffnen, wenn Sie mit STRG + darauf klicken! So viele Befehlszeilentools spucken Weblinks aus, die jetzt kopiert und in einen Browser eingefügt werden müssen. Wenn wir nur diese Funktionalität hätten, könnte das meiner Meinung nach für eine ganze Weile ausreichen. Danke für deine Rücksicht!