2012-06-26 66 views
1

無論出於何種原因,當我在emacs(終端版)中按backspace時,它會刪除光標前的字符,但在emacs GUI(對於Mac)中同一按鍵刪除光標下的字符。任何人都可以指示我如何設置normal-erase-is-backspace-mode,這取決於emacs會話是否在GUI中?如何根據GUI使用情況設置Emacs設置?

根據C-h k的記錄,在兩種情況下backspace密鑰都綁定到DEL

+0

在這兩種情況下綁定到'backspace'的是什麼? 'C-h k'(請在你的問題中加上那個細節) – kindahero

回答

3

我用我的emacs配置以下Mac下進行精確的退格工作:

;; Fix Delete key and activate graphical frame. 
(defun my-make-frame-hook() 
    (when (window-system) 
    (normal-erase-is-backspace-mode t) 
    (when (fboundp 'ns-do-applescript) 
     (ns-do-applescript "tell application \"Emacs\" to activate")))) 

;; Do this for initial frame... 
(my-make-frame-hook) 

;; ...and for any subsequently created frame. 
(add-hook 'after-make-frame-functions 
      '(lambda (frame) 
      (select-frame frame) 
      (my-make-frame-hook))) 

該解決方案是強大的,足以完美地工作,即使你使用daemon模式。

(的NS-DO的AppleScript是提高新幀,效果顯着。)

(window-system)應該是特別感興趣的你在這裏。

+0

'(窗口系統)'看起來很有意思,是的。我會記住下次。謝謝! –

+0

檢查一下,我現在喜歡這個!在守護進程模式下防止意外可能對我有所幫助。謝謝! –

1

如果emacs使用窗口系統,則功能display-graphic-p將返回t,如果是終端會話,則返回nil。你可以這樣做:

(setq normal-erase-is-backspace (display-graphic-p)) 
+0

雖然類似的方法有一個問題。如果以守護進程模式啓動emacs,則不會使用窗口系統。但是,您可以使用emacsclient創建一個新的框架,該框架將使用已配置的守護程序和窗口系統。這就是爲什麼我原來不得不爲後製作幀函數添加一個鉤子。 –

0

你使用的是什麼版本的Emacs?看起來很腥,你應該配置任何退格工作。

開始

emacs -Q 

,並說明如何退格的作品。

+0

我向你保證,即使在版本23.4中使用庫存Emacs的Cocoa UI時,也需要使用普通擦除後退來手動配置退格。雖然我沒有嘗試刪除v24上的配置。 –

相關問題