Изменения

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

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

2415 байтов добавлено, 22:43, 28 ноября 2009
м
Нет описания правки
Многие наверняка пользуются, а многие другие — знают о существовании такой вещи, как [http://www.midnight-commander.org/ GNU Midnight Commander], он же «'''mc'''». Также все, конечно, понимают, что Midnight Commander — преемник «[[wikipedia:Norton Commander|Нортона]]», известного всем ещё со времён DOS. '''mc''', как и «нортон», имеет встроенный редактор — '''mcedit''', которому я обязан большей частью своего кода (пишу я в нём). :-)
 
Данная страница содержит описание уже устаревших (вместе с появлением версии mc 4.7.0) патчей для поддержки Perl-совместимых регулярных выражений в '''Midnight Commander'''.
 
== MC 4.7.0 ==
 
<font color="red">'''Внимание!'''</font> Начиная с версии 4.7.0 (например, её пререлиза) Midnight Commander сам по себе поддерживает Perl-совместимые регулярные выражения и отрефакторенный в лучшую сторону диалог поиска-замены. Единственные 2 момента: пока что <tt>mc</tt> некорректно работает с символами в кодировке UTF-8 и вместо библиотеки PCRE по умолчанию использует [[rupedia:Glib|Glib]]. Она-то, кстати, как раз и не умеет корректно работать с UTF-8. Для исправления этих небольших недостатков, а также включения сборки Samba-плагина в Debian-версии <tt>mc 4.7.0-pre1-3</tt> можно воспользоваться небольшим патчиком <tt>[http://vmx.yourcmc.ru/mc-pcre/mc-4.7.0-pre1-3-minor.patch mc-4.7.0-pre1-3-minor.patch]</tt>.
== Лирическое отступление ==
«Для бедных» есть, конечно, [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) в оригинале туговато(до 4.7.0). Будучи [[Perl]]-программистом, я испытываю отвращение при одном виде классических регулярных выражений POSIX: не умеют они… можно сказать, ничего. Довольно мистическая опция «выражение scanf» отвращения только добавляет. Поэтому с пунктом 2) миднайту пришлось помогать…
== Реализация ==
Сами изменения заключаются в том, что с ними <tt>mc</tt> в просмотрщике и редакторе вместо POSIX-регэкспов использует PCRE, что больше нету опции «выражение scanf» и необходимости ввода порядка аргументов замены, а при выборе в диалоге замены опции «регулярное выражение» строка замены может включать в себя подстановки $& = $0 = ${&} (вся найденная строка), $1 = ${1} .. $63 = ${63} (захваченные скобочками совпадения), \$ (экранированный в C-стиле символ '$'), а также стандартные escape-последовательности \n, \r, \t, \v, \b, \f и \a. Все эти возможности успешно работают как с однобайтными кодировками, так и с UTF-8, и даже регистронезависимость во втором случае учитывается корректно, относительно всех алфавитов мира сразу. :-)
== MC Итак, на данной странице, кроме описания благородной цели запатчить Midnight Commander для поддержки PCRE, :-) есть и сами патчи — для версий 4.76.1-6 (Debian '''Etch'''), 4.6.2~git20080311 (Debian '''Lenny'''), и 4.6.2-2 (Debian '''Sid'''). Для других дистрибутивов патчей, увы, нет. Связано это, в первую очередь, с тем, что Debian включает в себя вагон и маленькую тележку патчей для mc, дающих возможность нормально работать в UTF-кодировках, исправляющих различные ошибки, и т. д. и т. п. Если вы перенесёте мои патчи под другие версии mc или под другие дистрибутивы GNU/Linux (а может, и не ГНУ, а может, и не Linux) — я буду счастлив выложить на данной странице и их тоже.0 ==
Чтобы накатить любой из данных патчей на соответствующую версию mc и собрать бинарный deb-пакет с этой модифицированной версией, нужно выполнить следующие команды: <font colorsource lang="red"bash>apt-get source mccd mc-ВЕРСИЯdebian/rules apply-patchespatch -p1 < mc-ВЕРСИЯ-pcre-patched.patchtouch debian/stamp-patchedtouch debian/stamp-pre-buildsudo debian/rules binary</source> То есть, данный патч должен накатываться ''после'Внимание!'''</font> Начиная с версии 4всех патчей Debian.7.0 (напримерКстати, её пререлиза) Midnight Commander сам по себе поддерживает Perl-совместимые регулярные выражения и отрефакторенный в лучшую сторону диалог поиска-замены. Единственные 2 момента: пока что последней команде фигурирует не <tt>mcfakeroot</tt> некорректно работает с символами в кодировке UTF-8 и вместо библиотеки PCRE по умолчанию использует [[rupedia:Glib|Glib]]. Она-то, кстати, как раз и не умеет корректно работать с UTF-8. Для исправления этих небольших недостатков, а также включения сборки Samba-плагина в Debian-версии <tt>mc 4.7.0-pre1-3sudo</tt> можно воспользоваться небольшим патчиком , по той простой причине, что некоторые версии пакета в процессе сборки чего-то шаманят с CVS, несовместимое с <tt>[http://vmx.yourcmc.ru/mc-pcre/mc-4.7.0-pre1-3-minor.patch mc-4.7.0-pre1-3-minor.patch]fakeroot</tt>.
== Файлы ==

Навигация