将python输出链接到emacs bu

2024-10-01 07:13:03 发布

您现在位置:Python中文网/ 问答频道 /正文

目标

要在Python中解析文本文件,请搜索字符串,然后在当前emacs缓冲区中插入

目的

我在Emacs下用乳胶写文档,我希望能够在打字时快速插入圣经经文。我知道esv.el中的esv-mode,它通过查询biblegateway.org插入圣经经文。但是,这只在我在线时才起作用,而且我希望能够离线插入(我经常离线工作)。

我知道pymacs,我没有尝试过,因为它看起来已经严重过时了(我甚至无法打开GitHub存储库下的帮助文件…所以它似乎正在消亡)。

我试过的

我在Python中创建了一个简单的测试文件,从虚拟文件中读取虚拟文本:

def get_verse():
    with open('/home/test.txt','r') as tmp:
        text = tmp.read()

    return text

a = get_verse()
print(a)

我通常使用Python进行数据传输、分析和处理,因此当前的应用程序超出了我的经验范围。如果有一些普遍的改善,我会很感激你的建议。

然后,我将.emacs文件下的函数定义为:

^{pr2}$

如您所见,我尝试了shell-commandshell-command-to-string命令。两者都不起作用(即不插入文本)。

但是,在Emacs中执行以下操作时,我确实从插入的虚拟文件中获取文本:

C-u M-! python /home/test.py

我现在有两个问题:

  1. 如何让Emacs执行Python代码并在当前缓冲区中插入返回的文本?

  2. 如何将变量从Emacs传递给Python代码(即从特定的书、章、节中提取)?

因为这更像是Emacs的问题,所以我没有将其标记为Python(如果您不这么想,可以随意编辑它)。


Tags: 文件texttest文本homeget圣经tmp
2条回答

下面的示例代码在Emacs buffer和python模式下,C-CC-C应该在python3shell缓冲区中打印一行以chars“1.2”开头的行,因为文本中有这样一行。在

#! /usr/bin/env python3
import re

DATEI="My-path-to-bible.txt"
SATZ = re.compile('^1.2')

with open(DATEI, "r") as jetzt:
    for line in jetzt:
        k = SATZ.match(line)
        if k:
            print(line)

Python-模式.el附带一个选项py-store-result-p:当t时,结果在kill ring中,准备好被猛拉。在

https://gitlab.com/python-mode-devs/python-mode

shell-command的文档建议您使用call-process进行编程:

(call-process PROGRAM &optional INFILE DESTINATION DISPLAY &rest ARGS)

但是,您用shell-command-to-string编写的代码对我来说是有效的,M-x bible-verse。您需要修复无效的密钥序列才能使密钥绑定生效,但是:

^{pr2}$

以下是一个接受参数并将其传递给进程的版本:

(defun bible-verse (book chapter verse)
  (interactive "*sBook: \ns%s, chapter: \ns%s, chapter %s, verse: ")
  (call-process "python" nil t t
                "~/test.py" book chapter verse))

我使用了(interactive)中的*标志来拒绝在不可写的缓冲区中运行,并且演示了如何在提示时格式化先前的参数。在

相关问题 更多 >