当我使用语义来定位符号时,“void-variable last-command-char”错误

时间:2013-08-20 13:17:53

标签: emacs cedet emacs-semantic

由于我使用Emacs 24,当我试图找到符号的位置时,我总是会收到错误 与semantic-symref-symbol一起发生。详情如下:

  1. 当光标打开时,我按一下键调用semantic-symref-symbol 我的源文件的一些符号,然后我得到一个描述在哪里的列表 符号出现在*Symref缓冲区中。
  2. 在列表的一个条目上,我按SPACERETURN键,它跳转到 正确的位置,但同时,Emacs弹出*Backtrace*缓冲区 其他窗口。其内容如下:

    Debugger entered--Lisp error: (void-variable last-command-char)
      semantic-symref-rb-goto-match(#<overlay from 97 to 126 in *Symref stateStack>)
      push-button(97)
      call-interactively(push-button nil nil)
    

    然后我按照semantic-symref-rb-goto-match函数进行操作 在 semantic-symref-list.el 中定义。 elisp函数定义为 下面:

    (defun semantic-symref-rb-goto-match (&optional button)
      "Go to the file specified in the symref results buffer.
    BUTTON is the button that was clicked."
      (interactive)
      (let* ((tag (button-get button 'tag))
         (line (button-get button 'line))
         (buff (semantic-tag-buffer tag))
         (win (selected-window))
         )
        (switch-to-buffer-other-window buff)
        (goto-line line)
        (pulse-momentary-highlight-one-line (point))
        (when (eq last-command-char ? ) (select-window win))
        )
      )
    

    我在函数中找到了last-command-char,但我不明白 为什么Emacs抱怨(void-variable last-command-char)。这应该 是spacereturn

  3. 的关键代码

    我想知道原因并解决这个问题。

2 个答案:

答案 0 :(得分:5)

last-command-char的引用替换为last-command-event。如果存在,last-command-charlast-command-event的别名。

答案 1 :(得分:0)

last-command-char已从Emacs 24.3中删除。它仍然在Emacs 24.2中定义。它在24.3 NEWS中提到:

** Some obsolete functions, variables, and faces have been removed:
*** `last-input-char', `last-command-char', `unread-command-char'

在Emacs 24.2中,C-h v last-command-char表示至少从Emacs 19.34开始已经过时了。

请向代码所有者报告错误。