Utwórz nową ramkę z tylko linią trybu

13

Chcę utworzyć nową ramkę, która nie zawiera nic oprócz linii trybu. Zwłaszcza nie bufor pliku.

Dlaczego tego potrzebuję? Używam taktowania org-mode, aby mierzyć czas mojej pracy. Tryb organizacji wyświetla licznik dla bieżącego zadania, nad którym pracuję, w wierszu trybu i aktualizuje licznik w czasie rzeczywistym. Korzystam z aplikacji innych niż Emacs, więc po przełączeniu się na nie (np. Podczas korzystania z przeglądarki lub terminala) nadal chcę mieć możliwość sprawdzenia uruchomionego timera. Pomyślałem, że mogę utworzyć nową ramkę, ale kiedy teraz klikam licznik czasu w linii trybu, plik .org otwiera się w nowej ramce (która jest już przeskalowana, aby wyświetlać tylko linię trybu) zamiast przeskakiwać z powrotem do to w pierwszej klatce.

Oto jak wygląda moja linia trybu (niebieski pasek) - to wszystko, czego chcę na nowej ramce:

wprowadź opis zdjęcia tutaj

(W końcu będę musiał wymyślić, jak sprawić, by nowa ramka była zawsze na wierzchu, ale to nie wchodzi w zakres tego pytania)

Używam OS X, jeśli jest to istotne.

Sridhar Ratnakumar
źródło
1
Tylko heads-up, pracuję nad jakimś elisp i makrowym skryptem, który wyświetli informacje o wierszu trybu org na pasku menu OSX. Działa dla mnie, ale postaram się ładnie to podsumować.
Jordon Biondo
@JordonBiondo - doskonale! Twoje rozwiązanie może okazać się jeszcze lepsze niż to, co tutaj robię. nie mogę się doczekać. proszę informuj mnie na bieżąco.
Sridhar Ratnakumar
Powinieneś zmienić nazwę i sformułować swoje pytanie, jeśli naprawdę czujesz, że odpowiedzi, na które odpowiadasz, brzmią „ Doskonałe! ”. Ponieważ, o ile mogę powiedzieć, nie odpowiadają na twoją prośbę o ramkę z „ niczym innym jak linią trybu ” - w ogóle (i wątpię, czy jakakolwiek odpowiedź będzie). IOW, jeśli złagodziłeś swój cel od czasu pierwotnego sformułowania wniosku, rozważ odpowiednią aktualizację pytania.
Drew
Zgadzam się, po przeczytaniu naprawdę wydawało się, że OP miał konkretny problem, ale prosił tylko o jedno rozwiązanie, a nie najlepsze.
Jordon Biondo
@Drew - Czy sugerujesz jakieś konkretne zmiany? Oryginalne rozwiązanie PythonNut odpowiada na moje pierwotne żądanie. Zauważ, że powiedziałem „Zwłaszcza bufor plików.”, A jego rozwiązanie - chociaż tworzy pusty bufor - nie prowadzi do pojawienia się buforów plików w nowej ramce.
Sridhar Ratnakumar

Odpowiedzi:

7

Rozszerzanie Jorgen Schäfer za odpowiedź z Matthew Piziak za sugestią produkuje następujący fragment:

(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))

O ile wiem, to poprawnie blokuje okno do pustego bufora. Próba przełączenia na inny bufor otworzy bufor w istniejącym oknie w ramce nadrzędnej.

PythonNut
źródło
Doskonale, sprawdziłem, czy to działa. Czy jest jakiś sposób, aby nowa ramka dziedziczyła rozmiar czcionki (i nazwę czcionki) ramki głównej? Czy można również *empty* All L1 (Fundamental)usunąć nadmiarowe części linii trybu specyficzne dla bufora - -? Oto jak wygląda mój: i.imgur.com/iOLw57c.png
Sridhar Ratnakumar
@SridharRatnakumar Na szczęście usunięcie dodatkowych informacji o linii trybu jest banalne. Poprawiłem swoją odpowiedź, aby to uwzględnić. Nie jestem do końca pewien, co masz na myśli mówiąc o zachowaniu czcionki? Czy bufor nie jest pusty?
PythonNut
Miałem na myśli właściwość font tekstu w wierszu trybu (a nie pusty bufor).
Sridhar Ratnakumar
ah, twój późniejszy kod wyczyścił również linię trybu ramki głównej! Jeśli nie jest to możliwe, cofnijmy tę zmianę i zaakceptuję twoją odpowiedź (spełnia pytanie).
Sridhar Ratnakumar
Właśnie to zauważyłem. Naprawiłem to. Czcionka linii trybu nie zmienia się, gdy to robię, więc nie jestem pewien, co jest grane.
PythonNut
5

To najlepsze, co mogłem wymyślić:

(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))))

Nie widzę sposobu, aby wyłączyć przynajmniej jedno okno z jednym buforem, ale okno wyświetlane przy użyciu tego fragmentu nie jest powiązane z żadnym plikiem. buffer-predicateNie chroni ramę przed wybrano wyświetlanie żadnych buforów (inne), więc jeśli można czynienia z jedną dodatkową pustą linią, to powinno wystarczyć.

Jorgen Schäfer
źródło
To nie działa zgodnie z oczekiwaniami. Bufory są nadal aktywowane w nowej ramce. Oto animowany gif do zilustrowania: i.imgur.com/07Q3tcW.gifv
Sridhar Ratnakumar
2
display-buffer-alistRozwiązaniem może być użycie .
Kaushal Modi
Nie wiem, dlaczego użycie org tutaj nie przestrzega buffer-predicate. Korzystanie display-buffer-alistmoże być pomysłem, ale nie wiem, jak go użyć, aby zapobiec użyciu określonej ramki.
Jorgen Schäfer
2
Czy można to naprawić za pomocą set-window-dedicated-p?
Matthew Piziak
1
buffer-predicateJest, według informacji, używany tylko przez other-bufferfunkcję, to znaczy nie wyklucza innych funkcji wyświetlanie dowolnego bufora w ramce.
politza
3

Jeszcze jedno rozwiązanie dla org-clock w OSX

Małe pole na pasku stanu. Zmienia kolor na czerwony, gdy się nie zarejestrował.

ilustracja czerwonego pola, patrz strona github

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

koddo
źródło
1
Jestem trochę spóźniony i nie odpowiadam na dokładne pytanie, ale oferuję alternatywę, która byłaby dla kogoś przydatna.
koddo
3

Rozwiązanie do wyświetlania informacji o org-clock na pasku menu OSX

Oto alternatywne rozwiązanie określonego problemu:

Korzystam z aplikacji innych niż Emacs, więc po przełączeniu się na nie (np. Podczas korzystania z przeglądarki lub terminala) nadal chcę mieć możliwość sprawdzenia uruchomionego timera.

Możesz użyć tego do wyświetlenia informacji z zegara org w zegarze OSX, które prawie zawsze powinny być widoczne.

https://github.com/jordonbiondo/osx-org-clock-menubar Dostępne w MELPA

Zauważ, że wymaga to makruby.

Jak to wygląda po włączeniu.

wprowadź opis zdjęcia tutaj

Jordon Biondo
źródło
1
Prosta implementacja, że nie opiera się na macruby można zrobić z emacsclient -e "(org-clock-get-clocked-time)"i bitbar: getbitbar.com
mankoff
To niesamowite, powinieneś napisać rozwiązanie!
Jordon Biondo