Wrt Сосульки -
По большей части, Icicles составляет минибуфер завершения. Есть несколько случаев, когда он предлагает что-то для завершения в буфере (например, кода), но в основном это касается завершения минибуфера.
Когда большинство людей думает о завершении минибуфера, они думают о завершении имени файла, завершении имени буфера и имени команды. Но есть много больше к этому.
Как программист Emacs-Lisp, вы можете использовать завершение везде, где вы хотите предоставить пользователям выбор в интерактивном режиме. Это довольно общее!
Завершение действительно о сопоставлении с образцом для определения наборов , которыми вы затем можете манипулировать.
Большинство людей считают, что единственная цель завершения минибуфера - выбрать одно имя (файл, буфер, команда, переменная, ...). Но сила завершения в действительности заключается в том, чтобы фильтровать и, возможно, сортировать полный набор имен файлов, имен буферов и т. Д. Различными способами, а затем позволять пользователям что-то делать с или с полученным набором (необязательно один объект).
Вот что такое Сосульки : позволяя вам динамически (постепенно) определять наборы, используя сопоставление с шаблоном , а затем воздействовать на выбранные элементы или все элементы этих наборов.
Это не столько цель Ido или других пакетов завершения, за возможным исключением Helm (Anything) .
В отличие от Helm (Anything) , который дает объекту имена над типами объектов и действиями в качестве его начальной точки, в Сосульки вы обычно вызываете команда сделать что-то с одним или несколькими объектами данного типа (например, буферы), и затем вы сузите набор этих объектов, обычно путем сопоставления имен. В Сосульках часто бывает так, что вы можете воздействовать на эти объекты несколькими, но связанными способами в рамках одной команды.
В Шлем (Все, что угодно) , как правило, ваш ввод сначала сопоставляется по имени объекта со всей вселенной объектов всех типов, а затем вы сужаетесь, чтобы выбрать какую-то операцию. (s), чтобы выполнить.
Наконец, имейте в виду, что каждый из различных подходов к завершению предлагает как нечто (например, команды) для конечных пользователей, так и нечто (например, функции завершения) для программистов.
Если вы делаете завершение кода , тогда вы обычно просто хотите завершить имя в точке . Главное, что интересно в дополнении кода, это определение подходящих кандидатов. Для этого текстовый (например, кодовый) контекст, как правило, очень важен. Чтобы предложить разумный выбор, функция завершения должна анализировать контекст (код), включая любой охватывающий контекст (например, код проекта).
С другой стороны, завершение минибуфера можно использовать для любого выбора и действия, включая множественный выбор с несколькими действиями. Здесь интересны все части: какие кандидаты предложить, что с ними можно сделать и т. Д.
Не знаю, помогает ли это, но в любом случае это мой выбор.