2012-07-29 45 views
3

加載GTK程序你好,我想寫一個Python程序,以節省窗口焦點的損失Emacs的文件。如何Pymacs

對於我寫的,創建一個完整的GTK應用程序,並使用wnck模塊一個Python PROGRAMM:

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的PROGRAMM凍結Emacs的;可能是因爲Emacs等待程序完成。有沒有辦法讓程序在後臺運行?

任何幫助非常感激。

回答

1

Pymacs主要只是意味着你可以PROGRAMM的emacs在Python擴展。這不是一種IPC方法。

如果你想有兩個程序同時運行,並且互相發送消息時,外部事件發生時,你需要IPC。

IPC對現代的Linux系統最常用的形式是(在可怕的無證)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。

+0

非常感謝,我會嘗試您的建議。 – Rockiger 2012-08-12 09:39:24