Быстрое изменение окна в Emacs (или повторение последнего ярлыка одним ударом) - PullRequest
6 голосов
/ 19 февраля 2011

если я хочу изменить окна в emacs, я делаю Cx o, и это нормально для меня ... но когда я хочу менять окно много раз подряд, Cx o не очень удобно ... есть ли способ изменить окно одним ударом после первого Cx o? и вообще ... есть ли (один) удар, который бы повторил мой последний ярлык?

Ответы [ 4 ]

6 голосов
/ 19 февраля 2011

Я использую C-tab для переключения окон:

(global-set-key [C-tab] 'other-window)

Удерживая нажатой клавишу Control, вы можете многократно перемещаться по окнам, просто нажимая клавишу Tab.

РЕДАКТИРОВАТЬ: мой оригинальный ответсодержал следующее

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

Это больше не правда.Emacs теперь содержит repeat.el, который учитывает поведение, которое запрашивает rabidmachine9.

Следующий код создаст повторяющийся other-window, такой, что после первого нажатия C-x o, последующего нажатия oпродолжит переход к следующему окну.

(require 'repeat)
(defun make-repeatable-command (cmd)
  "Returns a new command that is a repeatable version of CMD.
The new command is named CMD-repeat.  CMD should be a quoted
command.

This allows you to bind the command to a compound keystroke and
repeat it with just the final key.  For example:

  (global-set-key (kbd \"C-c a\") (make-repeatable-command 'foo))

will create a new command called foo-repeat.  Typing C-c a will
just invoke foo.  Typing C-c a a a will invoke foo three times,
and so on.

See related discussion here: 
http://batsov.com/articles/2012/03/08/emacs-tip-number-4-repeat-last-command/#comment-459843643
https://groups.google.com/forum/?hl=en&fromgroups=#!topic/gnu.emacs.help/RHKP2gjx7I8"
  (fset (intern (concat (symbol-name cmd) "-repeat"))
        `(lambda ,(help-function-arglist cmd) ;; arg list
           ,(format "A repeatable version of `%s'." (symbol-name cmd)) ;; doc string
           ,(interactive-form cmd) ;; interactive form
           ;; see also repeat-message-function
           (setq last-repeatable-command ',cmd)
           (repeat nil)))
  (intern (concat (symbol-name cmd) "-repeat")))

(global-set-key (kbd "C-x o") (make-repeatable-command 'other-window))

Функция make-repeatable-command, которая затем будет использоваться для создания других повторяющихся команд с использованием того же шаблона.

5 голосов
/ 19 февраля 2011

Выезд windmove ;это позволяет вам просто удерживать клавишу-модификатор и нажимать клавишу со стрелкой, чтобы перейти к окну в этом направлении.Я использовал его в течение многих лет с модификатором по умолчанию (shift), и, как ни странно, он не мешает моим импульсам использовать выделение текста стрелкой в ​​других приложениях. для кадров, которые я действительно должен попробовать ...

4 голосов
/ 27 июля 2013

С опозданием на вечеринку, но есть также нумерация окон (известная как 'номер окна' в MELPA).

Сюда входит номер окна в строке состояния -1-, -2- и т. Д., И обеспечивает M-1, M-2 и т. Д. Привязки клавиш для их непосредственного выбора.Очень быстро.

4 голосов
/ 19 февраля 2011

У вас есть, скажем, 10 окон в кадре, и вы делаете M-x other-window много раз подряд, я так понимаю, вы хотите прыгнуть с, скажем, окна № 2 в окно № 8, а затем на окно № 1 и так далее. Делая много other-window подряд, я представляю, что вы не делаете ничего важного, пока не достигнете желаемого окна.

Посмотрите, поможет ли universal-argument, связанный с C-u. В 10-оконном фрейме, если вы находитесь в окне № 3 и хотите перейти к окну № 9, вы переходите к следующему шестому окну. Так что вы бы сделали C-u 6 C-x o. Или вы также можете сделать C-u -4 C-x o и добраться до окна № 9 из окна № 3.

...