问题
Could someone please give me a hand remapping org-shiftmetaright
| org-shiftmetaleft
to [shift-select-meta]left-word
| [shift-select-meta]right-word]
. The goal is to highlight select region being a whole word (right or left) in one fell swoop in org-mode instead of changing the level of the headings. And not highlight when I release the shift, but nevertheless jump whole words to the left or right.
I would imagine that left-word
and right-word
probably have that caret "^"
in the interactive command, or something similar, so there is no separate function for shift-left-word or shift-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)
EDIT: Here is the function from bindings.el that I'm looking to use in org-mode:
(defun right-word (&optional n)
"Move point N words to the right (to the left if N is negative).
Depending on the bidirectional context, this may move either forward
or backward in the buffer. This is in contrast with \\[forward-word]
and \\[backward-word], which see.
Value is normally t.
If an edge of the buffer or a field boundary is reached, point is left there
there and the function returns nil. Field boundaries are not noticed
if `inhibit-field-text-motion' is non-nil."
(interactive "^p")
(if (eq (current-bidi-paragraph-direction) 'left-to-right)
(forward-word n)
(backward-word n)))
(defun left-word (&optional n)
"Move point N words to the left (to the right if N is negative).
Depending on the bidirectional context, this may move either backward
or forward in the buffer. This is in contrast with \\[backward-word]
and \\[forward-word], which see.
Value is normally t.
If an edge of the buffer or a field boundary is reached, point is left there
there and the function returns nil. Field boundaries are not noticed
if `inhibit-field-text-motion' is non-nil."
(interactive "^p")
(if (eq (current-bidi-paragraph-direction) 'left-to-right)
(backward-word n)
(forward-word n)))
回答1:
As you just want to fall back to the default behaviour for these bindings, we can simply remove the org-mode overrides.
(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)))
回答2:
If you just set (setq org-replace-disputed-keys t)
, org-mode will remap those conflicting keys. It is also preferable since you can still use Shift + Arrow keys in date selection.
Please see http://orgmode.org/manual/Conflicts.html for more information.
回答3:
Believe it or not I wanted to do this also. I followed the above - I also re-bound those commands to the C- key:
(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)
))
来源:https://stackoverflow.com/questions/17539007/remap-org-shiftmetaright-org-shiftmetaleft-to-shift-select-metaleft-word