是否可以向 lynx 添加自定义键盘映射(在配置文件 ~/.lynxrc 中),它将信息(例如当前 URL、html、标题等)发送到 shell 命令?
示例用例:
我在 OSX 上,shell 有一个命令 open
,它试图以默认方式打开给它的任何东西。所以,如果我在 lynx 中并想将当前网页移动到默认浏览器,我想从 shell 调用 open current-url
。
另一个: 通过将 URL 和标题发送到 shell 脚本(或其他东西)来整理有组织的书签文件。
使用默认键盘映射 !
打开默认 shell,但它没有给我 URL,也没有运行单个命令并返回到 lynx,正如我想要的那样。
任何想法将不胜感激。
最佳答案
实际上我最终找到了几种方法来处理这个问题。有些比其他的更理想。对默认的 lynx.cfg 文件进行了一些挖掘,以找出其中的一些内容。
以下是我从 lynx 向 shell 命令发送信息的两种最成功的方法:
在您的 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
创建脚本并使用打印机运行它以收集打印环境变量。
# in lynx.cfg
# PRINTER:<name>:<command>:<option>:<lines/page>[:<environment>]
PRINTER:openurl:/Users/username/bin/openurl %s:TRUE
然后在默认浏览器 (OSX) 中打开 url 的脚本 openurl 包含:
#!/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。
https://stackoverflow.com/questions/10005225/