Сопоставьте ключи в lynx для запуска shell-команды

Можно ли добавить пользовательскую раскладку ключей в lynx (в файле конфигурации ~/.lynxrc), которая отправляет информацию (например, текущий URL, html, заголовок и т. Д.) В команду оболочки?

Пример использования: я на OSX, и у оболочки есть команда open, который пытается открыть все, что ему дано по умолчанию. Итак, если я нахожусь в Lynx и хочу переместить текущую веб-страницу в браузер по умолчанию, я бы хотел позвонить open current-url из скорлупы

Другое: сопоставление организованного файла закладок путем отправки URL-адреса и заголовка в сценарий оболочки (или что-то еще).

Использование раскладки по умолчанию ! открывает оболочку по умолчанию, но она не дает мне URL, и при этом она не запускает единственную команду и возвращается к lynx, как я хотел бы для этого.

Любые идеи очень приветствуются.

1 ответ

Решение

Я фактически закончил тем, что нашел пару способов справиться с этим. Некоторые из них более идеальны, чем другие. Потребовалось немного покопаться в файле lynx.cfg по умолчанию, чтобы понять это.

Ниже приведены два наиболее успешных способа отправки информации в команду оболочки из lynx:

  1. поместите вариант этого в ваш файл lynx.cfg. Он может отправлять только URL-адрес, поэтому он ограничен тем, что не может обрабатывать заголовок или любую другую информацию с веб-страницы без анализа самого дампа Lynx. (Это должно быть настроено с --enable-extern, которая недоступна в MacPorts версии lynx, поэтому вам нужно установить из исходников).

    # in lynx.cfg
    # EXTERNAL:<url>:<command> %s:<norestriction>:<allow_for_activate>[:environment]
    # Ex 1: send the url to `open <url>` to open default browser
    EXTERNAL:http:open %s:TRUE
    # Ex 2: download with wget if ftp page
    EXTERNAL:ftp:wget %s &:TRUE
    
    # By default ',' and '.' map to running EXTERNAL on the page and link respectively
    # KEYMAP:,:EXTERN_PAGE   # Run external program with current page
    # KEYMAP:.:EXTERN_LINK   # Run external program with current link
    
  2. Создайте скрипт и запустите его с принтером для сбора переменных среды печати.

    # in lynx.cfg
    # PRINTER:<name>:<command>:<option>:<lines/page>[:<environment>]
    PRINTER:openurl:/Users/username/bin/openurl %s:TRUE 
    

    Затем скрипт openurl, открывающий URL в браузере по умолчанию (OSX), содержит:

    #!/bin/sh
    # /Users/username/bin/openurl
    url=$LYNX_PRINT_URL
    title=$LYNX_PRINT_TITLE 
    # other variables exist like the date etc... look them up :)
    # http://osr600doc.sco.com/en/INT_lynxDoc/keystrokes/environments.html
    
    # perform magic ...
    /usr/bin/open $url
    

Могут быть и другие способы, такие как использование прокси-серверов lynxified lynxexec, lynxprog и lynxcgi, но я не смог успешно передать переменные этими методами в моих собственных тестах. Если вы знаете способ получить информацию о названии и URL-адресе с помощью этих методов, мне было бы интересно услышать ее. Приведенный выше пример № 1 может по существу захватывать заголовок и другую информацию, вызывая lynx или какой-либо другой браузер, поэтому, по существу, можно добиться всего с помощью этого метода. Кроме того, он позволяет одной назначенной клавише выполнять функцию, которая на экране печати добавляет несколько сочетаний клавиш к миксу, что нежелательно. Я рекомендую № 1 выше.

Другие вопросы по тегам