Як я можу заблокувати розбиття кадру?


16

В даний час я працюю з рубіном і rspec. Мені дуже подобається ідея мати окремий кадр на іншому моніторі, який показує мені буфер компіляції. У моєму поточному налаштуванні використовується кадр «код» (в якому я виконую фактичну роботу) і кадр «тестовий результат» (в якому я бачу результати rspec)

Проблема полягає в тому, що коли я намагаюся відкрити якусь помилку компіляції або файл у кадрі «тест-результат», вікно розпадається на цей кадр. Я хотів би зробити це, щоб він відкрився в моєму «кодовому» кадрі.

Я вже використовую варіант display-buffer-reuse-frames. Я також намагався встановити вікно результатів компіляції dedicated, але кожного разу, коли emacs намагатиметься відкрити нове вікно, буде створено новий кадр (що особливо жахливо, якщо ви використовуєте Helm.)

Чи є якийсь простий спосіб досягти цього?


1
Використовувати emacs як IDE було б набагато зручніше, якби просто було "закріпити" буфер на місці, щоб він завжди відображався на одному місці. Однією з особливостей Visual Studio, які мені найбільше не вистачає під час використання emacs, є простий та інтуїтивний спосіб розділити, закріпити, стикувати, приховати та іншим чином маніпулювати Windows.
nispio

1
Так. Я також надходжу від фонового режиму, і це теж мені не вистачає, хоча я вважаю, що інтерфейс Emacs clean-no-button-no-bullshit найкращий більшість часу.
Ренан Ранеллі

@nispio Я не використовую VS, тому ви можете вказати, що ви маєте на увазі під "шпилькою". Кадри Emacs зазвичай є ексклюзивними і не змінюються, якщо ви не взаємодієте з ними.
Вамсі

@vamsi: VS використовує безліч маленьких вікон, які можна прикріпити до верхньої / нижньої / бокових сторін кадру, або ви можете вискакувати їх і створити новий кадр. Ви можете приєднати вікно до країв кадру та встановити його для автоматичного приховування. Наприклад, вікно виводу компіляції магічно спливе знизу, коли компіляція почнеться, і знову приховатиметься незабаром після закінчення компіляції. Якщо ви не хочете, щоб вікно було автоматично приховано, ви можете зафіксувати його на місці, а потім знову від’єднати його, коли буде зроблено посилання на нього.
nispio

@nispio Я бачу. Я використовую popwin.elз MELPA для вскладки компіляції та довідкових буферів, які зберігаються до C-gнатискання. Якщо вони мені потрібні на повний робочий день, я просто перемикаюся на них в іншому вікні. Я не думав про закріплення вікон, тому що Emacs це робить split-windows-sensibly.
Вамсі

Відповіді:


9

Вам потрібно налаштувати 600-фунтову горилу, яка саме display-buffer-alistвизначає спосіб display-bufferвибору буфера для відображення. Це робить display-buffer-reuse-framesзастарілим у новішому emacsen. Ось конфігурація, яка повинна вас керувати (принаймні в emacs 24.3).

;; all buffers, try to reuse windows across all frames
(add-to-list 'display-buffer-alist
           '(".*". (display-buffer-reuse-window .
                                  ((reusable-frames . t)))))

;; except for compilation buffers where you want new and dedicated frames when necessary
(add-to-list 'display-buffer-alist
         '("^\\*Compile-Log\\*". ((display-buffer-reuse-window
                                   display-buffer-pop-up-frame) .
                                  ((reusable-frames . t)
                                  (inhibit-same-window . t)))))

Як ви бачите, я використовую регулярний параметр, щоб відповідати буферу журналу компіляції. Документація display-bufferповинна дати вам уявлення про те, що відбувається. Тільки підкреслимо, що це не найприємніший документ, який ви коли-небудь читали. Я додав їх послідовно, тому regexp журналу компіляції буде збігатися попереду загального regexp. Адаптуйте регулярний вирив під свої потреби.

РЕДАКТУВАННЯ Щоб зробити будь-який кадр нерозбірним, ви можете зрівнятись M-: (set-frame-parameter nil 'unsplittable t)із цим кадром. Замініть нуль на необхідний, FRAMEякщо робити це з elisp. Між цими двома налаштуваннями кадр компіляції повинен бути ексклюзивним, якщо ви спеціально не знайдете файл у цьому кадрі.


Вся справа в тому, що я не хочу постійно відкривати нові кадри. Мені хочеться обмежити всі вікна рамкою "коду", за винятком буфера "журнал компіляції", який завжди повинен відображатися у "тестовому" кадрі. Не вдалося знайти спосіб перенаправити всі нові вікна в основний кадр «коду». Можливо, мені було недостатньо зрозуміло у питанні = (
Ренан Ранеллі,

Це повинно відкрити новий кадр для журналу компіляції, що також лише у тому випадку, якщо немає існуючого кадру. Чи можете ви сказати мені, що йде не так. Див. Редагування про те, як зробити будь-який кадр нерозбірним.
Вамсі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.