2013-09-04 3 views
4

Я не понимаю, должно ли это быть здесь или в суперпользователе, но здесь.Ошибка Emacs Desktop-save-mode

Я пытаюсь использовать пакет Desk Top с последними Emacs. Я добавил (desktop-save-mode 1) в мой .emacs, но при запуске emacs теперь я получаю следующую ошибку.

Error (frameset): Wrong type argument: number-or-marker-p, nil 

Я немного потери в где начать отладку этого и Google в настоящее время бесполезно.

Любые идеи?

Стек трассировки добавлен по запросу

Debugger entered--Lisp error: (wrong-type-argument number-or-marker-p nil) 
    2 +(nil 80 -1) 
    3 frameset-move-onscreen(#<frame F1 0xb53310> t) 
    4 frameset--restore-frame(((tty-type . "xterm-256color") (tty . "/dev/tty") (display-type . color) (background-mode . dark) (foreground-color . "#808080") (cursor-color . "#808080") (background-col$ 
    5 #[0 "\307\[email protected]\236A\211A^[email protected]\205^M^@\211\310\302!\203^[^@\302\[email protected]\305\"\202^\^@\302\311\211\312^C!\203*^@\311^V \202J^@\313\311\314\"\314\[email protected]\236A=\203=^@\311^V \202J^@\314\313\311\314\"B\211^V $ 
    6 funcall(#[0 "\307\[email protected]\236A\211A^[email protected]\205^M^@\211\310\302!\203^[^@\302\[email protected]\305\"\202^\^@\302\311\211\312^C!\203*^@\311^V \202J^@\313\311\314\"\314\[email protected]\236A=\203=^@\311^V \202J^@\314\313\311\314\"$ 
    7 frameset-restore([frameset 1 (21031 10481 847348 292000) (desktop . "206") "[email protected]" nil nil ((((tty-type . "xterm-256color") (tty . "/dev/tty") (display-type . color) (background-mode . d$ 
    8 (progn (frameset-restore desktop-saved-frameset :reuse-frames desktop-restore-reuses-frames :force-display desktop-restore-in-current-display :force-onscreen desktop-restore-forces-onscreen)) 
    9 (if (desktop-restoring-frameset-p) (progn (frameset-restore desktop-saved-frameset :reuse-frames desktop-restore-reuses-frames :force-display desktop-restore-in-current-display :force-onscreen de$ 
    10 desktop-restore-frameset() 
    11 (if (and owner (memq desktop-load-locked-desktop (quote (nil ask))) (or (null desktop-load-locked-desktop) (daemonp) (not (y-or-n-p (format "Warning: desktop file appears to be in use by PID %s.\$ 
    12 (let ((desktop-first-buffer nil) (desktop-buffer-ok-count 0) (desktop-buffer-fail-count 0) (owner (desktop-owner)) (desktop-save nil)) (if (and owner (memq desktop-load-locked-desktop (quote (nil$ 
    13 (if (file-exists-p (desktop-full-file-name)) (let ((desktop-first-buffer nil) (desktop-buffer-ok-count 0) (desktop-buffer-fail-count 0) (owner (desktop-owner)) (desktop-save nil)) (if (and owner $ 
    14 (if noninteractive nil (setq desktop-dirname (file-name-as-directory (expand-file-name (or (and (< 0 (length dirname)) dirname) (let ((dirs desktop-path)) (while (and dirs ...) (setq dirs ...)) ($ 
    15 desktop-read() 
    16 (progn (desktop-read) (desktop-auto-save-set-timer) (setq inhibit-startup-screen t)) 
    17 (if desktop-save-mode (progn (desktop-read) (desktop-auto-save-set-timer) (setq inhibit-startup-screen t))) 
    18 (closure (auto-insert desktop-buffer-locals desktop-buffer-major-mode desktop-buffer-fail-count desktop-buffer-ok-count desktop-first-buffer t) nil (let ((key "--no-desktop")) (if (member key com$ 
    19 run-hooks(after-init-hook) 
    20 command-line() 
    21 normal-top-level() 
+0

Попробуйте 'Эхо "(рабочий стол сохранение режима 1)"> test.el && Emacs -q -l test.el' –

+0

Или 'emacs -q --eval" (desktop-save-mode 1) "' –

+0

Hmm odd - сообщение об ошибке отсутствует, когда я это делаю, но если я убираю .emacs, чтобы просто включить (desktop-save-mode 1) Я все еще получаю сообщение об ошибке ... –

ответ

8

У меня такая же проблема. Мне удалось это исправить, установив

(setq desktop-restore-frames t) 
(setq desktop-restore-in-current-display t) 
(setq desktop-restore-forces-onscreen nil) 

в моем init.el

+2

Это строка '(setq desktop-restore-force-onscreen nil)', которая специально устраняет эту проблему. –

3

Набор debug-on-error для t в файле инициализации. Переименуйте или удалите файл с байтом desktop.elc, поэтому загрузится исходный файл desktop.el - это даст вам лучшую отладочную обратную трассировку.

При возникновении ошибки в отладчике будет отображаться обратная трассировка (буфер *Backtrace*). Это даст больше информации о том, что вызывает ошибку, что в данном случае является фактом, что frameset ожидает число или маркер и вместо этого получил nil.

Кроме того, убедитесь, что вы обновили Emacs, если вы используете моментальный снимок разработки, потому что код frameset.el все еще разрабатывается (он совершенно новый). Вы можете показать свою обратную линию здесь. Возможно, в frameset.el есть ошибка, о которой нужно сообщить. Если это так, M-x report-emacs-bug - это способ сделать это. Но сначала попробуйте расследовать.


ПОСЛЕ трассировку ---

Пожалуйста, сообщите об этом как об ошибке с помощью M-x report-emacs-bug. Этот код в frameset-move-onscreen проблема:

(pcase-let* ((`(,left ,top ,width ,height) (cl-cdadr (frame-monitor-attributes frame))) 
       (right (+ left width -1)) 
       ... 

В вашем случае (и это не атипичная), (frame-monitor-attributes frame) возвращает список, первый элемент nil, и который связан с left. Следующая привязка пытается связать right с номером (+ nil ...), что вызывает ошибку. Код frameset.el недостаточно прочен, чтобы иметь дело с значением nil для значения left, возвращаемого frame-monitor-onscreen (иначе frame-monitor-onscreen сам не должен возвращать nil в качестве элемента первого списка). Emacs Dev будет рад получить ваш отчет об ошибке.

+0

Спасибо - я добавил обратную ссылку на вопрос выше. У меня эта проблема в течение нескольких недель, и я регулярно обновляю git, чтобы проверить, не является ли это проблемой для разработчиков, но пока никаких изменений. –

0

Отказ от ответственности: Должен признаться, я не знаю Emacs хорошо. Должен признаться, я вообще не знаю LISP. В результате решение, которое я нашел для этой проблемы для моего личного использования, может быть как крайне невежественным, так и очень вероятным для получения непредсказуемых результатов.

Я использую терминал urxvt, и это, по-видимому, является источником проблемы. Версия GUI от Emacs не вызывала у меня никаких проблем в этом отношении.

Фактически я использовал приведенный выше ответ, чтобы определить проблемную область. Затем я закомментирована следующая строка (1005) в frameset.el.gz:

(frameset-move-onscreen frame force-onscreen) 

I байты скомпилированный файл в Emacs.Теперь он работает на все мое удовлетворение, и мне еще предстоит испытать (неизбежные) побочные эффекты.

Единственная причина, по которой я чувствовал, что разумно попробовать это (кроме отчаяния), было то, что цель, которую эта конкретная функция пыталась достичь, не казалась слишком актуальной для моей системы.

Смежные вопросы