如何根据GUI使用情况设置Emacs设置?

如何根据GUI使用情况设置Emacs设置?,emacs,Emacs,无论出于何种原因,当我在emacs(终端版本)中按backspace时,它会删除光标前的字符,但在emacs GUI(对于Mac)中按相同的键会删除光标下的字符。有人能告诉我如何根据emacs会话是否在GUI中设置正常擦除是退格模式吗 对于记录,根据C-hk,在这两种情况下,backspace键都绑定到DEL。我在Mac下的emacs配置中使用以下命令使backspace正常工作: ;; Fix Delete key and activate graphical frame. (defun my

无论出于何种原因,当我在emacs(终端版本)中按
backspace
时,它会删除光标前的字符,但在emacs GUI(对于Mac)中按相同的键会删除光标下的字符。有人能告诉我如何根据emacs会话是否在GUI中设置
正常擦除是退格模式


对于记录,根据
C-hk
,在这两种情况下,
backspace
键都绑定到
DEL

我在Mac下的emacs配置中使用以下命令使backspace正常工作:

;; 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)))
此解决方案足够健壮,即使您使用的是守护程序模式,也可以完美地工作

(显然,ns do applescript是为了增加新的帧。)

这里的
(窗口系统)
应该是您特别感兴趣的

如果emacs正在使用窗口系统,则函数将返回
t
,如果是终端会话,则函数将返回
nil
。你可以这样做:

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

您正在使用哪个版本的Emacs?要使backspace正常工作,您必须配置任何东西,这似乎很可疑

emacs -Q

并描述退格是如何工作的。

在这两种情况下,退格的绑定内容是什么
C-hk
(请在您的问题中添加该细节)我向您保证,即使在23.4版中,当您使用stock Emacs的Cocoa UI时,您也需要使用normal erase is backspace手动配置backspace。不过,我还没有尝试在v24上删除该配置。不过,类似的方法有一个问题。如果您在守护程序模式下启动emacs,它将不会使用窗口系统。但是,您可以使用EmacClient创建一个新框架,该框架将使用已配置的守护进程和窗口系统。这就是为什么我最初不得不在make框架函数后添加一个钩子。
(窗口系统)
看起来很有趣,是的。下次我会记得的。谢谢检查一下,我现在喜欢这个!在守护进程模式下防止意外可能对我有帮助。谢谢