Przeniesienie linii trybu i minibufora na górę

13

Czy jest jakiś sposób, aby przesunąć linię trybu i minibufor z dołu na górę ekranu?

Minibufor jest objęty poprzednim pytaniem Jak wyświetlić zawartość minibufora w środku ramki emacs? , więc to pytanie dotyczy przede wszystkim linii trybu.

Właśnie upuściłem laptopa i pękłem na ekranie, więc nie widzę wiele w dolnym rzędzie.

Mongus Pong
źródło
Przez „pasek stanu” masz na myśli linię trybu lub minibufor?
Malabarba
@Malabarba Przepraszam, nie jestem w 100% lepszy od terminologii emacs. Mam na myśli oba. Nie widzę dużo na dole ekranu.
Mongus Pong,

Odpowiedzi:

19

Treść mode-linejest przechowywana w zmiennej mode-line-format. Emacsobsługuje także wiersz nagłówka, którego zawartość jest sterowana przez zmienną header-line-format.

Zasadniczo możesz użyć

(setq header-line-format mode-line-format)
(setq-default mode-line-format nil)

aby format header-linebył równy formatowi linii bieżącego trybu i usuń mode-line.

Edycja: Jeśli chcesz użyć tego ustawienia na stałe

(setq-default header-line-format mode-line-format)

w twoim pliku init (dzięki nispio za tę sugestię).

Ponieważ chcesz też, minibufferaby pojawiał się u góry, ponownie połączę odpowiedź @ Malabarba na pytanie Jak wyświetlić zawartość minibufora w środku ramki emacsa? który można dostosować tak, aby pokazywał minibufor na górze. Zastanów się również nad odpowiedzią @phils na pytanie. Czy można przenieść minibufor emacsa na górę ekranu? na „starym” emacs znaczniku w przepełnieniu stosu.

O ile mi wiadomo, nie ma sposobu, aby bezpośrednio umieścić minibufor na górze. Jedynym podejściem (które jest również wykorzystywane w powyższych odpowiedziach) jest użycie drugiej ramki.

elemakil
źródło
4
Jeśli dodajesz to do pliku init, będziesz chciał użyć setq-defaultzamiast setq.
nispio
Czy mogę zapytać o przyczynę głosowania?
elemakil
@elemakil Odpowiedź była nieprawidłowa bez wartości domyślnej setq. Teraz ma rację. :-)
Malabarba
(choć technicznie jest to teraz niekompletne w odniesieniu do nowych danych dostarczonych przez użytkownika)
Malabarba
@Malabarba Rozumiem. Dzięki za wyjaśnienie! :-)
elemakil
4

Twoje prawdziwe pytanie brzmi: jak sprawić, by Emacs unikał wadliwej części ekranu; linia trybu i minibufor są tylko tym, co może być nieczytelne.

Zamiast przesuwać je i pozostawiać coś innego (np. Tekst) w nieczytelnej części ekranu, bardziej czystym i ogólnym rozwiązaniem jest zmniejszanie i przesuwanie ramki Emacsa (tj. Tak zwane okno), tak aby całkowicie znajdowała się w dobrym obszarze ekran.

Jak zwykle w Emacsie, istnieją do tego specjalne narzędzia. Biblioteka Maxframe ( Github home ) została zaprojektowana tak, aby automatycznie wypełniać cały ekran ramką Emacsa, co jest przeciwieństwem tego, czego potrzebujesz, ale udostępnia użyteczną mf-set-frame-pixel-sizefunkcję, którą można wywołać z pliku init wraz ze standardową set-frame-positionfunkcją do umieszczenia twojego ramka w odpowiedniej pozycji automatycznie po otwarciu Emacsa.

Lorenzo Gatti
źródło
1
Popieram twój punkt widzenia. Ale nie trzeba hakować paczki. Zobacz default-frame-alist .
Malabarba
@Malabarba W niepowiązanej notatce na temat doc.endlessparentheses.com , dlaczego tylko drugi ukośnik jest konwertowany na kod ascii? Przykład: otrzymuję http://doc.endlessparentheses.com/Var%2F2C-window-width.htmlpo kliknięciu 2C-window-width tutaj .
Kaushal Modi
@kaushalmodi to tylko mały błąd w generowaniu indeksu. Możesz używać zwykłych ukośników na linkach, a one będą działać poprawnie. Naprawiłem go lokalnie, ale regeneracja indeksu zajmuje wiele godzin, więc
odkładam
1
@Malabarba: mf-set-frame-pixel-size jest przydatny, ponieważ podstawowy sposób ustawiania wysokości i szerokości ramki jest według znaków, a nie pikseli, co nie jest bardzo praktyczne w tym scenariuszu. default-frame-alist i jego krewni również mierzą znaki.
Lorenzo Gatti