Как предотвратить «Определение функции Symbol void: error» при запуске emacs в консоли?

10

Чтобы отключить полосу прокрутки в emacs, я добавил (toggle-scroll-bar -1) в мой файл .emacs, и он прекрасно работает, когда я запускаю emacs вне консольного режима. Однако, когда я запускаю emacs в терминале, я получаю ошибку. Определение функции Symbol - void: toggle-scroll-bar

Я использую Emacs 23.3.1

вот след, когда я запускаю --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
источник
Emacs, вероятно, предоставил вам буфер Warnings, сообщающий вам, что нужно запустить emacs с --debug-initвозможностью получить полный возврат ошибок. Попробуйте это и добавьте эту информацию к вопросу. Наряду с версией Emacs M-x emacs-version. Этот кусок кода прекрасно работает с Emacs 23.2.
Трей Джексон
@ Трей Джексон, я добавил детали, которые ты просил, похоже, я использую Emacs 23.1, поэтому я попробую обновить. Спасибо вам за ваши предложения.
Июнь
Очень странно. Хорошо, следующий тест - это запуск Emacs без вашего .emacs, emacs -nw -qа затем в пустом буфере наберите (scroll-bar-mode -1)C-jи посмотрите, не появилась ли ошибка. Эта функция распространяется вместе с Emacs в scroll-bar.elпакете, поэтому я предполагаю, что у вас .emacsесть что-то странное, или Emacs не был установлен должным образом.
Трей Джексон
Я получаю эту ошибку после того, как вошел отладчик - ошибка Лиспа: (режим-пустота-scroll-bar-mode) (scroll-bar-mode-1) eval ((scroll-bar-mode-1)) eval-last-sexp -1 (t) eval-last-sexp (t) eval-print-last-sexp () вызов интерактивно (eval-print-last-sexp ноль ноль)
бнейл
Вот мой файл .emacs pastebin.com/4mYE91Не тоже
бнейл

Ответы:

13

FWIW. Руководство по emacs не поощряет использование window-systemв качестве предиката.

Не используйте window-system и initial-window-system в качестве предикатов или переменных логического флага, если вы хотите написать код, который по-разному работает на текстовых терминалах и графических дисплеях. Это связано с тем, что оконная система не является хорошим индикатором возможностей Emacs для данного типа дисплея. Вместо этого используйте display-graphic-p или любой другой предикат display - * - p, описанный в разделе «Проверка возможностей отображения».

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

Я использую это для отключения полосы прокрутки и панели инструментов, когда на графическом дисплее.

(if (display-graphic-p)
    (progn
      (tool-bar-mode -1)
      (scroll-bar-mode -1)))
neatonk
источник
5

Хотя я думаю, что ответ @ neatonk самый лучший и охватывает все основания, чтобы специально отключить полосу прокрутки, вы можете добавить следующее в ~/.emacs

(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
donovan.lampa
источник
-2

Я предполагаю, что когда вы открываете emacs -nwemacs, он даже не загружает scroll-bar.el. вот почему у него возникают проблемы с поиском функции toggle-scroll-bar.
может быть вместо этого, если вы положили,
(scroll-bar-mode -1)
вероятно, работать.

kindahero
источник
1
(toggle-scroll-bar -1)отлично работает в emacs -nwEmacs 23.2 ...
Трей Джексон