Визначення вікна, вказаного "іншим вікном"


10

У emacs частіше, ніж мені подобається, я закінчую 4 вікна або більше.

Я буду використовувати цей приклад:

+--------|-----------+
|        |           |
|   1    |   2       |
|        |           |
+--------+-----------+
|    3   |     4     |
|        +-----------+
|        |     5     |
+--------+-----------+

Багато функцій можуть виконувати дії в other-window(як правило, в тому ж вікні, вказаному C-x o). Особливо корисні scroll-other-window. Однак, коли відкриються 4 або більше вікон, other windowнавряд чи це буде те, що я хочу.

Чи є простий спосіб керувати набором other-windowбез зміни макета вікна / буфера? Звичайно, це здійснимо з допомогою купи C-x 4 bі , C-bале я не хочу , щоб змінити розташування. Наприклад:

  • якщо редагувати у вікні 4 на малюнку вище, чи є простий спосіб встановити C-M-vпрокрутку вікна 1 ?
  • Або, припустимо, фокус у вікні 3 , як встановити other-windowточку на вікно 2 ?

Відповіді:


7

Якщо я правильно прочитав ваше запитання, вас, головним чином, цікавить робота з буферами, які відображаються в інших вікнах (при збереженні поточного макета вікна).

Зміна вікна, на яке other-windowвказується, - це один із способів цього досягти, але я хотів би запропонувати альтернативний робочий процес:

На відміну від other-window, ace-windowдозволяє швидко перейти до конкретного вікна : Коли ви телефонуєте ace-window, він показує унікальне число у кожному вікні. Щоб перейти до конкретного вікна, ви просто наберіть відповідне число. Якщо у вас є лише два вікна, воно ставить крапку в іншому вікні, не вимагаючи ввести номер. Цей скріншот демонструє перехід до іншого вікна, прокручування його та повернення до початкового вікна:

Демонстрація туз-вікна

Якщо ви прив'язуєтесь ace-windowдо цього C-x o, вам не доведеться запам'ятовувати додаткову прив'язку клавіш, і вам буде здаватися, що ви використовуєте надзарядну версію other-window.

Крім того, якщо ви торкаєтесь та / або вважаєте за краще не рухати пальцями занадто далеко від домашнього ряду, ви можете доручити ace-window"нумерувати" вікна, використовуючи літери замість цифр (див. Нижче).

ace-windowдоступний у MELPA . Встановивши його через M-x package-install RET ace-window RET, ви можете помістити наступне у свій init-файл, щоб налаштувати його, як описано вище:

(global-set-key (kbd "C-x o") 'ace-window)
(setq aw-keys '(?a ?b ?c ?d ?e ?f ?g ?h ?i))

Дякую за демонстрацію, я бачив цей пакет на інших сайтах і цікавився, як він працює. Я насправді легко перемикаю вікно, оскільки я зобов’язаний M-1 M-2 ..вибрати вікно №1, 2 за допомогою window-numberпакета
Lompik

1

Швидкий огляд джерела other-windowвиглядає так, що він фактично залежить від поверненого вікна next-window, яке визначено в c. На жаль, scroll-other-windowце також визначено в c, і, імовірно, викликає наступне вікно звідти. Я не думаю, що це легко перемогти.

Однак, switch-to-buffer-other-windowсхоже, використовується pop-to-buffer, тож, можливо, вам там пощастить.


1

Немає простого способу маніпулювання списком вікон, тому результат, який повертається, other-windowбільш-менш фіксований. Сама по собі ця справа не є поганою, оскільки вона забезпечує послідовність під час навігації у вікнах. Щодо двох описаних вами сценаріїв, за допомогою деяких програм elisp або макросів ви можете відповідати вашому робочому процесу.

якщо редагувати у вікні 4 на малюнку вище, чи існує простий спосіб встановити CMv для прокрутки вікна 1?

Ви можете скористатися простим фрагментом, як показано нижче, щоб скористатися other-windowвідповідною кількістю разів, прокрутити вниз і повернутися до початкового вікна.

 (defun my-scroll-down-other-window (&optional arg)
 "Like `scroll-other-window' but takes a prefix argument 
 that indicates which window to scroll."
  (interactive "p")
  (save-selected-window
    (other-window arg)
    (scroll-down)))

Ви можете передати аргумент префікса, щоб вказати, у якому вікні прокручувати. Як можна зробити висновок, він використовує вбудований механізм, other-windowщоб пропустити argкількість вікон перед прокруткою. save-selected-windowГарантує фокус повертається до вихідного вікна. Документація other-windowможе надати більше інформації про зміну цього фрагмента відповідно до вашої поведінки.

Або, припустимо, фокус у вікні 3, як встановити other-windowточку на вікно 2?

Знову використовуйте prefix-argпід C-3 C-x oчас дзвінка other-window. Фактична кількість, яку потрібно надати, буде залежати від того, в якому порядку ви розділите їх, і не зміниться, доки ви не створите нові вікна. Крім того, ви можете використовувати зручні пакети, такі як window-numberабо ace-windowвід MELPA, для швидкого перемикання вибраних вікон.


вірно, не простий спосіб маніпулювати списком вікон. Мені важко використовувати префікси. Схоже, він додає ще один недоступний ключ і сповільнює річ
Lompik

Саме для цього призначені макроси / клавіші клавіатури. Якщо це регулярна частина вашого робочого потоку, ви можете легко визначити прив'язку клавіш на основі префікса, наприклад, <f7> nдля прокрутки n-го вікна. Створіть тимчасові прив’язки однієї клавіші за допомогою макросів клавіатури.
Вамсі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.