Перераспределить org-shiftmetaright | org-shiftmetaleft to [shift-select-meta] левое слово | [Сдвиг выберите мета-] правая кнопка слова]

Может кто-нибудь, пожалуйста, дайте мне руку переназначение |org-shiftmetarightorg-shiftmetaleft к |[shift-select-meta]left-word[shift-select-meta]right-word], Цель состоит в том, чтобы выделить выбранный регион как целое слово (вправо или влево) одним махом в режиме org, вместо изменения уровня заголовков. И не выделять, когда я отпускаю сдвиг, но тем не менее прыгать целые слова влево или вправо.

Я полагаю, чтоleft-word а такжеright-word вероятно, есть эта карета"^" в интерактивной команде, или что-то подобное, поэтому не существует отдельной функции для shift-left-word или 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 "") 'some-command)

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

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

РЕДАКТИРОВАТЬ: Вот функция из bindings.el, что яЯ хочу использовать в орг-режиме:

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

Ответы на вопрос(3)

Ваш ответ на вопрос