Создать кликабельные ссылки в терминале


13

Можно ли обрабатывать / преобразовывать выходные данные grep (или производить grepаналогичные результаты, находя строки и / или шаблоны в файлах каким-либо другим способом), чтобы результаты поиска можно было использовать в качестве ссылок (то есть гиперссылок) для открытия редактора? Я хочу нажать на в моем результате и открыть редактор в выбранной строке.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);

Я знаю, как зарегистрировать протоколы в системе, чтобы открыть редактор. Например, все URL-адреса, как sblm://*в моей системе, открываются в Sublime Text. Мой вопрос: как создать пользовательские ссылки в терминале Guake (или, может быть, это не зависит от Quake и работает для программы терминала по умолчанию)?

Примечание: связанный (?) Вопрос, есть ли терминальное приложение, которое позволяет нажимать на имена файлов? , расплывчато в конкретных деталях реализации / решения и явно не упоминает мое требование перейти непосредственно к определенной строке в файле.


Ответы:


4

Новая версия терминала GNOME теперь поддерживает гиперссылки с пользовательской целью через определенные escape-последовательности. Пытаться

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

Открытие этих работ происходит так же, как описано в ответе Стивена Китта. Чтобы решить описанную проблему, вы можете использовать сценарий sed (или более продвинутый метод) для преобразования имен файлов в гиперссылки. Для меня следующее делает работу (в bash и предполагая, что вышеуказанный способ создания гиперссылок работает)

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

(У меня не установлено sublime, но, скорее всего, вы можете просто изменить файл: на slbm :)

Смотрите также: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda (Это основано на моем ответе в Терминале - создайте гиперссылки )


Смотрите также purpleidea.com/blog/2018/06/29/hyperlinks-in-gnome-terminal для urlencodeфункции bash, которая заставляет вещи работать правильно, когда в именах каталогов / файлов есть пробелы или другие интересные символы.
Мариус Гедминас

3

Это компьютер; Вы можете запрограммировать это. :-)

Сделать что-то «кликабельное» означает либо программирование приложения с графическим интерфейсом, либо использование HTML. Самый простой способ, о котором я могу подумать, - это сгенерировать HTML-страницу HREF и направить вывод, скажем, в lynx , настроив браузер для соответствующего открытия emacs .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.