Emacs: Есть ли лучшее поведение PgDn / PgUp с cua-mode? - PullRequest
5 голосов
/ 23 декабря 2010

Мне бы хотелось, чтобы клавиши PgUp и PgDn просто перемещали содержимое показанного файла вверх или вниз, но курсор ( точка в Emacs)Линго) должен оставаться там, где он есть (на экране).К сожалению, поведение Emacs по умолчанию отличается.Поведение по умолчанию сложно описать, но если вы нажмете PgDn , а затем PgUp , вы не окажетесь там, где были раньше (!).

Этоне новая проблема, и существует хорошее решение под названием sfp-page-up и sfp-page-down в EmacsWiki .

(defun sfp-page-up ()
  (interactive)
  (setq this-command 'previous-line)
  (previous-line
   (- (window-text-height)
      next-screen-context-lines)))

Существует однопроблема, однако, в сочетании с режимом cua , который обеспечивает (среди прочего) выбор смещения (нажатие Shift и клавишу перемещения курсора, например или PgDn начинает выделять выделенную область):

cua-mode не распознает переопределенные PgUp / PgDn , т. Е. Они не распознаютначать выбор.Обходной путь должен сначала нажать клавишу или , а затем продолжить с PgUp / PgDn .

Howя могу заставить cua-mode хорошо играть с sfp-page-up/down?

Ответы [ 2 ]

3 голосов
/ 23 декабря 2010

Если вы добавите ^ к началу спецификации (interactive "...") (внутри двойных кавычек) функций, они будут поддерживать выбор смены в Emacs 23.1 и более поздних версиях.

2 голосов
/ 24 декабря 2010

Я нашел другую половину решения в потоке , если я установил home ключ (...), то shift + home не выделяет текст в режиме cua на gnu.emacs. помощь

Чтобы принять участие в выборе смены cua-mode, функция (в моем случае sfp-page-xxx) должна иметь свойство символа CUA, установленное на move:

(put 'sfp-page-up 'CUA 'move)

(Для первой половины решения см. ответ JSON ).

Итак, вот мое полное решение:

(defun sfp-page-down (&optional arg)
  (interactive "^P")
  (setq this-command 'next-line)
  (next-line
   (- (window-text-height)
      next-screen-context-lines)))
(put 'sfp-page-down 'isearch-scroll t)
(put 'sfp-page-down 'CUA 'move)

(defun sfp-page-up (&optional arg)
  (interactive "^P")
  (setq this-command 'previous-line)
  (previous-line
   (- (window-text-height)
      next-screen-context-lines)))
(put 'sfp-page-up 'isearch-scroll t)
(put 'sfp-page-up 'CUA 'move)
...