2012-11-28 53 views
1

我經常在不同的GNU屏幕窗口中打開幾個Emacs實例。我怎樣才能給他們單獨的編譯歷史等?如何設置Emacs實例以在單獨的GNU屏幕窗口中使用單獨的歷史記錄?

問題是:當我在一個窗口中的Emacs中執行M-x compile並關閉它,然後在另一個GNU屏幕窗口中打開另一個Emacs時,它自然會有相同的歷史記錄,也就是說,向上箭頭提供編譯命令我在另一個窗口中鍵入。

我該如何設置它們以在單獨的GNU屏幕窗口中使用單獨的命令(等)歷史記錄?

+0

我不能重現我的系統(GNU Emacs的23.3.1,Debian的味道)對這種行爲通過。當你禁用你的配置文件(例如運行'emacs -q')時,它是否也會發生? – Francesco

+2

你確定這些是單獨的Emacs實例嗎?多個emacsclient實例都連接到同一個emacs服務器,所以它們將共享相同的歷史記錄,但多個emacs實例將分別擁有自己的歷史記錄。 – Tyler

+0

我想如果這些連接到同一個服務器的emacsclient實例,他們不僅會共享命令歷史記錄,而且還會共享OP會肯定注意到的'* compilation *'緩衝區...... – Francesco

回答

0

compilation-modecompile函數使用變量compile-history。通常這不是在不同的Emacs實例之間共享的。

即:如果您:

  • 去一個屏幕會話和類型的emacs
  • ,然後輸入Mx編譯
  • ,然後輸入:「做什麼」的編譯命令
  • 和然後轉到另一個屏幕窗口並鍵入emacs
  • 然後鍵入Mx編譯
  • 然後「不做任何事」不會出現在歷史記錄中。

如果是,那麼:

  • 歷史的持久性已在該變量被啓用不知何故,檢查變量的文檔,看
  • 或「emacs的」命令是一個真正的emacsclient命令

說了這麼多,你仍然可以有不同的編譯historys,如果你想:

  • 在每個屏幕會話中設置env var
  • 將env var傳遞到emacsclient命令行上的emacsclient會話中,其中-e表示。
  • 通知(defadvice)的compilation-read-command功能,讓綁定基於新compile-history列表中的環境變量
相關問題