Crear enlaces clicables en la terminal

13

¿Es posible procesar / transformar la salida de grep (o producir grepresultados similares, encontrar cadenas y / o patrones en archivos, de alguna otra manera) de modo que los resultados de búsqueda se puedan usar como enlaces (es decir, hipervínculos) para abrir un editor? Quiero hacer clic en a en mi resultado y abrir mi editor en la línea seleccionada.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);

Sé cómo registrar protocolos en el sistema para abrir el editor. Por ejemplo, todas las URL como sblm://*en mi sistema se abren en Sublime Text. Mi pregunta es: ¿cómo crear enlaces personalizados en la terminal de guake (o tal vez no depende del terremoto y funciona para el programa de terminal predeterminado)?

Nota: la pregunta relacionada (?), ¿Existe una aplicación de terminal que permita hacer clic en los nombres de los archivos? , es vago en detalles específicos de implementación / solución, y no menciona explícitamente mi requisito de saltar directamente a una línea identificada en el archivo.

Kein
fuente

Respuestas:

4

La versión más reciente del terminal GNOME ahora admite hipervínculos con destino personalizado a través de ciertas secuencias de escape. Tratar

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

Abrir estos trabajos de la misma manera como se describe en la respuesta de Stephen Kitt. Para abordar el problema que describió, podría usar un script sed (o algún método más avanzado) para traducir los nombres de los archivos a hipervínculos. Para mí, lo siguiente hace el trabajo (en bash y suponiendo que la forma anterior para crear hipervínculos funcione)

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

(No tengo sublime instalado, pero lo más probable es que simplemente pueda cambiar el archivo: a slbm :)

Ver también: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda (Esto se basa en mi respuesta en la Terminal - crear hipervínculos )

alfanum
fuente
Vea también purpleidea.com/blog/2018/06/29/hyperlinks-in-gnome-terminal para la urlencodefunción bash que hace que las cosas funcionen correctamente cuando tiene espacios u otros caracteres interesantes en los nombres de directorio / archivo.
Marius Gedminas
3

Es una computadora; Puedes programarlo. :-)

Hacer algo "cliqueable" significa programar una aplicación GUI o de alguna manera usar HTML. La forma más simple que se me ocurre sería generar una página HTML de HREF y canalizar la salida a, por ejemplo, Lynx , configurar el navegador para abrir emacs adecuadamente.

James K. Lowden
fuente