Сделайте новый кадр только с мод-линией

13

Я хочу создать новый фрейм, который не содержит ничего, кроме строки мод. Особенно не файловый буфер.

Зачем мне это нужно? Я использую синхронизацию в режиме org для определения времени моей работы. Org-mode отображает таймер текущей задачи, над которой я работаю, в строке режима и обновляет таймер в режиме реального времени. Я использую приложения, отличные от Emacs, поэтому, когда я переключаюсь на них (например, при использовании браузера или терминала), я все еще хочу иметь возможность смотреть на запущенный таймер. Я думал, что смогу создать новый фрейм, но когда я теперь нажимаю на таймер в строке режима, файл .org открывается в новом кадре (размер которого уже изменен, чтобы показать только строку режима) вместо того, чтобы вернуться к это в первом кадре.

Вот как выглядит моя строка режима (синяя полоса) - это все, что я хочу в новом кадре:

введите описание изображения здесь

(В конце концов мне придется выяснить, как сделать так, чтобы новый фрейм появлялся всегда сверху, но это выходит за рамки этого вопроса)

Я использую OS X, если это актуально.

Шридхар Ратнакумар
источник
1
Просто наперед, я работаю над сценарием elisp и macruby, который отображает информацию о строке режима org в строке меню OSX. Это работает для меня, но я постараюсь обернуть это красиво.
Джордон Биондо
@JordonBiondo - отлично! Ваше решение может оказаться даже лучше, чем то, что я здесь делаю. с нетерпением жду этого. пожалуйста держите меня в курсе.
Шридхар Ратнакумар
Вы должны переформулировать и перефразировать свой вопрос, если вы действительно чувствуете, что ответы, которые вы говорите « Отлично! », Отвечают на него. Потому что, насколько я могу судить, они не отвечают на ваш запрос о кадре с « ничего, кроме строки режима » - вообще (и я сомневаюсь, что любой ответ будет). Итак, если вы ослабили свою цель с момента первоначальной формулировки вашего запроса, пожалуйста, попробуйте обновить вопрос соответствующим образом.
Дрю
Я согласен, что после прочтения мне показалось, что у ОП была конкретная проблема, но он искал только одно решение, а не лучшее решение.
Джордон Биондо
@Drew - Вы предлагаете какие-либо конкретные изменения? Оригинальное решение PythonNut отвечает на мой первоначальный запрос. Обратите внимание, что я сказал «Особенно не файловый буфер», и его решение - хотя и создает пустой буфер - не приводит к появлению файловых буферов в новом кадре.
Шридхар Ратнакумар

Ответы:

7

Расширение Йоргена Шафер ответа с Мэтью Piziak по предложению производит следующий фрагмент кода:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                 (unsplittable . t)
                 (buffer-predicate . (lambda (x) nil))
                 (height . 2)
                 (left-fringe . 0)
                 (right-fringe . 0)
                 (tool-bar-lines . 0)
                 (menu-bar-lines . 0)))
  (set-window-dedicated-p
    (get-buffer-window (current-buffer) t) t))

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

PythonNut
источник
Отлично, я проверил это на работу. Любой способ заставить новый кадр наследовать размер шрифта (и имя шрифта) основного кадра? Кроме того, можно *empty* All L1 (Fundamental)ли удалить избыточные специфичные для буфера части строки режима -? Вот как выглядит моя: i.imgur.com/iOLw57c.png
Шридхар Ратнакумар
@SridharRatnakumar К счастью, удаление дополнительной информации о строке режима является тривиальным. Я исправил свой ответ, чтобы включить это. Я не совсем уверен, что вы подразумеваете под сохранением шрифта? Разве буфер не пуст?
PythonNut
Я имел в виду свойство шрифта текста в строке режима (не пустой буфер).
Шридхар Ратнакумар
ах, ваш более поздний код также очистил строку мод основного кадра! Если это невозможно, давайте вернем это изменение, и я приму ваш ответ (он удовлетворит вопрос).
Шридхар Ратнакумар
Я тоже это заметил. Я исправил это. Шрифт mode-line не меняется, когда я это делаю, поэтому я не уверен, что случилось.
PythonNut
5

Это лучшее, что я мог придумать:

(with-current-buffer (generate-new-buffer "*empty*")
  (make-frame '((minibuffer . nil)
                (unsplittable . t)
                (buffer-predicate . (lambda (x) nil))
                (height . 2)
                (left-fringe . 0)
                (right-fringe . 0)
                (tool-bar-lines . 0)
                (menu-bar-lines . 0))))

Я не вижу способа отключить хотя бы одно окно с одним буфером, но окно, отображаемое с использованием этого фрагмента, не связано ни с одним файлом. Там buffer-predicateесть препятствие для выбора кадра для отображения любых (других) буферов, поэтому, если вы можете иметь дело с одной дополнительной пустой строкой, это должно сделать это.

Йорген Шефер
источник
Это не работает, как ожидалось. Буферы все еще активируются в новом кадре. Вот анимированный GIF для иллюстрации: i.imgur.com/07Q3tcW.gifv
Шридхар Ратнакумар
2
Использование display-buffer-alistможет быть решением этой проблемы.
Каушал Моди
Я не знаю, почему использование орг здесь не придерживается buffer-predicate. Использование display-buffer-alistможет быть действительно идеей, но я не знаю, как использовать его, чтобы предотвратить использование определенного кадра.
Йорген Шефер
2
Можно ли это исправить с помощью set-window-dedicated-p?
Мэтью Пизиак
1
buffer-predicate, Согласно информации, используется только other-bufferфункции, т.е. это не мешает другие функции просмотра любого из буфера в кадре.
политза
3

Еще одно решение для org-clock в osx

Небольшое поле в строке состояния. Он становится красным, когда ты не будешь

иллюстрация для красной рамки, см. страницу github

https://github.com/koddo/org-clock-statusbar-app

koddo
источник
1
Я немного опаздываю и не отвечаю на точный вопрос, но я предлагаю альтернативу, которая будет работать для кого-то.
Коддо
3

Решение для отображения информации о часах организации в строке меню OSX

Вот альтернативное решение указанной вами проблемы:

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

Вы можете использовать это для отображения информации из org-clock в osx menubar, которую вы почти всегда сможете увидеть.

https://github.com/jordonbiondo/osx-org-clock-menubar Доступно на MELPA

Обратите внимание, что для этого требуется макруби.

Как это выглядит в то время как в

введите описание изображения здесь

Джордон Биондо
источник
1
Простая реализация, которая не зависит от macruby, может быть сделана с помощью emacsclient -e "(org-clock-get-clocked-time)"и bitbar: getbitbar.com
mankoff
Это здорово, вы должны написать решение!
Джордон Биондо