在 emacs 中捕获和解析 xterm 剪切缓冲区

在 emacs 中捕获和解析 xterm 剪切缓冲区

我想对 Emacs 进行间接控制(在 Ubuntu Linux 中),以便我可以使用光标在 xterm 中滑动一些文本,将其剪切到 X 剪切缓冲区中,然后在 Emacs 中运行宏来解析剪切缓冲区文本以查找文本“line XXXX”,其中 X 是全部数字,然后转到当前 Emacs 缓冲区中的那一行。

我认为这是可能的,通过使用emacs客户端让 emacs 运行一个宏,然后宏解析剪切缓冲区,然后向已解析的数字发出 goto-line 命令。

我的问题是我不知道如何编写 emacs 脚本来读取 X 剪切缓冲区并对其进行解析。我一直在研究食谱示例,但似乎都不适合。

我的目标是简化开发。当我在 xterm 中打印错误/信息/状态消息时,我想滑动错误消息,该消息显示“第 2776 行语法错误”,然后按下 Ubuntu 将解释的键盘快捷键以启动 emacsclient,这会导致我已经打开的 Emacs 抓取该文本、解析它并转到我刚刚滑动的行号。只有最后一步解析才是困难的部分。

(是的,我知道你可以在 emacs 内部运行 shell,但这不适合我的工作流程)

我如何让 emacs 查看 X 剪切缓冲区、解析出行号并向当前缓冲区发出“goto-line”命令?

谢谢!

答案1

(x-get-selection) 是一个 elisp 函数,它返回当前 X11 选定的文本。

此外,获取错误消息并在 emacs 中使用它以便能够直接跳转到指定文件/行的标准方法是运行 Mx compile,或使用自定义编译模式的命令。emacs 已经识别了 gcc、g++ 和许多其他程序的输出。使用 Mx compile emacs 会自动为其识别的错误消息生成可点击的链接,并且在较新的 emacs 版本中,它们响应左键单击,而不是默认为中键单击。

答案2

如果您可以使用其他实用程序解析输出以获取文件名和行号,则可以通过执行以下操作轻松地将光标放在指定行上并打开该文件:

emacsclient +LINE_NUMBER FILE_NAME

这应该会导致 emacsclient 采用最近的缓冲区并将其替换为 LINE_NUMBER 处的 FILE_NAME。

相关内容