2017-02-07 27 views
2

Я новичок в использовании emacs и настройке.ediprolog on emacs странное поведение

Я пытаюсь установить ediprolog

Мой .emacs файл является:

custom-set-variables 
;; custom-set-variables was added by Custom. 
;; If you edit it by hand, you could mess it up, so be careful. 
;; Your init file should contain only one such instance. 
;; If there is more than one, they won't work right. 
'(inhibit-startup-screen t)) 
(custom-set-faces 
;; custom-set-faces was added by Custom. 
;; If you edit it by hand, you could mess it up, so be careful. 
;; Your init file should contain only one such instance. 
;; If there is more than one, they won't work right. 
) 

(global-set-key [f10] 'ediprolog-dwim) 

(setq load-path (cons "/home/sam/Documents/emacs/prolog" load-path)) 
(autoload 'run-prolog "prolog" "Start a Prolog sub-process." t) 
(autoload 'prolog-mode "prolog" "Major mode for editing Prolog programs." t) 
(autoload 'mercury-mode "prolog" "Major mode for editing Mercury programs." t) 
(setq prolog-system 'swi) 
(setq auto-mode-alist (append '(("\\.pl\\'" . prolog-mode) 
           ("\\.m\\'" . mercury-mode)) 
           auto-mode-alist)) 

Я установил ediprolog с M-x package-install RET ediprolog RET

Я создал тестовый файл с %?- member(X,[a,b,c]). Если я нажимаю F10 и space space space когда по этому запросу я получаю следующий вывод:

%?- member(X,[a,b,c]). 
%@ member(X,[a,b,c]^H^H^H^H^H^H^H[a,b,c])^H^H^H^H^H^H^H^H^H^H^H(X,[a,b,c]).^M 
%@ X = a ;^M 
%@ X = b ;^M 
%@ X = c.^M 
%@^M 

Это явно не правильно, поскольку у меня есть все эти дополнительные ^H и ^M символов.

Кроме того, если добавить строку (require 'ediprolog) к моему .emacs в соответствии с инструкциями я получаю следующее сообщение об ошибке на начиная Emacs:

Warning (initialization): An error occurred while loading `/home/sam/.emacs': 

File error: Cannot open load file, no such file or directory, ediprolog 

To ensure normal operation, you should investigate and remove the 
cause of the error in your initialization file. Start Emacs with 
the `--debug-init' option to view a complete error backtrace. 

Я также следовали инструкциям на https://bruda.ca/emacs/prolog-mode_installation_guide установить пролога-режим, если это имеет значение ,

+0

Боковой вопрос: Почему вы используете '/ home/sam/Documents/emacs/prolog', а не полагаетесь на пролог-режим, который встроен в Emacs? – Stefan

+0

Вам может потребоваться «M-x report-emacs-bug RET» с запросом ediprolog для обработки новых escape-последовательностей, используемых в последних версиях SWI-Prolog. – Stefan

+1

Я выполнил следующие инструкции: http://www.swi-prolog.org/FAQ/GnuEmacs.html, которые рекомендовали использовать эту версию. – user27815

ответ

2

Это вызвано недавним переключателе SWI-Prolog к библиотеке editline, в то время как ранее использовали Readline по умолчанию.

Вопрос теперь разрешен.

SWI-Prolog 7.5.1 и более поздние версии содержат change, которые делают работу ediprolog, не требуя каких-либо обновлений или изменений конфигурации Emacs или ediprolog.

Также предстоящая стабильная версия (7.4) SWI-Prolog поставляется с этим изменением.

Таким образом, эта проблема затрагивает только очень мало версий (в частности, 7.5.0 и 7.4-rc1).


Если вы используете версию SWI-Prolog, где эта проблема проявляется, здесь возможны обходные пути:

Один из способов решить эту проблему, чтобы положить его в вашем файле ~/.swiplrc инициализации:

 
:- set_prolog_flag(readline, readline). 

Это должно дать рабочую ediprolog, если вы установили readline.

Кроме того, вы также можете поместить:

 
:- set_prolog_flag(readline, false). 

в файле ~/.swiplrc инициализации. Тем не менее, это полностью отключает средства редактирования строк SWI-Prolog также, если вы вызываете его на системном терминале. Вы можете, конечно, использовать -f none, чтобы игнорировать файл инициализации в таких случаях.

В качестве альтернативы, вы можете также поместить следующее в вашем .emacs:

 
(setq ediprolog-program-switches '("-g" "set_prolog_flag(readline, false)")) 

Если ваша версия SWI-Prolog достаточно недавно, эти обходные пути больше не нужны.

1

Для проблемы с (require 'ediprolog) вам просто нужно добавить (package-initialize) ранее в вашем ~/.emacs (недавний Emacsen сделает это за вас). Но поскольку вы установили его из ELPA, вам не нужно явно указывать require: ediprolog-dwim должен автозагружаться для вас в любом случае.