Як запобігти визначенню функції "Symbol є недійсним: помилка" під час запуску emacs у консолі?


11

Для відключення смуги прокрутки в emacs я додав (toggle-scroll-bar -1) у свій файл .emacs, і він чудово працює, коли я запускаю emacs поза консольним режимом. Однак, коли я запускаю emacs в терміналі, я отримую помилку. Означення функції Symbol є недійсним: 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()

Emacs, ймовірно, надав вам буфер попереджень, який дозволяє вам запускати emacs з --debug-initможливістю отримати повне відхилення помилок. Спробуйте це і додайте цю інформацію до питання. Поряд з версією Emacs M-x emacs-version. Цей фрагмент коду працює чудово з Emacs 23.2.
Трей Джексон

@Trey Jackson, я додав деталі, які ви запитували, я, здається, працює у Emacs 23.1, тому спробую оновити. Дякую за ваші пропозиції.
bneil

Дуже дивно. Добре, наступний тест працює під управлінням Emacs ж / з ваших .emacs, emacs -nw -qі потім в дряпання буфера, тип (scroll-bar-mode -1)C-jі подивитися , якщо ви отримаєте повідомлення про помилку. Ця функція поширюється разом із Emacs у scroll-bar.elпакеті, тому я здогадуюсь, що у вас .emacsщось не дивно, або Emacs не встановлений належним чином.
Трей Джексон

Я отримую цю помилку, роблячи те, що вводився налагоджувач - помилка Lisp: (режим прокрутки-смуги-режим) (режим прокрутки-смуга-режим -1) eval ((режим прокрутки-смуга -1)) eval-last-sexp -1 (t) eval-last-sexp (t) eval-print-last-sexp () call-interactively (eval-print-last-sexp nil nil)
bneil

Ось мій .emacs файл pastebin.com/4mYE91Не теж
bneil

Відповіді:


14

FWIW. Посібник emacs перешкоджає використанню window-systemприсудка.

Не використовуйте віконну систему та початкову віконну систему в якості предикатів або булевих змінних прапор, якщо ви хочете написати код, який працює по-різному на текстових терміналах та графічних дисплеях. Це тому, що віконна система не є хорошим показником можливостей Emacs для заданого типу дисплея. Замість цього використовуйте display-graphic-p або будь-який інший дисплей - * - 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)))

5

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

(if (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))

-2

Моя здогадка, коли ви відкриваєте emacs -nwemacs, навіть не намагаєтеся завантажити scroll-bar.el. ось чому у нього виникають проблеми з пошуком функції toggle-scroll-bar.
може бути замість цього, якщо ви поставите,
(scroll-bar-mode -1)
ймовірно, роботу.


1
(toggle-scroll-bar -1)працює чудово emacs -nwдля Emacs 23.2 ...
Трей Джексон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.