vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
В связи с проблемой readline, которую хрен к чему прилинкуешь,
возникла мысль попробовать описать протокол, который должен поддерживаться программой, интерпретирующей некоторый входной язык программирования, для того,
чтобы этой программой можно было удобно пользоваться при посредстве внешней программы-редактора командной строки (вроде rlwrap).

Очевидно, что на самом деле программ, предоставляющий более удобный интерфейс к истории и языку может быть много разных. Кроме аналога rlwrap сразу напрашивается выполнение интерпретатора в буфере редактора (где совершенно не лишим будет менюшечный completion). Возможно, что информация, которая нужна для completion,
может быть использована и какой-нибудь неинтерактивной (ИИ) программой генерирующей выражения на входном языке, другой программы.

1. Должен поддерживаться ключик, переводящий stdin/stdout в line-buffered (или unuffered) режим несмотря на то что условие isatty(fileno(stdin)) не выполняется. Это позволит не расходовать ценный ресурс PTY (которым вынужден пользоваться rlwrap)

2. Должна поддерживаться команда, которая позволяет узнать, является ли данная строка завершенным высказыванием входного языка, которое можно отдавать на выполнение (аналог tcl-евского info complete)
3. Должна поддерживаться команда которая по паре "строка, позиция в строке" позволяет узнать как называется объект, который может стоять на этом месте в строке
(переменная, опция, таблица, поле etc).
Можно ограничиться передачей только строки, в предположении что имя должно начинаться там, где кончается строка.

4. По названию типа объекта и префиксу имени вернуть список всех имен подходящих объектов.

По-моему, поддержки такого протокола вполне хватить для того, чтобы реализовать полноценный completion в стиле лучших реализаций программ, испольузющих readline.
Да, естественно, что при выполнении условия 2, требование "команды 2, 3 и 4 можно подавать только тогда, когда интерпретатор ожидает выполнения команды" не является чрезмерным.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2025

S M T W T F S
    1 2 3
4 56 7 8 9 10
11 12 131415 1617
1819202122 2324
252627 28293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 30th, 2025 09:09 pm
Powered by Dreamwidth Studios