Делать другой вид завершения - PullRequest
1 голос
/ 10 августа 2011

Я пишу функцию, которая использует минибуфер и требует несколько иной стиль завершения, который может потребовать удаления некоторых символов. Например:

ar<tab> -> artist:
artist:ba<tab> -> artist:'Johann Sebastian Bach' 
artist:'Johann Sebastian Bach'<tab> -> artist:'Bela Bartók'
artist:'Bela Bartók' and album:<tab> 
etc...

Я уже написал функцию завершения, которая генерирует список возможных строк для текущего ввода, но я не могу использовать его с completing-read и completion-table-dynamic, потому что отображаются только альтернативы, которые не требуют удаления. В этом случае только первый шаг, от ar до artist .

Чтобы выполнить эту работу, я рассматриваю возможность использования нижнего уровня (read-from-minibuffer) с настраиваемой раскладкой клавиш для завершения и отображения альтернатив. Есть ли более простое решение? Если нет, какие функции предназначены для обработки отображаемого и циклического перемещения по буферу Завершения ?

Спасибо!


РЕДАКТИРОВАТЬ: В конце концов, я свернул свой собственный. Вот код , если кому-то интересно.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Да, Сосульки должны дать вам то, что вы хотите, IIUC.

Я не уверен, как вы справляетесь с такими вещами, как «исполнитель» и «альбом», но есть несколько способов, которыми Сосульки могут помочь.

  1. Вы можете сопоставлять части кандидата на прохождение в любом порядке. Поэтому, если 'foo' и 'bar' являются частями одного и того же кандидата, вы можете сопоставить любых кандидатов, у которых есть оба, в любом порядке. Это «прогрессивное завершение»: вы можете продолжать добавлять шаблоны, чтобы сузить выбор. Шаблоны AND. Вы также можете вычесть кандидатов, которые соответствуют шаблону.

  2. У вас могут быть кандидаты, которые являются «многократными». Они состоят из частей, разделенных настраиваемой строкой. Вы можете сравнивать против любой или всех частей. Так, например, кандидатом может быть название альбома плюс имена исполнителей.

  3. Если вы также используете Bookmark + , то вы можете пометить файлы, как метка la Delicious.com. Вам не нужно посещать файлы, чтобы пометить их. Тэги обычно являются строками (включая новые строки, если хотите), но они также могут иметь связанные значения Lisp. Здесь у вас может быть файл для каждого альбома и теги альбомов с описаниями и различными исполнителями. Затем вы можете завершить поиск данного файла альбома, сопоставив части его имени и / или исполнителей.

Для всех Сосульок завершения вы можете использовать прогрессивное завершение и дополнение (# 1). Для каждой части последовательности вы можете использовать сопоставление подстроки или регулярного выражения (или даже нечеткое сопоставление различных типов).

Некоторые ссылки, которые могут помочь:

1 голос
/ 11 августа 2011

Вы можете воспользоваться библиотекой Icicles . Он содержит много функций для улучшения завершения минибуфера.

...