Emacs — dict + dictem или словари в Emacs
Словари я люблю, уверена, что их должно быть много, и все "на кончиках пальцев". Дабы легко уяснять, что означает конкретное слово, или как это будет на другом языке, или какие есть синонимы, или что ещё мне будет актуально... И обо всём этом не хотелось бы задумываться, просто делать.
Как любителю и пользователю Emacs мне приглянулось сочетание dictd + dict + dictem. Удобнее всего обращаться к словарям и группам словарей, когда можно не отрываться от текстописания и любимого редактора.
Про установку я почти ничего не могу сказать - в моём дебиане всё в репозитории, соответственно
1 |
|
Нужны и собственно словари. Весьма интересный набор их можно скачать с http://dict.mova.org/. В репозиториях дебиан есть dict-de-en, dict-devil, dict-elements, dict-foldoc, dict-gcide, dict-jargon, dict-stardic, dict-vera, dict-wn, dict-xdict, mueller7-dict, mueller7accent-dict. У кого другие дистрибутивы, могут всё равно найти эти словари с описаниями на http://www.debian.org/distrib/packages#search_packages, и скачать. Есть заметное количество freedict-овских словарей, и в дебиановском репозитории, и на http://www.freedict.org/ru/, кому что удобнее. Чуточка есть тут: ftp://ftp.dvo.ru/pub/dict/.
Ещё словари можно делать самостоятельно, но об этом как-нибудь в другой раз.
Место для словарей по умолчанию - /usr/share/dictd/. Что стоит помнить при обновлении словарей: работающий dictd словари сам не подхватывает. Надо просто перезапустить его или последовать совету из мана: сначала отправьте dictd-у сигнал SIGUSR1, чтобы dictd выгрузил словари из памяти, потом обновите файлы и отправьте dictd-у сигнал SIGHUP, чтобы загрузить их снова.
Если словарь новый, а не обновление существовавшего, то до перезапуска надо ещё и dictdconfig -w запускать - чтоб dictd словарь вообще заметил. Впрочем, в дебиане при установке из репозитория это делается автоматически.
Хорошо, теперь всё есть и всё сделано, что дальше? Можно поинтересоваться свойствами нашего сервера словарей. Можно сразу искать слова в консоли, для этого у нас dict.
Что касается свойств, интересно вот что:
-
dict --strats сообщит, какие стратегии поиска можно использовать. У меня это
- exact - точное совпадение с заголовком словарной статьи.
- prefix - совпадение префикса, то есть совпадение с началом заголовка.
- nprefix - раньше не понимала и не использовала, но от написания статей есть польза пишущему. :) Запрос пишется так: skip#count#string, где skip и count - натуральные числа. Тогда результатом будут максимум count совпадений начала заголовка со строкой string, не считая первых skip из них, которые будут пропущены. Это из каждого словаря, который спросили.
- substring - совпадение подстроки где угодно в заголовке.
- suffix - совпадение суффикса, то есть совпадение с концом заголовка.
- re - POSIX 1003.2 ("современные") регекспы. См. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04.
- regexp - "старые" регекспы. См. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03
- soundex - будет искать подобное по звучанию.
- lev - найдёт слова, которые отличаются на одну "правку" (вставка, удаление или перестановка буквы).
- word - найдёт совпадение с любым словом заголовка.
- first - только совпадение с первым словом.
- last - только совпадение с последним словом.
- dict --dbs скажет, как наши словари зовутся на взгляд dictd. Это нам пригодится. Во-первых, можно прямо из консоли просить ответа лично у знакомого словаря. А во-вторых, мы собирались настроить dictem.
Что касается поиска слов непосредственно из консоли через dict, то советую обратить внимание на ключики
- -d dbname или --database dbname
Cпособ обратиться к конкретному словарю, а не просить результаты сразу из всех. - -m или --match
Выдаст только сами совпадения, словарных статей к ним печатать не будет. Удобно, когда хочется узнать, что вы получите по своему запросу, когда ищете по подстрокам или при помощи регулярных выражений. - -s strategy или --strategy strategy
Будет искать заданным способом (из списка, который мы посмотрели выше) - -C или --nocorrect
Не пытаться угадать, что мы могли на самом деле искать, если вдруг результатов нет. Когда ключ не указан, предлагается список похожих слов.
Теперь про dictem. Что нужно добавить в ваш конфиг emacs, чтоб это счастье заработало.
Во-первых, затребовать сам dictem.
1 |
|
Теперь,тоже по желанию, самое приятное - подборки словарей, как бы "виртуальные словари". Имена словарей в подборке берём из списка, полученного по результатам dict --dbs, имена подборок - на ваш вкус, только лучше как-то отличать от обычных.
Например:
Если у вас уже уймища словарей, и их вы видеть в *Completitions* вообще не желаете, а хотите видеть исключительно вот такие "виртуальные", то ваше счастье с вами:
1 |
|
Разумеется, это не всё, что можно настроить, но самое нужное на мой вкус. Приятного пользования! :)
UPD. Немного дополнила пост сведениями из комментариев.
Простите мою нескромность. Вы замужем? <3
PS: За статью спасибо. Люблю хаки Emacs'а =)
Впрочем, плюсик поставила :)
Если что-то не так, не надо стесняться обращаться за помощью или с вопросами.
Апстрим и для dictd и для dictem добрый ;-)
- Basic Regular Expressions
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03
-Extended Regular Expressions
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04
BRE: sed, grep, ed
ERE: awk, sed -E (BSD), grep -E, ed -E
Других примеров вагон, найдете сами, я думаю.
BTW. Не стоит забывать, что dictem умеет постобрабатывать контент, например так.
http://mova.org/~cheusov/pub/screenshots/dictem/
http://dict6ot.appspot.com/servers
С dict/dictd до этого не сталкивался, но для себя сделал некоторые выводы:
1. Т.к. работаю на нескольких машинках, dictd надо запускать на отдельном хосте с собственным набором словарей, дабы не копировать их на каждую. У dict.mova.org очень богатый выбор, настроил dict на работу с этим хостом на первое время.
2. Не хватает работы с фразами: выделил регион, вызвал функцию, а она тебе перевод. Было что-то подобное запакетировано в ELPA для работы с другими сервисами. Понятно, что данный протокол не преследует эту цель. Потому буду думать дальше.
3. Потребовалось чуточку доработать работу с буферами, часто использую разделение фрейма емакса на несколько окон, потому добавил следующий код в конфиги: