Jak zapobiec „definicji funkcji Symbol jest nieważna: błąd” podczas uruchamiania emacsa w konsoli?

11

Aby wyłączyć pasek przewijania w emacsie, dodałem (przełącznik-pasek przewijania -1) do mojego pliku .emacs i działa świetnie, gdy uruchamiam emacsa poza trybem konsoli. Jednak po uruchomieniu emacsa w terminalu pojawia się błąd. Definicja funkcji symbolu jest nieważna: pasek przewijania

Używam Emacsa 23.3.1

oto ślad po uruchomieniu --debug-init

    1 Debugger entered--Lisp error: (void-function scroll-bar-mode)                
    2   (scroll-bar-mode -1)                                                       
    3   eval-buffer(#<buffer  *load*> nil "/Users/neil/.emacs.d/init.el" nil t)  ;$
    4   load-with-code-conversion("/Users/neil/.emacs.d/init.el" "/Users/neil/.ema$
    5   load("/Users/neil/.emacs.d/init" t t)                                      
    6   #[nil "^H\205\264^@   \306=\203^Q^@\307^H\310Q\2027^@ \311=\2033^@\312\307$
    7   command-line()                                                             
    8   normal-top-level()
bneil
źródło
Emacs prawdopodobnie dał ci bufor Ostrzeżeń, informujący o uruchomieniu emacsa z --debug-initopcją uzyskania pełnego śledzenia błędu. Spróbuj i dodaj tę informację do pytania. Wraz z wersją Emacsa M-x emacs-version. Ta część kodu działa dobrze z Emacsem 23.2.
Trey Jackson
@Trey Jackson, dodałem szczegóły, o które prosiłeś, wydaje mi się, że używam Emacsa 23.1, więc spróbuję uaktualnić. Dziękuję za twoje sugestie.
bneil
Bardzo dziwne. Ok, następny test uruchamia Emacsa bez / z twojego .emacs, emacs -nw -qa następnie w buforze scratch , wpisz (scroll-bar-mode -1)C-ji sprawdź, czy wystąpił błąd. Ta funkcja jest rozpowszechniana z Emacsem w scroll-bar.elpakiecie, więc domyślam się, że masz .emacscoś dziwnego lub Emacs nie został poprawnie zainstalowany.
Trey Jackson
Dostaję ten błąd po zrobieniu tego, że wszedł Debugger - Błąd Lisp: (tryb anulowania funkcji paska przewijania) (tryb paska przewijania -1) eval ((tryb paska przewijania -1)) eval-last-sexp -1 (t) eval-last-sexp (t) eval-print-last-sexp () call-Interactive (eval-print-last-sexp zero zero)
bneil
Oto mój plik .emacs pastebin.com/4mYE91Ne też
bneil

Odpowiedzi:

14

FWIW. Podręcznik emacsa odradza stosowanie window-systemjako predykatu.

Nie używaj systemu okien i systemu okien początkowych jako predykatów lub zmiennych logicznych, jeśli chcesz pisać kod, który działa inaczej na terminalach tekstowych i wyświetlaczach graficznych. Jest tak, ponieważ system okien nie jest dobrym wskaźnikiem możliwości Emacsa na danym typie ekranu. Zamiast tego użyj display-graphic-p lub dowolnego innego wyświetlacza - * - p predykaty opisane w Testowanie funkcji wyświetlania.

http://www.gnu.org/software/emacs/manual/html_node/elisp/Window-Systems.html

Używam tego, aby wyłączyć pasek przewijania i pasek narzędzi na ekranie graficznym.

(if (display-graphic-p)
    (progn
      (tool-bar-mode -1)
      (scroll-bar-mode -1)))
neatonk
źródło
5

Chociaż uważam, że odpowiedź @ neatonk jest najlepsza i obejmuje wszystkie podstawy, aby specjalnie wyłączyć pasek przewijania, możesz umieścić następujące ~/.emacs

(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
donovan.lampa
źródło
-2

Domyślam się, że kiedy otworzysz emacs -nwemacsa, nie zadaje sobie nawet trudu załadowania paska przewijania. El. dlatego ma problem ze znalezieniem funkcji toggle-scroll-bar.
może być zamiast tego, jeśli umieścisz
(scroll-bar-mode -1)
prawdopodobnie pracę.

kindahero
źródło
1
(toggle-scroll-bar -1)działa dobrze emacs -nwdla Emacsa 23,2 ...
Trey Jackson