gpt4 book ai didi

python - 如何在 Pymacs 中加载 GTK 程序

转载 作者:行者123 更新时间:2023-11-28 18:51:54 27 4
gpt4 key购买 nike

你好,我正在尝试编写一个 Python 程序来在失去窗口焦点时保存 Emacs 的文件。

为此我编写了一个 Python 程序来创建一个完整的 gtk 应用程序并使用 wnck 模块:

from Pymacs import lisp

import wnck
import gtk

class AutoSaver(object):
"""This class watches if Emacs looses focus and if Emacs looses
focus saves all buffers with files
"""

def __init__(self):
"""
"""
self.screen = wnck.screen_get_default()
self.screen.force_update()
self.screen.connect("active_window_changed", self.watch_for_emacs)

def watch_for_emacs(self, screen, data=None):
screen.force_update()
win_list = screen.get_windows()
for win in win_list:
if win.get_application().get_name().startswith("emacs"):
self.save_all_buffers()

def save_all_buffers(self):
lisp.save_some_buffers(True, None)

def main(self):
"""
Starts GTK's main loop.
"""
gtk.main()

def start():
autosaver = AutoSaver()
autosaver.main()

start.interaction = ''

不幸的是,Python 程序卡住了 Emacs;可能是因为 Emacs 等待程序完成。有没有办法让程序在后台运行?

非常感谢任何帮助。

最佳答案

Pymacs 主要意味着您可以在 python 中编写 emacs 扩展。它不是 IPC 方法。

如果你想让两个程序同时运行,并在外部事件发生时互相发送消息,你就需要IPC。

在现代 Linux 系统上,一种非常常见的 IPC 形式是(可怕的未记录的)dbus。 Emacs 支持 dbus(这似乎也没有很好的记录)。

然而,here (the answer by rakete) is a very nice example on how to provide a dbus interface to an emacs function .

因此,您可能想要做的是在 emacs 中创建一个“安全缓冲区”方法,将其注册为可从 dbus 访问,启动您的程序以监视未聚焦事件并通过 dbus 调用该“安全缓冲区”方法.

关于python - 如何在 Pymacs 中加载 GTK 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com