GNU emacs:设置键绑定以使用shift键突出显示文本

时间:2010-11-12 12:35:29

标签: emacs lisp key-bindings

我正在尝试设置一些键绑定以使用 Shift 键突出显示文本。我可以使用pc-selection-mode,但这不提供我想要的所有键绑定。例如,我希望能够通过按 Shift-Ctrl-down 来移动标记整个段落,我可以在大多数MS文本编辑器中执行此操作,但pc-selection-mode不会允许你这样做。

我发现这个website有一个shift_mark.el文件我可以用来设置我想要的所有键绑定。我已加入.xemacs/init.el文件来加载shift_mark.el

这是错误:

Warning (initialization): An error occurred while loading `/home/theory/phrkaj/\
.xemacs/init.el':

Wrong type argument: arrayp, (shift right)

所以我用--debug-init运行Emacs来尝试找到问题。这就是调试器提出的:

Debugger entered--Lisp error: (wrong-type-argument arrayp (shift right))
  signal(wrong-type-argument (arrayp (shift right)))
  global-set-key((shift right) shift-mark-forward-char)
  eval-buffer(#<buffer  *load*<3>> nil "/home/theory/phrkaj/shift_mark.el" nil t)  ; Reading at buffer position 1476
  load-with-code-conversion("/home/theory/phrkaj/shift_mark.el" "/home/theory/phrkaj/shift_mark.el" nil nil)
  load("~/shift_mark.el")
  eval-buffer(#<buffer  *load*<2>> nil "/home/theory/phrkaj/.xemacs/init.el" nil t)  ; Reading at buffer position 25
  load-with-code-conversion("/home/theory/phrkaj/.xemacs/init.el" "/home/theory/phrkaj/.xemacs/init.el" nil nil)
  load("/home/theory/phrkaj/.xemacs/init.el" nil nil t)
  load-file("/home/theory/phrkaj/.xemacs/init.el")
  eval-buffer(#<buffer  *load*> nil "/home/theory/phrkaj/.emacs" nil t)  ; Reading at buffer position 253
  load-with-code-conversion("/home/theory/phrkaj/.emacs" "/home/theory/phrkaj/.emacs" t t)
  load("~/.emacs" t t)
  #[nil "^H\205\264^@   \306=\203^Q^@\307^H\310Q\2027^@ \311=\2033^@\312\307\313\314#\203#^@\315\2027^@\312\307\313\316#\203/^@\317\2027^@\315\2027^@\307^H\320Q^Z\321^S\322\n\321\211#\210^K\321=\203_^@\323\324\325\307^H\326Q!\"^\\322\f\$
  command-line()
  normal-top-level()

这是shift_mark.el文件的一部分,它定义了一个焦点前锋的突出显示:

(defun shift-mark-forward-char ()
  (interactive)
  (shift-mark 'forward-char))

(global-set-key '(shift right) 'shift-mark-forward-char)

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

在GNU Emacs下,键绑定应该看起来像

(global-set-key [(shift right)] 'shift-mark-forward-char)

[…]构造一个文字数组)。但我怀疑你是以错误的方式行事。你在运行GNU Emacs,XEmacs还是两者兼而有之?什么版本?除非您运行的是非常旧的版本,pc-selection-mode应该在GNU Emacs下执行您想要的操作,并且在XEmacs下不需要进行任何设置。如果同时运行GNU Emacs和XEmacs,则可以在.emacs中使用以下代码:

(defvar running-xemacs (string-match "XEmacs" emacs-version))
(if (not running-xemacs)
    (pc-selection-mode 1))

答案 1 :(得分:1)

C-h v shift-select-mode RET

  

shift-select-mode是`simple.el'中定义的变量。   它的值是零

     

文档:   当非零时,移动的动作键会立即激活标记。

     

以这种方式激活标记时,任何移位转换点   动作键扩展了区域,如果瞬态标记模式关闭,则它   暂时开启。此外,该标记将被停用   通过任何后续的点移动键,没有换档,或   通过任何通常在瞬态标记模式下停用标记的操作。

     

参见`this-command-keys-shift-translated'的含义   移位转换。

     

您可以自定义此变量。

此变量是在GNU Emacs 23.1中引入的:

  

**暂时活跃的区域

     

* 新变量shift-select-mode,默认情况下为非nil控件   按住Shift键选择。当Shift Select模式打开时,换档   动作键(例如S-left和S-down)激活并延长临时   区域,类似于鼠标选择。

     

* 暂时活动区域,使用shift-selection或   鼠标选择,不一定在下一个命令中停用。   它们仅在点运动命令之后才被停用   换档,或在通常会停用的命令之后   瞬态标记模式中的标记(例如,任何修改标记的命令)   缓冲液)。