gpt4 book ai didi

EMACS 重新绑定(bind) C-spc 禁用所选区域的突出显示

转载 作者:行者123 更新时间:2023-12-01 07:47:37 26 4
gpt4 key购买 nike

EMACS 24.1。我需要将 Ctrl-space 重新绑定(bind)到一个自定义函数:

  • 转到行尾
  • 删除尾随空格(如果有的话)
  • 设置标记(正常Ctrl-space)

这是我的代码不工作:

(define-key global-map [?\C- ] 'my-set-mark-command)
(defun my-set-mark-command()
(interactive)
(end-of-line)
(delete-char (* -1 (skip-chars-backward "\t\s")));;delete trailing spaces
(set-mark-command nil))

当没有尾随空格时它正常工作:开始选择并突出显示该区域。尾随空格时:删除尾随空格,停在行尾,设置标记但不突出显示该区域。

如果我删除最后一个命令 (set-mark-command) 并手动运行它 M-xset-mark-command 它会起作用.请有人能帮我使这个功能正常工作吗?

最佳答案

修改命令导致变量deactivate-mark被重置,导致标记丢失。在 save-excursion 的文档中,它说明了如何通过将 deactivate-mark 变量与 let 绑定(bind)来禁用该行为。然后您可以将代码更改为:

(defun my-set-mark-command ()
(interactive)
(end-of-line)
(let (deactivate-mark)
(delete-char (* -1 (skip-chars-backward "\t\s")))) ;;delete trailing spaces
(set-mark-command nil))

甚至将整个 let 包含在 save-excursion 中。

参见手册:

http://www.gnu.org/software/emacs/manual/html_node/elisp/The-Mark.html#index-deactivate_002dmark-2801

关于EMACS 重新绑定(bind) C-spc 禁用所选区域的突出显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11080242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com