Emacs 重新映射组织shiftmitaright |组织shiftmetaleft到[shift-select-meta]左单词|[shift-select-meta]右单词]

Emacs 重新映射组织shiftmitaright |组织shiftmetaleft到[shift-select-meta]左单词|[shift-select-meta]右单词],emacs,org-mode,Emacs,Org Mode,谁能帮我把org-shiftmetalaight|org-shiftmetaleft重新映射到[shift-select-meta]left-word[shift-select-meta]right-word]。目标是在组织模式下一次性突出显示选定区域作为一个完整的单词(右或左),而不是更改标题的级别。当我释放移位时,不会突出显示,但会将整个单词向左或向右跳跃 我可以想象,left-word和right-word可能在交互命令中有插入符号“^”,或者类似的东西,因此没有单独的左移字或右移字功能

谁能帮我把
org-shiftmetalaight
|
org-shiftmetaleft
重新映射到
[shift-select-meta]left-word
[shift-select-meta]right-word]
。目标是在组织模式下一次性突出显示选定区域作为一个完整的单词(右或左),而不是更改标题的级别。当我释放移位时,不会突出显示,但会将整个单词向左或向右跳跃

我可以想象,
left-word
right-word
可能在交互命令中有插入符号“^”,或者类似的东西,因此没有单独的左移字或右移字功能

(defvar custom-keys-mode-map (make-keymap) "custom-keys-mode keymap.")

(define-minor-mode custom-keys-mode
  "A minor mode so that my key settings override annoying major modes."
  t " my-keys" 'custom-keys-mode-map)

(custom-keys-mode 1)

(defun my-minibuffer-setup-hook ()
  (custom-keys-mode 0))

(add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)

(defadvice load (after give-my-keybindings-priority)
  "Try to ensure that my keybindings always have priority."
  (if (not (eq (car (car minor-mode-map-alist)) 'custom-keys-mode))
      (let ((mykeys (assq 'custom-keys-mode minor-mode-map-alist)))
        (assq-delete-all 'custom-keys-mode minor-mode-map-alist)
        (add-to-list 'minor-mode-map-alist mykeys))))

(ad-activate 'load)

;; (define-key custom-keys-mode-map (kbd "<C-key>") 'some-command)

(define-key custom-keys-mode-map (kbd "M-<left>") 'left-word)
(define-key custom-keys-mode-map (kbd "M-<right>") 'right-word)

(define-key custom-keys-mode-map (kbd "M-S-<left>") 'left-word)
(define-key custom-keys-mode-map (kbd "M-S-<right>") 'right-word)

由于您只想回到这些绑定的默认行为,我们可以简单地删除组织模式覆盖

(加载后评估“组织”
"(progn)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射(kbd“”)无)

信不信由你,我也想这么做。我遵循了上面的步骤-我还将这些命令重新绑定到C键:

(eval-after-load "org"
'(progn
 (define-key org-mode-map (kbd "<M-S-left>") nil)
 (define-key org-mode-map (kbd "<M-S-right>") nil)
 (define-key org-mode-map (kbd "<M-left>") nil)
 (define-key org-mode-map (kbd "<M-right>") nil)
 (define-key org-mode-map [C-S-right] 'org-shiftmetaright)
 (define-key org-mode-map [C-S-left] 'org-shiftmetaleft)
 (define-key org-mode-map [C-right] 'org-metaright)
 (define-key org-mode-map [C-left] 'org-metaleft)
 (define-key org-mode-map [C-S-return] 'org-insert-todo-heading)
 ))
(加载后评估“组织”
"(progn)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射(kbd“”)无)
(定义关键组织模式映射[C-S-右]“组织轮班权”)
(定义关键组织模式映射[C-S-left]“组织移位MetaLeft”)
(定义关键组织模式映射[C-右]“组织元右”)
(定义关键组织模式映射[C-左]“组织metaleft”)
(定义关键组织模式映射[C-S-return]“组织插入todo标题)
))
如果您刚刚设置了
(setq org replace有争议的密钥t)
,org模式将重新映射那些冲突的密钥。由于您仍然可以在日期选择中使用Shift+箭头键,因此也更可取


有关更多信息,请参阅。

org shiftmetaleft
是一个函数
[shift-select-meta]left-word
是…?这是我的说法:shift+alt+left和shift+alt+right这是在OSX上向左或向右突出显示/选择单词的地方,我认为Windows也是如此(但我已经很久没有使用该操作系统了)。基本上,我只需要禁用这些键的组织模式映射,而我以前禁用的尝试没有成功,所以我考虑重新映射。最好使用
C-hk
C-hc
来询问Emacs如何表示键<代码>在本例中。即
左单词
,它激活交互式命令的
“^”
部分,以便它也选择区域。它在文本模式和latex模式下工作得很好,但是组织模式会覆盖它。使用
org模式挂钩
或执行
(加载“org”(progn…)后评估)
再次感谢您的帮助。如果没有这个线程,我将通过重新映射一堆键而将init.el文件弄得一团糟,而不了解取消模式特定绑定的替代方法。
(eval-after-load "org"
'(progn
 (define-key org-mode-map (kbd "<M-S-left>") nil)
 (define-key org-mode-map (kbd "<M-S-right>") nil)
 (define-key org-mode-map (kbd "<M-left>") nil)
 (define-key org-mode-map (kbd "<M-right>") nil)
 (define-key org-mode-map [C-S-right] 'org-shiftmetaright)
 (define-key org-mode-map [C-S-left] 'org-shiftmetaleft)
 (define-key org-mode-map [C-right] 'org-metaright)
 (define-key org-mode-map [C-left] 'org-metaleft)
 (define-key org-mode-map [C-S-return] 'org-insert-todo-heading)
 ))