Elisp: възможно е автоматично отваряне на Emacs init файл при грешка при стартиране?

Ето идеята: ако рестартирам Emacs, след като направих промяна в моя начален файл на Emacs, би било много удобно, ако в случай на грешка при стартиране, Emacs автоматично отвори моя начален файл за редактиране

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

Нов съм в 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 е вашият първоначален начален файл, а FILE е абсолютното име (т.е. местоположение) на вашия начален файл:

(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