Використовуйте порожню область ехо для відображення інформації


10

Зона відлуння порожня частина більшості часу, що змушує мене думати, що я міг би використовувати її для відображення певної інформації. Наприклад, org-clockвідображається поточне завдання, час, що залишився, і загальний час, що минув на моделі. Ця інформація там не дуже читабельна (моделін може бути досить короткою), повторюється на кожному моделі (тому що це стосується цілого сеансу emacs), і не є такою корисною, що я готовий принести в жертву якийсь дорогоцінний простір для моделі. . З іншого боку, це може з'явитися в області відлуння, коли більше нічого тут не відображати.

Чи є канонічний спосіб цього досягти? Я думав про злом функції вставки minibuffer-inactive-mode-hook(але вона не працює надійно, наприклад, повідомлення зникає, як тільки область ехо знову використовується), або спам -повідомлення, що не входять в систему (але це буде заплутано з іншими способами використання область відлуння і мінібуфер).

Недобровільна версія цього варіанту використовує таймери очікування, але область ехо може бути порожньою, без emacs не працює (наприклад, під час введення тексту).


1
Відображена область ехо - це вміст `* Echo Area 0 *` або `* Echo Area 1 *`, і це "нормальні" буфери. Потрібно мати можливість виправлення Emacs таким чином, щоб забезпечити, можливо, запуск гака кожного разу, коли ці буфери "змиваються" (або відображаються та порожні), щоб цю функціональність можна було ефективно та надійно реалізовувати.
Стефан

Це не зовсім те, що ви маєте на увазі, але Бастієн Геррі зробив кілька цікавих речей для збереження екрана, особливо, відображаючи рядок режиму в заголовку кадру: bzg.fr/emacs-strip-tease.html
Dieter.Wilhelm

Відповіді:


4

У коментарі до цього питання згадується, що пакет із назвою symon використовує таку функцію.

Це досягається спамом незареєстрованих повідомлень, коли minibuffer неактивний, та припиненням повторного відображення кожного разу, коли команда видається. Планшет для цього досить короткий, і через кілька хвилин використання я не міг помітити жодних проблем з цим: повідомлення та використання minibuffer все ще мають пріоритет над повідомленнями.

Основні компоненти:

  • функція відображення, запустіть у режимі очікування (повідомлення дзвінка з message-log-maxвстановленим значенням nil, щоб відображається рядок не потрапляв у *Messages*буфер)
  • функція повторного відображення, запустіть на таймері
  • функція зупинки дисплея, запуску pre-command-hook

Єдине питання полягає в тому, що дисплей зупиняється щоразу, коли виконується команда, що включає під час введення тексту.

Для зацікавлених я витягнув відповідний код у пакет котлів, доступний на github .


1

Відповідь, ІМО, - ні . Область відлуння призначена для ефемерних повідомлень . І багато речей явно стирають все, що, можливо, було відлунено там. Тому реалізувати те, що ви запитуєте будь-яким розумним способом, проблематично, ІМО.

У підсумку скористайтеся альтернативою. Ось декілька:

  1. Використовуйте інший буфер (наприклад, невелику рамку або вікно, яке ви залишаєте відкритим для цієї мети). Зробити це просто, ви можете переміщати його, редагувати, стирати або робити все, що вам більше подобається.

  2. Використовуйте частину або весь рядок режиму (який, мабуть, ви вже розглянули).

  3. Використовуйте рядок заголовка.

  4. Використовуйте заголовок кадру.

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


Оновлено після ваших коментарів:

Ви вже сказали у своєму запитанні, " повідомлення зникає, як тільки область ехо знову буде використана ". Тож звучало так, ніби використовувати такий ефемерний простір, оскільки область ехо не відповідає вашим потребам. Ваші коментарі відповіді, здається, суперечать цьому.

Якщо ви дійсно хочете використовувати область ехо, тоді використовуйте minibuffer-inactive-mode-hook, як ви вже згадували, або використовуйте таймер для дзвінка messageабо вставляйте повідомлення про час у зоні ехо-сигналу якось іншим способом. Однак ви вже відзначили проблеми з цим. Ці проблеми (перезапис, стирання) випливають із ( призначеного ) ефемерного характеру області ехо .

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

(BTW - напишіть свою згадку про те, що інформація про рядок режиму повторюється в кожному рядку режиму. Це не обов'язково. Ви можете зробити режим режиму специфічним для певного буфера тощо. IOW, ви можете вибрати одну лінію режиму завжди (або періодично) показуйте годинник чи будь-що інше.)


Дякую за ваші пропозиції! По-перше, хоча я не зовсім розумію, чому це проблематично? Мені б хотілося, щоб речі, які переходитимуть у зону ехо, перекриють будь-яке інше використання області ехо, тому стерти це нормально. А додаткова інформація повинна відображатися лише тоді, коли область ехо порожня, тому стерти нічого. Це не здається розумною специфікацією? Про №1 проблема полягає в тому, що я не хочу витрачати простір на екрані. Зона ехо завжди є, навіть коли вона порожня. Я перерахував деякі проблеми з №2, а №3 та №4 мають багато цих проблем.
Т. Веррон

Про те, чому я хочу постійно відображати інформацію, візьмемо, наприклад, org-clockприклад із запитання: Я хочу, щоб таймер, що відзначається, нагадував мені, що я повинен робити, і що я повинен робити це зараз , як якомога частіше.
Т. Веррон

"повідомлення зникає, як тільки область ехо знову використовується" Добре, що було незрозуміло. Я мав на увазі те, що якщо я використовую minibuffer-inactive-mode-hookі виходжу з мінібуфера, повідомлення показує. Потім, якщо якась інша команда надрукує щось у зоні ехо, це нове повідомлення додається, і ефемерне повідомлення не повертається назад (оскільки мінібуфер цього разу не залучався).
Т. Веррон

Щодо моделіни, головна проблема - це малий доступний простір там (у мене часто багато вікон, розділених горизонтально, тому дуже короткі моделі).
Т. Веррон

Знову ж таки: " Підсумовуючи, ви хочете використовувати область, призначену для ефемерних повідомлень, але ви не хочете, щоб ваші повідомлення зникали, як тільки ця область знову використовується. " Використовуйте таймер з messageабо post-command-hook, якщо вам подобається. Але найважливішою проблемою зникнення / перезапису буде іноді задня голова, оскільки ви намагаєтесь використовувати тимчасову область відображення для чогось, що не хочете бути тимчасовим.
Дрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.