Безліч вікон

Emacs може ділити фрейми на два або більше вікна Кілька вікон можуть відображати частини різних буферів або різні частини одного буфера Використання декількох фреймів завжди має на увазі безліч вікон, тому що в кожному фреймі свій набір вікон Кожне вікно належить одному і тільки одному фрейму

161  Поняття вікна в Emacs

Кожне вікно Emacs відображає в один час один буфер Один і той же буфер може зявитися більш ніж в одному вікні якщо це сталося, то будь-які зміни в його тексті показуються у всіх вікнах, де він відображений Але вікна, що показують один і той же буфер, можуть показувати різні його частини, так як кожне вікно зберігає своє власне значення точки

У будь-який момент одне з вікон є обраним вікном буфер, який відображається цим вікном, є поточним буфером Курсор терміналу показує позицію крапки в цьому вікні Всі інші вікна також мають позицію точки, але так у терміналу є тільки один курсор, не можна показати, де знаходяться ці позиції Коли є кілька видимих ​​фреймів в X Windows, в кожному фреймі зображується один курсор, що знаходиться в обраному вікні цього фрейма Курсор у вибраному фреймі зафарбований курсори в інших фреймах виглядають як порожні клітини

Команди руху точки діють тільки на значення точки для вибраного вікна Emacs Вони не змінюють значення точки в будь-якому іншому вікні Emacs, навіть у показуючому той же самий буфер Це вірно і для таких команд, як Cx b для зміни обраного буфера в обраному вікні, на інші вікна вони не діють взагалі Однак, існують інші команди, наприклад Cx 4 b, які вибирають інше вікно і перемикають буфери в ньому Також, всі команди, які показують інформацію у вікні, включаючи (наприклад) Ch f (discribe-function) і Cx Cb (list-bufers), працюють за допомогою перемикання буферів в невибраний вікні, не зачіпаючи вбрання

Коли кілька вікон показують один і той же буфер, в них можуть бути різні області, тому що вони можуть мати різні значення точки Однак, всі вони мають одне і те ж значення мітки, тому що в кожному буфері може бути тільки одна позиція мітки

Кожне вікно має свою власну рядок режиму, яка показує імя буфера, статус модифікації і основний та другорядні режими буфера, який відображений в даному вікні Див Розділ 13 [Рядок режиму], с 25, для більш докладної інформації про рядок режиму

162  Поділ вікон

Cx 2 Розділити вибране вікно на два, що знаходяться одне під іншим (splitwindow-vertically)

Cx 3 Розділити вибране вікно на два вікна, що знаходяться одне поруч з іншим

(split-window-horizontally)

C-Mouse-2

У рядку режиму або смузі прокрутки, розділяє це вікно

Команда Cx 2 (split-window-vertically) розбиває вибране вікно на два, одне під іншим Обидва вікна cначала показують один і той же буфер з одним і тим же значенням точки За замовчуванням кожне з двох вікон отримує половину висоти вікна, яке було розділено числовий аргумент визначає кількість рядків, яке необхідно дати верхньому вікна

Cx 3 (split-window-horizontally) розбиває вибране вікно на два поруч стоять вікна Числовий аргумент визначає, скільки стовпців дати лівому вікна Вікна поділяються рядком вертикальних штрихів Вікна, які не займають всю ширину фрейма, мають рядки режиму, але вони усічені На терміналах, де Emacs не підтримує підсвічування, усічені рядки режиму іноді зявляються не в інверсному зображенні

Ви можете розділити вікно горизонтально, клацнувши C-Mouse-2 на рядку режиму або смузі прокрутки Лінія розділу проходить від місця, де ви клацнули: якщо ви клацнули на рядку режиму, від цього місця відійде нова смуга прокрутки якщо ви клацнули на смузі прокрутки, в місці вашого клацання зявиться рядок режиму нового вікна

Коли вікно менше повної ширини екрана, часто зустрічаються занадто довгі рядки тексту, які не поміщаються у вікні Продовження всіх цих рядків може призвести до плутанини Мінлива truncate-partial-width-windows може бути встановлена ​​не рівний nil, це примусово робить у всіх вікнах усічення рядків до меншого, ніж повна ширина вікна, розміру незалежно від відображуваного буфера і значення змінної truncate-lines в ньому Див Розділ 48 [Рядки продовження], с 40

Горизонтальна прокрутка часто використовується у вікнах, розташованих поруч верти-

кально Див Глава 11 [Зображення], с 81

Якщо split-window-keep-point не дорівнює nil, як за замовчуванням, то обидва вікна, що виходять після Cx 2, успадковують значення точки від розділяється вікна Це означає, що необхідна прокрутка Якщо ця змінна дорівнює nil, то Cx 2 намагається уникнути зсуву тексту на екрані, поміщаючи крапку в кожному вікні у вже видимому місці Вона також вибирає те вікно, яке містить рядок тексту, на якій курсор був раніше Деякі користувачі вважають за краще такий режим на повільних терміналах

163  Використання інших вікон

Cx o Вибрати інше вікно (other-window) Це буква o, що не нуль

CMv Прокрутити наступне вікно (scroll-other-window)

M-x compare-windows

Знайти наступне місце, де текст вибраного вікна не збігається з текстом в наступному вікні

Mouse-1 Mouse-1 на рядку режиму якогось вікна вибирає це вікно, але не пере-

міщан в ньому крапку (mouse-select-window)

Щоб вибрати інше вікно, клацніть Mouse-1 на його рядку режиму За допомогою кла-

Віатур ви можете перемикати вікна, набираючи Cx o (other-window) Це буква о, від

слова other (інше), а не нуль Коли є більше двох вікон, ця команда просувається через всі вікна по колу, звичайно зверху вниз і зліва направо Від самого правого нижнього вікна вона йде назад в те, яке знаходиться у верхньому лівому кутку Числовий аргумент означає рух на кілька кроків по круговому порядку вікон Негативний аргумент просуває по колу у зворотному порядку Коли мінібуфер активний, він є останнім вікном в кільці ви можете переключитися з вікна мінібуфера в одне з інших вікон і пізніше переключитися назад і завершити в мінібуфер запитуваний аргумент Див Розділ 52 [Редагування в мінібуфер], с 46

Звичайні команди прокрутки (див Глава 11 [Зображення], с 81) відносяться тільки до вибраного вікна, але існує одна команда для прокрутки наступного вікна CMv (scroll-other-window) прокручує вікно, яке вибрала б C-x o Вона приймає позитивні і негативні аргументи так само, як і Cv (В мінібуфер, CMv прокручує вікно, що містить довідку для мінібуфера, якщо воно є, а не наступне вікно в стандартному круговому порядку)

Команда Mx compare-windows дозволяє вам порівняти два файли або буфера, видимі в двох вікнах, просуваючись по них до наступного неспівпадання Див Розділ 149 [Порівняння файлів], с 132, для подробиць

164  Зображення в іншому вікні

Cx 4 – це префіксний ключ для команд, які вибирають інше вікно (розділяючи поточне вікно, якщо воно було єдиним) і вибирають буфер цьому вікні Різні команди на Cx 4 дають різні способи знаходження буфера для вибору

C-x 4 b імябуфера hRETi

Вибрати буфер імябуфера в іншому вікні При цьому запускається switch-tobuffer-other-window

C-x 4 C-o імябуфера hRETi

Відобразити буфер імябуфера в іншому вікні, але не вибирати в ньому цей буфер

Це запускає display-buffer

C-x 4 f імяфайлу hRETi

Звернутися до файлу імяфайлу і вибрати його буфер в іншому вікні При цьому запускається find-file-other-window Див Розділ 142 [Звернення], с 106

C-x 4 d каталог hRETi

Вибрати буфер Dired для каталогу в іншому вікні При цьому запускається diredother-window Див Глава 28 [Dired], с 291

Cx 4 m Почати складання поштового повідомлення в іншому вікні При цьому запускається mail-other-window аналог цієї команди, що працює в тому ж вікні – Cx m (див Глава 26 [Посилка пошти], с 267)

C-x 4 Знайти тег в поточній таблиці тегів в іншому вікні При цьому запускається findtag-other-window, багатовіконний варіант M- (Див Розділ 2213 [Теги], с 224)

C-x 4 r імяфайлу hRETi

Звернутися до файлу імяфайлу в режимі тільки для читання і вибрати його буфер в іншому вікні Цей ключ запускає команду find-file-read-onlyother-window Див Розділ 142 [Звернення], с 106

165  Примусове зображення в тому ж вікні

Деякі команди Emacs перемикають в певний буфер з особливим вмістом

Наприклад, Mx shell перемикає в буфер, званий * Shell *. За угодою, всі

ці команди написані так, щоб видавати цей буфер в окремому вікні Але ви можете вказати, що деякі з цих буферів повинні зявлятися в обраному вікні

Якщо ви додаєте імя буфера в список same-window-buffer-names, то в результаті такі команди відображають цей буфер, перемикаючись до нього в тому ж вікні Наприклад, якщо ви додасте до цього списку елемент * Grep *, то команда grep показуватиме буфер з виведенням у поточному вікні

Значення same-window-buffer-names за замовчуванням не одно nil: воно задає імена буферів * info *, * mail * і * shell * (а також інших буферів, використовуваних більш туманними пакетами Emacs) Тому Mx shell зазвичай перемикає в буфер * shell * в обраному вікні Якщо ви видалите цей елемент зі списку same-window-buffer-names, поведінка Mx shell зміниться – замість цього вона видаватиме буфер в іншому вікні

Ви можете задати ці буфери у більш загальній формі за допомогою змінної samewindow-regexps Встановіть її рівною списку регулярних виразів тепер будь буфер, чиє імя збігається з одним з цих регулярних виразів, буде відображатися з перемиканням до нього в обраному вікні (Ще раз, це відноситься тільки до тих буферам, які зазвичай показуються вам в окремому вікні) Значення цієї змінної за замовчуванням задає буфери Telnet і rlogin

Аналогічна можливість дозволяє вам задати буфери, які повинні відображатися в належать тільки їм фреймах Див Розділ 179 [Фрейми спеціальних буферів], с 152

166  Видалення і переупорядочение вікон

Cx 0 Видалити вибране вікно (delete-window) Останній знак у цій послідовно-

ності ключів – нуль

Cx 1 Видалити в обраному фреймі всі вікна, крім обраного (delete-otherwindows)

Cx 4 0 Видалити вибране вікно і знищити буфер, який був у ньому показаний

(Kill-buffer-and-window) Останній знак в цій послідовності ключів

– Нуль

Cx ^ Зробити вибране вікно вище (enlarge-window)

Cx} Розширити вибране вікно (enlarge-window-horizontally)

Cx {Звузити вибране вікно (shrink-window-horizontally)

Cx Зменшити це вікно, якщо буфер в ньому не вимагає стільки рядків (shrinkwindow-if-larger-than-buffer)

Cx + Вирівняти висоти всіх вікон (balance-windows)

Drag-Mouse-1

Переміщення рядка режиму вікна за допомогою mouse-1 змінює висоту вікон

Mouse-2 Mouse-2 на рядку режиму вікна видаляє всі інші вікна в цьому фреймі

(mouse-delete-other-windows)

Mouse-3 Mouse-3 на рядку режиму якогось вікна видаляє це вікно (mouse-deletewindow)

Щоб видалити вікно, наберіть Cx 0 (delete-window) (Це нуль) Простір, займане віддаленим вікном, дістається сусіднього вікна (але не вікну мінібуфера, навіть якщо воно активно в цей момент) Як тільки вікно видалено, його атрибути забуваються їх може повернути тільки відновлення конфігурації вікна Видалення вікна не впливає

на буфер, який воно відображало цей буфер продовжує існувати, і ви можете вибрати його в будь-якому вікні командою Cx b

Cx 4 0 (kill-buffer-and-window) – сильніша команда, ніж Cx 0 Вона знищила-

ет поточний буфер і потім видаляє вибране вікно

Cx 1 (delete-other-windows) – могутніша в іншому сенсі вона видаляє всі вікна за винятком вибраного (і мінібуфера) Вибране вікно розширюється, щоб використовувати весь фрейм, за винятком луна-області

Ви також можете видалити вікно, клацнувши на його рядку режиму Mouse-2, і видалити всі вікна у фреймі, крім одного, клацнувши на рядку режиму цього вікна Mouse-3

Найпростіший спосіб налаштувати висоту вікон – зробити це за допомогою миші Якщо ви натиснете Mouse-1 на рядку режиму, ви можете перетягнути її вгору або вниз, змінюючи висоту вікон зверху і знизу від неї

Щоб переналаштувати розподіл простору між вертикально сусідніми вікнами, використовуйте Cx ^ (enlarge-window) Вона робить поточний вибране вікно більше на один рядок або на стільки рядків, скільки визначено числовим аргументом З негативним аргументом, вона робить вибране вікно менше Cx} (enlarge-window-horizontally) робить вибране вікно ширше, а Cx {(shrink-window-horizontally) – вже на задане число стовпців

Коли ви збільшуєте вікно, воно забирає простір від одного зі своїх сусідів Якщо це робить якісь вікна занадто малими, то ці вікна видаляються і їх простір ділиться між сусідніми вікнами Мінімальний розмір визначається змінними window-min-height і window-min-width

Команда Cx (shrink-window-if-larger-than-buffer) зменшує висоту вибраного вікна, якщо воно вище, ніж необхідно для показу всього тексту відображуваного в ньому буфера Вона передає звільнилися рядка іншим вікнам у цьому фреймі

Ви також можете використовувати Cx + (balance-windows), щоб вирівняти висоти всіх вікон у вибраному фреймі

Див Розділ 52 [Редагування в мінібуфер], с 46, докладний опис режиму Resize-Minibuffer, який автоматично змінює розмір вікна мінібуфера, щоб у ньому вміщався текст мінібуфера

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*