Chciałbym wyświetlić 3 listy słów w oddzielnych liniach poziomo wzdłuż dolnej krawędzi (chociaż górna też by działała) każdej otwartej ramki emacsa. Pomyślałem o 6 sposobach na zrobienie tego i wszystkie mają problemy:
Moją pierwszą myślą było dodanie linii do mojej linii trybu, ale AFAICT nie można użyć znaku nowej linii w linii trybu, po prostu zostaje przekonwertowany na „^ J”.
Druga myśl polegała na tym, aby mieć linię na górze ekranu i użyć linii nagłówka, ale nie obsługuje ona także znaku nowej linii.
Mógłbym wyświetlić nakładkę na ostatnie 3 linie okna, ale sprawienie, by ta solidność wydawała się trudna - przewijanie musiałoby zostać uruchomione, gdy punkt osiągnie nakładkę, a nie rzeczywisty koniec okna, i musiałbym ciągle zmieniać położenie nakładka, ponieważ nakładki znajdują się w przestrzeni tekstowej, a nie w przestrzeni okna.
Mógłbym spróbować stworzyć dedykowane okna u dołu ramki. Próbowałem to zakodować, ale to też nie jest zbyt solidne, wydaje się, że nie działa poprawnie, gdy ramka zawiera już podzielone okna i musiałem ponownie powiązać Cx, 1 z niestandardową wersją delete-other-windows, która ignoruje moje specjalne okna i jestem pewien, że istnieją inne narożne skrzynki. Również kiedy okno pomocy otwiera się teraz, otwiera się pionowo, ponieważ wydaje się, że jest już podział poziomy (co technicznie istnieje, ale służy tylko do wyświetlania okna z jedną linią).
Mógłbym mieć dedykowaną ramkę do tego, ale wtedy moja konfiguracja nie będzie działać w trybie terminalowym, i musiałbym napisać skrypt do mojego menedżera okien, aby poradził sobie z utrzymywaniem go na dole ekranu, dzięki czemu nie można go wybrać, nie wpływa na układ, itd itd.
Mógłbym wstawić tekst 3 linii bezpośrednio do minibufora. Mam częściowo działający, mogę wyhodować minibufor, aby pomieścić 3 linie i mogę je wyświetlić. Jednak za każdym razem, gdy jakakolwiek wiadomość jest wyświetlana, wiersze znikają, dopóki nie wydam innego polecenia, w którym miejscu ponownie się pojawiają. Idealnie 3 linie i obszar echa nie zachodzą na siebie, więc mogłem zobaczyć oba. Byłoby to mniej denerwujące, gdybym mógł niezawodnie filtrować, które wiadomości trafiają do obszaru echa - znalazłem rozwiązanie na EmacsWiki, ale wydaje się, że nie działa dla wiadomości, które pochodzą ze źródła emacs C (konkretnie chciałbym uzyskać pozbyć się wiadomości zapisywania plików, ponieważ często zapisuję automatycznie na zegarze).
W kontekście, moim celem jest ciągłe wyświetlanie najczęściej używanych słów w bieżącym buforze, słów najbliższego punktu w bieżącym buforze oraz słów ostatnio używanych w bieżącym buforze. Zamierzam móc je wstawić do bufora za pomocą poleceń głosowych. Więc mógłbym powiedzieć „najbliższe 2” i pozwolić mu wybrać drugi element z listy słów najbliższego punktu i wstawić go. Dbam tylko o to, by listy słów były widoczne dla każdego bufora, który aktualnie edytuję. Nie chcę używać okien wyskakujących używanych przez różne tryby uzupełniania kodu, ponieważ listy muszą być zawsze widoczne.
Odpowiedzi:
Dzięki wielu hackowanym eksperymentom udało mi się doprowadzić numer 6 (używając tekstu minibufora) do „wystarczająco dobrego” stanu roboczego. Oto zrzut ekranu:
Aby to zadziałało, istnieje kilka kluczowych elementów:
Oto link do mojej implementacji z przykładowym paskiem z pierścieniem zabójstwa. W końcu będzie to częścią właściwego projektu: https://gist.github.com/jgarvin/ce37d08654978fd7e4c9
To pierwszy raz, kiedy piszę znaczną ilość elisp, więc jakość jest prawdopodobnie słaba, ale działa.
źródło
Niestety ani linia trybu, ani linia nagłówka nie mogą być wieloma liniami. Pytałem o to wcześniej i nie ma (przynajmniej nie było) żadnej ukrytej opcji, aby to zadziałało. Więc 1 i 2 są wyłączone. Czuję też, że 3 i 6 to hacki, które nie będą cię uszczęśliwiać na dłuższą metę. 3 i 4 wydają się być dobrym podejściem, ale ich niezawodne działanie będzie sporą inwestycją.
Polecam więc najpierw porozmawiać o tym na emacs-devel . Z mojego doświadczenia wynika, że w końcu rzeczy zostaną wdrożone, jeśli starasz się dokładnie wyjaśnić, czego chcesz i dlaczego jest to dobra rzecz. Może to zająć trochę czasu, przynajmniej do następnej wersji, ale jeśli dobrze jest trochę poczekać lub skorzystać z wersji programistycznej, możesz uzyskać dokładnie to, czego chcesz, przy znacznie mniejszym wysiłku.
źródło