Как я могу использовать клавиши истории вверх / вниз на консоли SWI-Prolog? - PullRequest
4 голосов
/ 27 февраля 2012

Когда я нажимаю вверх / вниз, я должен получить - как и unix - предыдущие команды, но вместо этого я получаю:

Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.0.0)
Copyright (c) 1990-2011 University of Amsterdam, VU Amsterdam
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
Please visit http://www.swi-prolog.org for details.

For help, use ?- help(Topic). or ?- apropos(Word).

1 ?- ['nc'].
% nc compiled into nc 0.00 sec, 84 clauses
true.

2 ?- listing.
true.

(я нажимаю клавишу со стрелкой «Вверх», чтобы вернуть команду «перечисление» .. затем ..)

3 ?- **^[[A**

Я скомпилирован из исходного кода без каких-либо дополнительных параметров 'configure' или 'make'.

В предыдущей версии swi-prolog я обнаружил, что это работает беспорядочно ... иногда консоль попадала в беспорядок, и мне приходилось нажимать '.' чтобы принудительно завершить текущую строку, история снова начнет работать.

Но эта последняя версия .. Нада .. Я использую Ubuntu Linux, Bash Shell. Это похоже на о.с. проблема среды или ошибка в swi-прологе. Клавиши со стрелками / история отлично работает на уровне Linux.

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Я не знаю, в частности, о swi-prolog, но я использовал rlwrap , чтобы решить эту проблему для других переводчиков, которые не имеют встроенных функций редактирования. Это очень просто в использовании; вы просто запустили команду rlwrap вместо того, чтобы запускать ее напрямую.

2 голосов
/ 23 февраля 2013

Вы должны установить пакет libreadline-dev на своем хосте перед компиляцией swiprolog, чтобы стрелки работали.

0 голосов
/ 01 марта 2012

На самом деле это не ответ, а скорее обходной путь, на тот случай, если у кого-то еще возникнет такая же проблема.

Хотя клавиши со стрелками «вверх / вниз» в версии 6.0.0 выглядят неработающими (и .1 - только что попробовал), «история на основе команд», похоже, работает нормально, поэтому можно восстановить предыдущуюкоманды таким образом.

например.

3 ?- !!.
listing.
true.

4 ?- L='fred', integer(L).
false.

5 ?- !!. 
L='fred', integer(L).
false.

6 ?- h.
    1   listing.
    2   listing.
    3   listing.
    4   L='fred', integer(L).
    5   L='fred', integer(L).
6 ?- !3.
listing.
true.
...