Изменения

Перейти к: навигация, поиск

Поддержка PCRE в Midnight Commander

7896 байтов добавлено, 12:03, 13 июля 2009
Новая: Многие наверняка пользуются, а многие другие — знают о существовании такой вещи, как [http://www.midnight-commande...
Многие наверняка пользуются, а многие другие — знают о существовании такой вещи, как [http://www.midnight-commander.org/ GNU Midnight Commander], он же «'''mc'''». Также все, конечно, понимают, что Midnight Commander — преемник «[[wikipedia:Norton Commander|Нортона]]», известного всем ещё со времён DOS. '''mc''', как и «нортон», имеет встроенный редактор — '''mcedit''', которому я обязан большей частью своего кода (пишу я в нём). :-)

== Лирическое отступление ==

Вы (в особенности если вы — «аналитики [http://linux.org.ru/ ЛОРа]» (c)), наверное, скажете, что mc — отстой, а mcedit — отстой вдвойне, что рулит [http://www.vim.org/ vim], [http://www.gnu.org/software/emacs/ emacs] или, не дай бог, ''nano'' какое-нибудь. Так вот, на это я сразу отвечу, что они, может, и рулят, но сделаны не людьми для людей, а извращенцами для извращенцев, и без траха-допиливания пользоваться ими невозможно.

Всё-таки удобно, не мучаясь, выходить из редактора по Alt-F4 или F10, переключать кодировки через пункты меню и горячие клавиши, вкладки закрывать по Ctrl-W, не вникать в понятия «буфера», в LISP и прочие радости. Если кто-то не понял, о чём я — напомню, что попадая в '''vim''', сталкиваешься с серьёзным challenge’м, а точнее задачей: ''выйти из vim’а''. Это удаётся не сразу. В конце концов, конечно, понимаешь, что нужно набрать <esc>, :q!, <enter>. Аналогично при необходимости переключить кодировку — конечно, команда <esc>, «:e ++enc=cp1251», <enter> в конце концов будет найдена и, возможно, даже освоена, но … Да, кстати, она к тому же ещё и файл заново открывает.

«Для бедных» есть, конечно, [http://cream.sourceforge.net/ cream] (набор макросов для vim’а) — и выглядит, и работает он куда логичнее, но всё-таки то, что он является именно набором макросов, провоцирует кучу весьма неприятных мелких багов: не работают быстрые клавиши в русской раскладке, окно почему-то на весь экран не разворачивается, при каждом запуске кроме того становясь меньше на пару строк, и т. п. И уж конечно, ощущения «гладкости», которое появляется при работе, например, в emEditor-е под виндой, или даже просто в консоли, нет совсем. Про emacs и говорить нечего. Оно расшифровывается как «editing macros» и действительно представляет собой один большой макрос… на Common LISP’е, который, вопреки распространённому мнению, совсем не функциональный язык программирования. В emacs даже есть встроенный психотерапевт… Для тех кто не знает — напомню: это не шутка, а реальная «фича» емакса — в нём есть эмулятор психотерапевта. Сомневаетесь? Введите <alt>-x doctor <enter>. Если хотите — да, меня укусила и заразила винда, но всё равно обычный, нормальный, редактор со вкладочками, менюшками и шорткатами для меня удобнее.

''Именно по той причине, что мне хочется иметь простой удобный редактор, я и использую mcedit.'' Другими моими требованиями к редактору являются:
# подсветка синтаксиса,
# регулярные выражения,
# вкладки,
# различные кодировки, и желательно:
# возможность выделения вертикального блока.

1) и 5) '''mcedit''' умеет и без меня, 3) и 4) решаются использованием [http://konsole.kde.org/ Konsole], а вот с 2) в оригинале туговато. Будучи [[Perl]]-программистом, я испытываю отвращение при одном виде классических регулярных выражений POSIX: не умеют они… можно сказать, ничего. Довольно мистическая опция «выражение scanf» отвращения только добавляет. Поэтому с пунктом 2) миднайту пришлось помогать…

== Реализация ==

…используя библиотеку [http://www.pcre.org/ PCRE], что означает «Perl-Compatible Regular Expressions» — «Perl-совместимые регулярные выражения». Для тех, кто вообще не знаком с регулярными выражениями Perl, советую почитать страницу [http://perldoc.perl.org/perlre.html man 1 perlre], а также поинтересоваться сайтом [http://www.pcre.ru/ pcre.ru]. Если вкратце, то регулярные выражения — это очень удобный и эффективный инструмент поиска, извлечения и замены информации в тексте.

Сами изменения заключаются в том, что с ними '''mc''' в просмотрщике и редакторе вместо POSIX-регэкспов использует PCRE, что больше нету опции «выражение scanf» и необходимости ввода порядка аргументов замены, а при выборе в диалоге замены опции «регулярное выражение» строка замены может включать в себя подстановки $& = $0 = ${&} (вся найденная строка), $1 = ${1} .. $63 = ${63} (захваченные скобочками совпадения), \$ (экранированный в C-стиле символ '$'), а также стандартные escape-последовательности \n, \r, \t, \v, \b, \f и \a. Все эти возможности успешно работают как с однобайтными кодировками, так и с UTF-8, и даже регистронезависимость во втором случае учитывается корректно, относительно всех алфавитов мира сразу. :-)

== Файлы ==

Скачать патчи и готовые пакеты можно по адресу <ref>http://vmx.yourcmc.ru/mc-pcre/</ref>.

Навигация