Créer des liens cliquables dans le terminal

13

Est-il possible de traiter / transformer la sortie grep (ou de produire des greprésultats similaires, en trouvant des chaînes et / ou des modèles dans des fichiers, d'une autre manière) de sorte que les résultats de la recherche puissent être utilisés comme des liens (c.-à-d. Des hyperliens) pour ouvrir un éditeur? Je veux cliquer sur un dans mon résultat et ouvrir mon éditeur sur la ligne sélectionnée.filename:line_numbergrep

$ grep "mServiceIntent" -R ./src/
./src/example/PhotoThumbnailFragment.java:67    private Intent mServiceIntent;
./src/example/PhotoThumbnailFragment.java:194        mServiceIntent =
./src/example/PhotoThumbnailFragment.java:203        getActivity().startService(mServiceIntent);

Je sais comment enregistrer des protocoles dans le système pour ouvrir l'éditeur. Par exemple, toutes les URL comme sblm://*dans mon système s'ouvrent dans Sublime Text. Ma question est: comment créer des liens personnalisés dans le terminal guake (ou peut-être que cela ne dépend pas de Quake et fonctionne pour le programme de terminal par défaut)?

Remarque: la question connexe (?), Existe - t-il une application de terminal qui permet aux noms de fichiers d'être cliquables? , est vague sur des détails spécifiques d'implémentation / solution et ne mentionne pas explicitement mon exigence de passer directement à une ligne identifiée dans le fichier.

Kein
la source
3
Y a
sendmoreinfo

Réponses:

4

La nouvelle version du terminal GNOME prend désormais en charge les hyperliens avec une cible personnalisée via certaines séquences d'échappement. Essayer

echo -e '\e]8;;http://example.com\aThis is a link\e]8;;\a'

Ouvrir ces œuvres de la même manière que celle décrite dans la réponse de Stephen Kitt. Pour résoudre le problème que vous avez décrit, vous pouvez utiliser un script sed (ou une méthode plus avancée) pour traduire les noms de fichiers en hyperliens. Pour moi, ce qui suit fait le travail (en bash et en supposant que la méthode ci-dessus pour créer des hyperliens fonctionne)

grep "mServiceIntent" -R ./src/ | sed -e $'s#^\(.*\):#\e]8;;file:'`pwd`/$'\\1\a\\1\e]8;;\a#'

(Je n'ai pas installé sublime mais très probablement vous pouvez simplement changer le fichier: en slbm :)

Voir aussi: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda (Ceci est basé sur ma réponse sur Terminal - créer des hyperliens )

alphanum
la source
Voir aussi purpleidea.com/blog/2018/06/29/hyperlinks-in-gnome-terminal pour la urlencodefonction bash qui fait que les choses fonctionnent correctement lorsque vous avez des espaces ou d'autres caractères intéressants dans les noms de répertoire / fichier.
Marius Gedminas
3

C'est un ordinateur; vous pouvez le programmer. :-)

Faire quelque chose de "cliquable" signifie soit programmer une application GUI, soit utiliser HTML. La façon la plus simple à laquelle je peux penser serait de générer une page HTML de HREF et de diriger la sortie vers, disons, lynx , en configurant le navigateur pour ouvrir emacs de manière appropriée.

James K. Lowden
la source