Emacs бежит вперед чар в крючке - PullRequest
0 голосов
/ 31 августа 2011

Я написал это ниже, чтобы перейти к поиску следующего периода в текстовом режиме. Он работает нормально, за исключением попыток заставить его двигаться вперед после того, как он найдет точку. Я не уверен, как это сделать, но здесь была моя попытка.

(add-hook 'text-mode-hook (lambda ()                                                                                                                                                                                                 
                (local-set-key (kbd "s-p")                                                                                                                                                                                            
                       (lambda () (interactive) ((search-backward "." nil t) (forward-char))))))       

Окончательное решение Я объединил функции из решения ajk. Я не мог заставить другой работать без надстройки. Кто-то может знать, как заставить работать второй. Нижеследующее полностью работает и выполняет поиск в обратном направлении за предыдущий период, если только он не находится в данный момент.

(add-hook 'text-mode-hook
      (lambda ()
        (local-set-key (kbd "s-p")
                       (lambda ()
                         (interactive)
                          (if (looking-back "\.")
                         (backward-char))
                         (search-backward "." nil t)
                         (forward-char)))))

Спасибо за помощь.

1 Ответ

4 голосов
/ 31 августа 2011

В последних двух вызовах функций в анонимной функции, назначаемой вами клавише, есть круглые скобки, из-за чего Emacs Lisp думает, что вы хотите вызвать функцию с именем (search-backward "." nil t). Попробуйте

(add-hook 'text-mode-hook
          (lambda ()
            (local-set-key (kbd "s-p")
                           (lambda ()
                             (interactive)
                             (search-backward "." nil t)
                             (forward-char)))))

Проблема, с которой я столкнулся бы, заключается в том, что она не повторяется. Если вы запустите его во второй раз, он найдет тот же период, который вы только что нашли. Возможно, вы захотите проверить, является ли предыдущий символ точкой, и если это так, пропустите его. Кроме того, вы можете немного упростить его, используя define-key для явного добавления привязки к таблице ключей text-mode:

(define-key text-mode-map (kbd "s-p")
  (lambda ()
    (interactive)
    (if (looking-back "\.")
        (backward-char))
    (search-backward "." nil t)
    (forward-char)))
...