Область эха в большинстве случаев пуста, что заставляет меня думать, что я могу использовать ее для отображения некоторой информации. Например, org-clock
отображает текущую задачу, оставшееся время и общее прошедшее время на модельной линии. Эта информация на самом деле не читается там (моделина может быть довольно короткой), повторяется на каждой моделине (потому что она применима ко всему сеансу emacs), и это не настолько полезно, что я готов пожертвовать некоторым драгоценным пространством моделин для нее , С другой стороны, он может появиться в эхо-области, когда здесь больше нечего отображать.
Есть ли канонический способ достижения этого? Я думал о взломе функции вставки в minibuffer-inactive-mode-hook
(но она не работает надежно, например, сообщение исчезает, как только область эха используется снова), или спам не зарегистрированных сообщений (но это будет беспорядок с другими использования эхо-зона и минибуфер).
Бедная версия этого будет использовать таймеры простоя, но область эха может быть пустой, а emacs бездействует (например, при вводе некоторого текста).
источник
Ответы:
В комментарии к этому вопросу упоминается, что пакет с именем symon использует такую функцию.
Это достигается спамом незарегистрированных сообщений, когда минибуфер неактивен, и прекращением повторного отображения при каждом запуске команды. Образец для этого довольно короткий, и после нескольких минут использования я не заметил никаких проблем с этим: использование сообщений и минибуфера по-прежнему имеет приоритет над сообщениями.
Ключевые компоненты:
message-log-max
установленным значениемnil
, чтобы отображаемая строка не попала в*Messages*
буфер)pre-command-hook
Единственная проблема заключается в том, что отображение останавливается всякий раз, когда выполняется команда, в том числе при вводе.
Для тех, кто заинтересован, я извлек соответствующий код в стандартный пакет, доступный на github .
источник
Ответ, ИМО, нет . Зона эха для эфемерных сообщений . И многие вещи явно стирают все, что могло быть там отражено. Таким образом, понимание того, что вы запрашиваете любым разумным способом, проблематично, ИМО.
В общем, используйте альтернативу. Вот некоторые:
Используйте другой буфер (например, небольшой кадр или окно, которое вы оставляете открытым для этой цели). Это просто сделать, вы можете перемещать его, редактировать, стирать или делать с ним что угодно.
Используйте часть или всю строку режима (которую вы уже рассмотрели, по-видимому).
Используйте строку заголовка.
Используйте заголовок кадра.
Если бы это был я, я бы выбрал № 1. (Но я действительно не хочу / не нуждаюсь в таком постоянном отображении информации о состоянии. Я бы скорее определил команду, которая показывает мне информацию (даже историю / журнал) по требованию.)
Обновлено после ваших комментариев:
Вы уже сказали в своем вопросе: « сообщение исчезает, как только область эха используется снова ». Так что это звучит так, как будто вы используете такое эфемерное пространство, поскольку эхо-область не соответствует вашим потребностям. Ваши ответы на комментарии, кажется, противоречат этому.
Если вы действительно хотите использовать область эха, то используйте
minibuffer-inactive-mode-hook
, как вы упомянули, или используйте таймер для вызоваmessage
или для вставки сообщения времени в область эха другим способом. Однако вы уже отметили проблемы с этим. Эти проблемы (перезапись, стирание) вытекают из ( предполагаемой ) эфемерной природы области эха .В общем, вы хотите использовать область, предназначенную для эфемерных сообщений, но не хотите, чтобы ваши сообщения исчезали, как только эта область будет использоваться снова.
(Кстати - по поводу вашего упоминания о том, что информация о строке режима повторяется в каждой строке режима: это не обязательно должно быть так. Вы можете сделать строку режима определенной для конкретного буфера и т. Д. IOW, вы можете выбрать одну строку режима, чтобы всегда (или периодически) показывать свои часы или что-то еще.)
источник
org-clock
пример из вопроса: я хочу, чтобы таймер отсчитывал время, чтобы напомнить мне о том, что я должен делать, и что я должен делать это прямо сейчас , так как как можно чаще.minibuffer-inactive-mode-hook
и выхожу из минибуфера, появится сообщение. Затем, если какая-то другая команда печатает что-либо в эхо-области, добавляется это новое сообщение, и эфемерное сообщение не возвращается (потому что минибуфер на этот раз не подключился).message
илиpost-command-hook
, если хотите. Но основная проблема исчезновения / перезаписи иногда поднимает голову, потому что вы пытаетесь использовать временную область отображения для чего-то, что вы не хотите, чтобы оно было временным.