【问题标题】:GNU emacs: setting keybindings to highlight text with shift keyGNU emacs:设置键绑定以使用 shift 键突出显示文本
【发布时间】:2010-11-12 12:35:29
【问题描述】:

我正在尝试设置一些键绑定以使用 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)

感谢任何帮助。

【问题讨论】:

  • 您使用的是什么版本的 Emacs?您的帖子在 GNU Emacs 和 XEmacs 之间看起来不一致。此外,在我没有设置的 XEmacs 21 和带有pc-selection-mode 的 GNU Emacs 23 下,Ctrl+Shift+Down 确实可以按照您的要求工作。如果您启动 emacs -qxemacs -q(即不加载配置文件),它对您有用吗?

标签: emacs lisp key-bindings


【解决方案1】:

在 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))

【讨论】:

    【解决方案2】:

    C-hv shift-select-mode RET

    shift-select-mode 是一个在 `simple.el' 中定义的变量。 它的值为nil

    文档: 当非零时,移动的运动键会瞬间激活标记。

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

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

    您可以自定义此变量。

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

    ** 临时活跃区域

    * 新变量 shift-select-mode,默认为非 nil,控制 轮班选择。当 Shift Select 模式打开时,shift-translated 运动键(例如 S-left 和 S-down)激活和扩展临时 区域,类似于鼠标选择。

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

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      相关资源
      最近更新 更多