идентификатор emacs работает только в терминале (-nw)

#emacs #indentation #emacs23 #cperl-mode

#emacs #отступ #emacs23 #cperl-режим

Вопрос:

У меня есть GNU Emacs 23.1.1 в Ubuntu 10.10.

Я должен следовать .emacs:

 (custom-set-variables
  '(cua-mode t nil (cua-base))
  '(inhibit-startup-screen t)
)

(show-paren-mode 1)
(setq show-paren-delay 0)

;; perl mode stuff
(fset 'perl-mode 'cperl-mode)
(setq cperl-indent-level 4
      cperl-close-paren-offset -4
      cperl-continued-statement-offset 0
      cperl-indent-parens-as-block t
      cperl-tab-always-indent t
      cperl-invalid-face nil
)
  

Когда я делаю $ emacs -nw , отступ табуляции работает нормально. Когда я запускаю версию GUI с $ emacs помощью табуляции, отступ не работает. Я получаю только пробеловый отступ.

Как я могу также получить отступ табуляции в графическом интерфейсе?

Cperl conf был взят из emacswiki

Пакеты emacs, которые у меня есть:

 $ dpkg -l | grep emacs
ii  emacs                                23.1 1-4ubuntu7.2 maverick1                       The GNU Emacs editor (metapackage)
ii  emacs-goodies-el                     33.6ubuntu1                                       Miscellaneous add-ons for Emacs
ii  emacs-snapshot                       1:20090909-1                                      The GNU Emacs editor (development snapshot)
ii  emacs-snapshot-bin-common            1:20090909-1                                      The GNU Emacs editor's shared, architecture dependent files
ii  emacs-snapshot-common                1:20090909-1                                      The GNU Emacs editor's common infrastructure
ii  emacs23                              23.1 1-4ubuntu7.2 maverick1                       The GNU Emacs editor (with GTK  user interface)
ii  emacs23-bin-common                   23.1 1-4ubuntu7.2 maverick1                       The GNU Emacs editor's shared, architecture dependent files
ii  emacs23-common                       23.1 1-4ubuntu7.2 maverick1                       The GNU Emacs editor's shared, architecture independent infrastructure
ii  emacsen-common                       1.4.19ubuntu1                                     Common facilities for all emacsen
  

РЕДАКТИРОВАТЬ: Извините, но я только что заметил, что неправильно изучил поведение. Как в графическом интерфейсе, так и в -nw, когда я редактирую файл, в котором уже есть отступы табуляции, используются табуляции, тогда как когда я редактирую новый файл, отступы в нем делаются пробелами.

Комментарии:

1. каков результат C-h w <TAB> ?

2. @kindahero: в графическом интерфейсе, верно? результатом является подсказка «где находится команда» и список возможных команд (я думаю, из-за <TAB>)

3. извините, так и должно быть C-h k <TAB> (C-hk сообщает вам, что «команда» выполняется нажатием клавиши)

4. @kindahero Хм, кажется, что-то есть. В графическом интерфейсе indent-for-tab-command в -nw forward-button . Хотя ошибку, которую я допустил, смотрите в моей правке.

Ответ №1:

Сначала проверьте буферы *Messages* и *Warnings* при запуске. Там может быть подсказка о том, что там не работает. В частности, *Messages* должны быть перечислены все файлы запуска, которые загружает emacs; в Ubuntu это будет включать файлы в /etc/emacs , а также ваши .emacs .

Если это не поможет, попробуйте запустить ваш .emacs в интерактивном режиме в отладчике emacs. Запустите emacs с emacs -nw -q и загрузите .emacs в буфер. Запустите, M-x edebug-all-forms затем запустите M-x eval-buffer. Несколько раз нажмите пробел, чтобы перейти к файлу.

Редактировать: Проверьте значение indent-tabs-mode в буфере perl в обеих ваших средах. Это используется для управления тем, следует ли делать отступ символами табуляции или пробелами. Добавление (setq-default indent-tabs-mode t) должно заставить emacs делать отступ символами табуляции.

Комментарии:

1. *Messages* : не имеет ничего подозрительного (все done ). У меня нет *Warnings* буфера, и я не смог найти, как его открыть. Я также попробовал другую вещь, но отладчик сообщил, что было возвращено из каждой команды, и успешно завершил.

2. Я добавил (setq-default indent-tabs-mode t) перед ;; perl mode stuff , но это ничего не изменило. Однако, смотрите мою правку, чтобы увидеть допущенную мной ошибку.