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

GNU emacs:设置键绑定以使用shift键高亮显示文本,emacs,lisp,key-bindings,Emacs,Lisp,Key Bindings,我正在尝试设置一些键绑定,以使用Shift键高亮显示文本。我可以使用pc选择模式,但这并不能提供我想要的所有键绑定。例如,我希望能够通过按下shift-Ctrl-down键来移动标记整个段落,我可以在大多数MS文本编辑器中这样做,但是pc选择模式不允许您这样做 我发现它有一个文件,可以用来设置我想要的所有密钥绑定。我已将.xemacs/init.el文件放入以加载shift\u mark.el 这就是错误: Warning (initialization): An error occurred

我正在尝试设置一些键绑定,以使用Shift键高亮显示文本。我可以使用
pc选择模式
,但这并不能提供我想要的所有键绑定。例如,我希望能够通过按下shift-Ctrl-down键来移动标记整个段落,我可以在大多数MS文本编辑器中这样做,但是
pc选择模式
不允许您这样做

我发现它有一个文件,可以用来设置我想要的所有密钥绑定。我已将
.xemacs/init.el
文件放入以加载
shift\u 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()

非常感谢您的帮助。

在GNU Emacs下,键绑定应该如下所示

(global-set-key [(shift right)] 'shift-mark-forward-char)
[…]
构造一个文本数组)。但我怀疑你走错了方向。您是在运行GNU Emacs、XEmacs还是两者都运行?什么版本?除非您运行的是非常旧的版本,
pc选择模式
应该在GNU Emacs下执行您想要的操作,并且在XEmacs下不需要任何设置。如果同时运行GNU Emacs和XEmacs,则可以在
.Emacs
中使用以下代码:

(defvar running-xemacs (string-match "XEmacs" emacs-version))
(if (not running-xemacs)
    (pc-selection-mode 1))
C-hv
换档选择模式
RET

shift select mode是“simple.el”中定义的变量。 它的值为零

文件: 非零时,移动的运动键会立即激活标记

以这种方式激活标记时,任何移位点 “运动关键点”会扩展该区域,如果“瞬态标记模式”处于禁用状态,则会扩展该区域 是暂时打开的。此外,该标记将被停用 通过未平移的任何后续点运动关键点,或 通过通常在瞬态标记模式下停用标记的任何操作

请参阅“此命令键已翻译”,了解 移位翻译

您可以自定义此变量

GNU Emacs 23.1中引入了此变量:

**暂时活跃区域

*新的变量移位选择模式(默认为非零)控制 轮班选择。当换档选择模式打开时,换档转换 运动键(如S-left和S-down)可激活并扩展临时移动 区域,类似于鼠标选择

*临时活动区域,使用shift选择或 鼠标选择不一定在下一个命令中停用。 它们仅在未禁用的点运动命令后停用 shift转换,或在通常会停用的命令之后 瞬态标记模式下的标记(例如,修改 缓冲区)


您正在使用哪个版本的Emacs?您的帖子在GNU Emacs和XEmacs之间看起来不一致。此外,在我没有设置的XEmacs 21下,以及在GNU Emacs 23具有
pc选择模式的情况下,
Ctrl+Shift+Down
可以按照您的要求工作。如果您启动
emacs-q
xemacs-q
(即不加载配置文件),它是否适用于您?
(defvar running-xemacs (string-match "XEmacs" emacs-version))
(if (not running-xemacs)
    (pc-selection-mode 1))