Скрыть область эха Emacs во время бездействия - PullRequest
19 голосов
/ 22 февраля 2011

область эха - это строка в нижней части Emacs ниже строки режима:

                     ~                       ~
                     |                       |
                     +-----------------------+
                     |-U:--- mode-line       |
                     +-----------------------+
                     | M-x echo-area         |
                     +-----------------------+

Теперь строка режима имеет широкие возможности настройки, в то время как область эха более жесткая (инеиспользованный много времени).Вопрос довольно прост: можно ли скрыть эхо-область во время неактивности и снова отобразить ее, как только она потребует вашего внимания:

  ~                       ~             ~                       ~
  |                       |             |                       |
  |                       |             +-----------------------+
  |                       |             |-U:--- mode-line       |
  +-----------------------+             +-----------------------+
  |-U:--- mode-line       |             | M-x echo-area         |
  +-----------------------+             +-----------------------+

          Inactive                                Active

Это похоже на то, как Google Chrome отображает URL-адреса, когда вы наводите курсор мыши на свою кнопку мыши.ссылка и аддон Firefox Pentadactyl, где по умолчанию скрыта командная строка.

Ответы [ 5 ]

6 голосов
/ 22 февраля 2011

Это НЕ ответ на то, что вы спрашиваете, он не даст вам мини-буфер, но он вернет немного экранной недвижимости

(defun toggle-mode-line () "toggles the modeline on and off"
  (interactive) 
  (setq mode-line-format
    (if (equal mode-line-format nil)
        (default-value 'mode-line-format)) )
  (redraw-display))

(global-set-key [M-f12] 'toggle-mode-line)

И для полноты, отличительной чертойиз luddite-mode

(global-set-key [f12] '(lambda () (interactive) (menu-bar-mode nil) (scroll-bar-mode nil)))

Конечно, желательно начать с этого:

(cond ((> emacs-major-version 20)
       (tool-bar-mode -1) ; introduced in emacs 21
       (menu-bar-mode -1)
       (scroll-bar-mode -1)
       (menu-bar-showhide-fringe-menu-customize-disable)
       (blink-cursor-mode -1)
       (windmove-default-keybindings 'meta)))

Я с нетерпением буду ждать ответа на этот вопрос и включу его в luddite-mode

4 голосов
/ 05 марта 2011

Одна вещь, которую вы могли бы сделать, это разделить минибуфер на его собственный фрейм, затем спрятать и показать его по мере необходимости.

(setq minibuffer-frame-alist (append '((auto-raise . t) (auto-lower . t)) minibuffer-frame-alist))
(setq initial-frame-alist (append '((minibuffer . nil)) initial-frame-alist))

Вы потеряете сообщения области эха, но я понимаю, что вам уже все равнооб этом.


РЕДАКТИРОВАТЬ: вышеупомянутое было непроверенным и неполным.Это, кажется, работает здесь:

(setq initial-frame-alist (append '((minibuffer . nil)) initial-frame-alist))
(setq default-frame-alist (append '((minibuffer . nil)) default-frame-alist))
(setq minibuffer-auto-raise t)
(setq minibuffer-exit-hook '(lambda () (lower-frame)))
3 голосов
/ 03 марта 2011

Вы можете получить кадр без минибуфера, используя этот код

(setq default-minibuffer-frame
      (make-frame
       '((name . "minibuffer")
         (width . 0)
         (height . 0)
         (minibuffer . only)
         (top . 0)
         (left . 0)
         )))
(setq new-frame
      (make-frame
       '((name . "editor")
         (width . 80)
         (height . 30)
         (minibuffer . nil)
         (top . 50)
         (left . 0)
         )))

, который я взял и изменил с здесь на SO.

Хотя он может создавать кадры без минибуфера, кажется, что невозможно избавиться от минибуфера и заставить его появляться только тогда, когда это необходимо, как вы описали в примере строки состояния Google Chrome.

2 голосов
/ 05 марта 2011

Технически, невозможно скрыть область эха.Тем не менее, у меня есть идея, которая может показаться такой же, при условии, что вы работаете с Emacs в полноэкранной среде.В этом случае инструмент может изменить размер окна emacs («фрейм» на языке emacs), чтобы он либо заполнил дисплей, либо простирался за нижнюю часть экрана, в зависимости от того, должна ли область эха быть видимой или нет.

К сожалению, у меня нет времени самому реализовать это, поэтому я оставляю это кому-то другому, чтобы сделать это и получить награду.

Первая задача - найти хорошийместо для изменения размера, одним из таких мест может быть post-command-hook.Другие места могут быть minibuffer-setup-hook и minibuffer-setup-hook Вторая задача - решить, должна ли область эха быть видимой или нет, я думаю, что вы можете использовать current-message, чтобы проверить, отображается ли сообщение.

1 голос
/ 22 февраля 2011

Насколько я знаю, невозможно скрыть эхо-область , и я бы не согласился с вами, что она не используется много времени.От переключения буфера через команды Mx до вывода минибуфера, в области эха происходит много разных вещей.

Я могу понять, что на небольших дисплеях, например, на нетбуках и т. Д., Желательно сохранить состояние экрана.Но я бы сказал, что область эха используется гораздо чаще, когда вы редактируете файл, чем адресная строка веб-браузера, когда вы смотрите на веб-страницу.Это неотъемлемая часть Emacs.

...