Elisp: возможно ли автоматически открыть файл инициализации Emacs в случае ошибки при запуске?

Вот идея: если я перезапущу Emacs после внесения изменений в свой файл инициализации Emacs, было бы очень удобно, если бы в случае ошибки при запуске Emacs автоматически открывал мой файл инициализации для редактирования.

Например, если при запуске произошла ошибка, Emacs может показать сообщение об ошибке / отладке в одном окне, а мой файл инициализации - в другом.

Я новичок в Emacs Lisp и не знаком с процедурами обработки ошибок. Существуют ли какие-либо механизмы / настройки обработки ошибок, которые могут быть полезны? (Честно говоря, я не уверен, с чего начать с этого, отсюда и отсутствие экспериментального кода в этом посте ...)


person iceman    schedule 27.10.2014    source источник
comment
Я бы порекомендовал начать с размещения этого в начале вашего .emacs файла: (setq debug-on-error t) После того, как вы исправите свою проблему, вы можете снова прокомментировать ее, пока она не понадобится. error останавливает Emacs, поэтому то, что вы ищете, потребовало бы переопределения функции сигнала ошибки, чтобы сделать что-то еще, прежде чем завершить работу какой-либо функции.   -  person lawlist    schedule 28.10.2014
comment
lawlist - можете ли вы превратить свой пост в ответ, чтобы я мог его принять? Благодарность   -  person iceman    schedule 01.11.2014
comment
на самом деле, я только что увидел ответ Дрю ниже. его ответ включает реализацию метода, который вы предлагаете, поэтому, вероятно, будет хорошо, если будущие посетители будут перенаправлены на этот пост.   -  person iceman    schedule 01.11.2014


Ответы (2)


Если вы действительно хотите это сделать, вы можете попробовать следующее:

Оберните сюда содержимое вашего файла инициализации, где CONTENTS - это ваш исходный файл инициализации, а ФАЙЛ - это абсолютное имя (то есть местоположение) вашего файла инициализации:

(condition-case err
     (progn
        (setq debug-on-error  t)
        CONTENTS
     )
  (error (find-file FILE)
         (error "*INIT ERROR*: %s" (error-message-string err))))

Или, может быть, немного лучше: поместите то, что находится в вашем файле инициализации, сейчас в другой файл - здесь называется ORIG-INIT (опять же, абсолютное имя файла), и используйте его как (единственное) содержимое вашего файла инициализации:

(condition-case err
     (progn (setq debug-on-error  t)
            (load-file ORIG-INIT))
  (error (find-file ORIG-INIT)
         (error "*INIT ERROR*: %s" (error-message-string err))))
person Drew    schedule 28.10.2014

На самом деле, у меня обычно один emacs открыт с файлом .emacs. Затем я открываю и закрываю новый emacs каждый раз, когда вносил изменения. Не так круто, я знаю, но тогда даже курсор будет там, где вы работали.

Еще одно, что я делаю, - это просто редактирую фрагмент кода в буфере отходов (царапина или вновь созданный временный файл) и выполняю его с помощью C-x C-e (стоя в конце выражения).

person Mary Bergman    schedule 28.10.2014