LINUX.ORG.RU

Перемещение между окнами в Emacs?

 ,


2

2

Ищу пакет или кусок кода который можно впихнуть в конфиг, который реализует перемещение между окнами расположенными по краям фрейма. Т.е. иметь возможность перейти в крайнее левое\правое\верхнее\нижнее окно.

В данный момент использую:

windmove-left 
windmove-down 
windmove-up
windmove-right

Но мне нужно нечто на подобие:

evil-window-move-far-left
evil-window-move-far-right
evil-window-move-very-bottom
evil-window-move-very-top

но только не перемещая текущее окно, а всего лишь переместить курсор, т.е. переместиться в окно, не перемещая само окно.

ЗЫ. Гугль поиск ничего не дал( либо руки кривые.

У вима есть

  • CTRL-W t – move cursor to top-left window
  • CTRL_W b – move cursor to bottom-right window

Вангую, что в емаксе есть что-то похожее. А если нет, то можно навелосипедить на elisp.

Но вообще, окна могут быть очень кучеряво расположены, так что будет не ясно в какое из 3-х самых левых окон ты хочешь переместиться.

habamax ★★★ ()
Ответ на: комментарий от Bad_ptr

windmove уммет wrap

Если я все правильно понял, идея в том что бы использовать windmove-wrap-around, но тут логика не удобная (надо учитывать слишком много факторов), и не совсем то, хотя очень близко. Спасибо за совет:)

У вима есть

CTRL-W t – move cursor to top-left window
CTRL_W b – move cursor to bottom-right window

Вангую, что в емаксе есть что-то похожее. А если нет, то можно >навелосипедить на elisp.

Похоже не завезли в evil-mode, еще погуглю, а потом придется велосипедить, хотя в лиспе не силен((

lintiay ()
Последнее исправление: lintiay (всего исправлений: 1)
Ответ на: комментарий от habamax

Вот мой велосипед:

(defun rc:window-move-far-right () (interactive) (rc:window-far-move 'right))
(defun rc:window-move-far-left () (interactive) (rc:window-far-move 'left))
(defun rc:window-move-very-top () (interactive) (rc:window-far-move 'up))
(defun rc:window-move-very-bottom () (interactive) (rc:window-far-move 'down))
(defun rc:window-far-move (dir &optional arg window)
  "Moves the cursor to the window located near the border of the frame.
   the `dir ' function argument sets the direction of movement and can
   take the values ` 'right', ' left`,' up `and'down'. Argument
   the `window ' function sets the window relative to which events occur movings."
  (let ((other-window (windmove-find-other-window dir arg window)))
    (if (or (null other-window)
            (and (window-minibuffer-p other-window)
                 (not (minibuffer-window-active-p other-window))))
        (if window
            (select-window window)
          (user-error "No window %s from selected window" dir))
      (rc:window-far-move dir arg other-window))))

ЗЫ. Покритикуйте, если не лень, обижаться не буду.

lintiay ()
Последнее исправление: lintiay (всего исправлений: 1)
Ответ на: комментарий от SL_RU

Видел, не понравилось. Есть еще avy и ace-window, ну и по циферкам в modeline. Особенно красиво в месте с doom-modeline.

lintiay ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.