make frame functions参数后的Emacs无效

make frame functions参数后的Emacs无效,emacs,elisp,emacsclient,Emacs,Elisp,Emacsclient,我的.emacs文件中有以下代码。它应该将输入焦点移动到任何新创建的帧 (defun foo-focus-new-frame (frame) (select-frame-set-input-focus (frame))) (add-hook 'after-make-frame-functions 'foo-focus-new-frame t) 当我直接从命令行运行emacs时,这很好。但是,如果emacs未启动,我尝试运行以下程序: emacsclient-c-a''test.txt 我

我的
.emacs
文件中有以下代码。它应该将输入焦点移动到任何新创建的帧

(defun foo-focus-new-frame (frame)
  (select-frame-set-input-focus (frame)))
(add-hook 'after-make-frame-functions 'foo-focus-new-frame t)
当我直接从命令行运行emacs时,这很好。但是,如果emacs未启动,我尝试运行以下程序:

emacsclient-c-a''test.txt
我得到以下错误:

*错误*:符号的函数定义无效:帧

为什么会这样?根据《创建框架后的
函数》
钩子只能在新创建框架后运行,因此为什么我的函数找不到它?

框架函数不存在,可能您想访问参数而不是调用函数,也就是说,在
foo foo focus new frame
中有多余的括号:

(defun foo-focus-new-frame (frame)
  (select-frame-set-input-focus frame))

我认为您会发现,它的失败方式与您正常运行Emacs时完全相同(请记住,初始帧是在对自定义代码求值之前创建的)。尝试
C-X52
创建一个新的框架。@phils,你确实是对的。我的错误。运行EmacClient时(因为它拒绝启动)比正常运行Emacs时更明显(因为错误只显示在
*Messages*
缓冲区中,但一切仍正常运行)。非常感谢!错过了这一点,我感到很傻——我仍然在努力学习Lisp。