Obszar echa jest przez większość czasu pusty, co sprawia, że myślę, że mógłbym go użyć do wyświetlenia niektórych informacji. Na przykład org-clock
wyświetla bieżące zadanie, pozostały czas i całkowity czas, który upłynął na modeline. Ta informacja nie jest tak naprawdę czytelny (modeline może być dość krótki), powtarza się na każdej modeline (bo odnosi się do całych sesji emacs), a nie jest to przydatne, że jestem w stanie poświęcić trochę cennego miejsca Modeline dla niego . Z drugiej strony może pojawić się w obszarze echa, gdy nie ma tu nic więcej do wyświetlenia.
Czy istnieje kanoniczny sposób na osiągnięcie tego? Myślałem o włamaniu się do funkcji wstawiania minibuffer-inactive-mode-hook
(ale to nie działa niezawodnie, na przykład wiadomość znika, gdy tylko obszar echa zostanie ponownie użyty) lub spamowaniu niezalogowanych wiadomości (ale będzie to bałagan przy innych zastosowaniach obszar echa i minibufor).
Wersja dla biednego człowieka używałaby bezczynnych timerów, ale obszar echa może być pusty bez emacsa bezczynności (na przykład podczas wprowadzania tekstu).
źródło
Odpowiedzi:
Komentarz do tego pytania wspomina, że pakiet o nazwie symon korzysta z takiej funkcji.
Osiąga się to poprzez spamowanie niezalogowanych wiadomości, gdy minibufor jest nieaktywny, oraz poprzez zatrzymanie ponownego wyświetlania za każdym razem, gdy polecenie jest wydawane. Płyta główna tego jest raczej krótka, a po kilku minutach użytkowania nie zauważyłem żadnych problemów: komunikaty i użycie minibufora nadal mają pierwszeństwo przed komunikatami.
Kluczowe elementy to:
message-log-max
ustawionym nanil
, aby wyświetlany ciąg nie dostał się do*Messages*
bufora)pre-command-hook
Jedynym problemem jest to, że wyświetlanie jest zatrzymywane przy każdym uruchomieniu polecenia, w tym podczas pisania.
Zainteresowanym wyodrębniłem odpowiedni kod w pakiecie z szablonami dostępnymi na github .
źródło
Odpowiedź IMO brzmi: nie . Obszar echa służy do przekazywania ulotnych wiadomości . I wiele rzeczy wyraźnie usuwa wszystko, co mogło zostać tam powtórzone. Zatem realizacja tego, o co prosisz w rozsądny sposób, jest problematyczna, IMO.
Podsumowując, użyj alternatywy. Oto niektóre:
Użyj innego bufora (np. Małej ramki lub okna, które w tym celu pozostanie otwarte). Prosty w obsłudze, możesz go przenosić, edytować, usuwać lub robić z nim co chcesz.
Użyj części lub całości wiersza trybu (najwyraźniej już to rozważałeś).
Użyj linii nagłówka.
Użyj tytułu ramki.
Gdybym to był ja, prawdopodobnie wybrałbym numer 1. (Ale tak naprawdę nie chcę / nie potrzebuję takiego pełnego wyświetlania informacji o stanie. Bardziej prawdopodobne byłoby zdefiniowanie polecenia wyświetlającego mi informacje (nawet historię / dziennik) na żądanie).
Zaktualizowany po twoich komentarzach:
W swoim pytaniu powiedziałeś już: „ komunikat znika, gdy tylko obszar echa zostanie ponownie użyty ”. Brzmiało to więc tak, jakby używać tak efemerycznej przestrzeni, ponieważ obszar echa nie pasowałby do twoich potrzeb. Twoje odpowiedzi na komentarze wydają się temu zaprzeczać.
Jeśli naprawdę chcesz użyć obszaru echa, użyj
minibuffer-inactive-mode-hook
, jak wspomniałeś, lub użyj timera, aby zadzwonićmessage
lub wstawić komunikat czasu w obszarze echa w inny sposób. Jednak zauważyliście już problemy z tym związane. Te problemy (nadpisywanie, usuwanie) wynikają z ( zamierzonego ) efemerycznego charakteru obszaru echa .Podsumowując, chcesz użyć obszaru przeznaczonego na efemeryczne wiadomości, ale nie chcesz, aby Twoje wiadomości znikały, gdy tylko ten obszar zostanie ponownie użyty.
(BTW - napisz swoją wzmiankę, że informacja o linii trybu jest powtarzana w każdej linii trybu: To nie musi być przypadek. Możesz ustawić linię trybu specyficzną dla konkretnego bufora itp. IOW, możesz wybrać jedną linię trybu, aby zawsze (lub okresowo) pokaż swój zegar lub cokolwiek innego.)
źródło
org-clock
przykład z pytania: Chcę, aby stoper odznaczał się, aby przypomnieć mi o tym, co powinienem robić i że powinienem to robić teraz , ponieważ często jak to możliwe.minibuffer-inactive-mode-hook
użyję minibufora i wyjdę z niego, pojawi się komunikat. Następnie, jeśli jakieś inne polecenie wypisze coś w obszarze echa, nowa wiadomość zostanie dodana, a wiadomość efemeryczna nie wróci (ponieważ tym razem minibufor się nie zaangażował).message
lubpost-command-hook
, jeśli chcesz. Ale zasadniczy problem znikania / nadpisywania czasami odwraca głowę, ponieważ próbujesz użyć tymczasowego obszaru wyświetlania dla czegoś, czego nie chcesz tymczasowo.