【问题标题】:Creating a new buffer with text using EmacsClient使用 EmacsClient 创建带有文本的新缓冲区
【发布时间】:2010-03-17 18:50:30
【问题描述】:

我有一个程序可以将文本发送到任何其他程序以进行进一步分析(例如 sed、grep 等)。我希望它将数据发送到 Emacs 并在那里进行分析。我该怎么做? EmacsClient 默认采用文件名,这是一个数据字符串而不是文件,我真的不想创建和删除文件只是为了向 Emacs 发送数据。

EmacsClient 有一个“eval”命令行选项,可以让您执行 lisp 代码而不是打开文件。是否有一个简单的 lisp 函数可以用给定的文本打开一个新的缓冲区?

编辑:我正在寻找类似的东西:

emacsclientw.exe -eval (open-new-buffer 'hello world')

然后会自动出现一个带有“hello world”这个词的新缓冲区。我不确定如何设置缓冲区的名称。希望有自动编号的东西。

【问题讨论】:

    标签: emacs elisp


    【解决方案1】:

    这可以满足您的要求:

    emacsclient -e '(open-buffer-with "some\nstuff\nhere")'
    
    (defun open-buffer-with (txt)
      "create a new buffer, insert txt"
      (pop-to-buffer (get-buffer-create (generate-new-buffer-name "something")))
      (insert txt))
    

    显然你可以自定义open-buffer-with 来做你想做的事。

    您可能想查看类似的问题:How do I get basic App<->Emacs integration?

    【讨论】:

    • 如果其他人在使用 EmacsW32 时遇到任何问题,我必须将单引号换成双引号,并转义命令中的双引号: emacsclient -e " (open-buffer-with \"hello, world\")"
    • @OtherMichael 你输入的内容在 Windows 中对我来说很好,但是我是从 cygwin shell 运行的。我不知道如何从一般的 DOS 提示符下自定义工作 - 当我从 DOS 提示符下尝试时,我收到错误“emacsclient.exe:没有套接字或备用编辑器”(当然我从 cygwin 启动了 Emacs壳,这可能会导致)。
    • 从 cygwin shell,你是启动 EmacsW32 还是 cygwin emacs?
    • @OtherMichael 我正在启动官方 Emacs(来自 ftp.gnu.org/gnu/emacs/windows),而不是 EmacsW32。
    • 感谢弹出到缓冲区。在尝试写入现有缓冲区时出现抖动:没有结果,在首先调用 pop-to-buffer 之前没有错误。
    【解决方案2】:

    这种方法怎么样?

    emacsclient -e '
      (progn
        (pop-to-buffer (generate-new-buffer "Piped")) 
        (insert (decode-hex-string "
        '$(perl -e 'print unpack "H*", qq("Hello, World!")'
        )'")))
    '
    

    为了显示目的,我插入了换行符来拆分这条很长的行。

    当我从终端窗口运行它时,一个名为 Piped 的新缓冲区会在我的 Emacs 窗口中打开,其中包含文本 "Hello, World!"(带有引号)。当我再次运行它时,会打开另一个名为 Piped&lt;2&gt; 的缓冲区,其中包含相同的文本。

    十六进制转义(这可能与任何其他高级语言一样容易完成,而不仅仅是 Perl)用于转义引号,否则会终止提供给 (insert) 的字符串常量。

    这种方法通过命令行上的 Emacsclient 向 Emacs 提供文本,因此很长的输入文本可能会给它带来问题。一个更通用的解决方案可能能够分解长输入数据并跨多个 Emacsclient 调用将其提供给 Emacs。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多