Мелкие хитрости midnight commander
Опубликовано 18.06.2009
Из /usr/share/doc/mc/README.Debian:
- если в истории команд mc постоянно присутствуют строки вида cd "`printf "%b" '\0057home'`"
, убедитесь, что в переменной окружения HISTCONTROL
присутствует ignorespace или ignoreboth, или же эта переменная вообще отсутствует. Подробности в debian bug 440102.
- действие, с незапамятных времен выполнявшееся по кнопкам M-O (в противоположной панели отобразить путь в текущей панели), с 4.6.2-pre1 пор переехало на M-I, а на M-O теперь отображение в другой панели родительского каталога, или каталога, находящегося под курсором. Эргономично, да, но очень непривычно. Кстати, русскоязычная справка, вызываемая по F1, описывает старое поведение.
У нас есть несколько папок с однотипными объектами вида 1.1.1.1, 1.1.1.2, …, 1.1.1.10, 1.1.1.11, …, 1.4.3.5, 1.4.3.9, 1.4.3.10 …. Опытные разработчики уже, наверно, догадались, к чему я клоню :) При обычной алфавитно-цифровой сортировке 1.1.1.10 следует после 1.1.1.1, но до 1.1.1.2, что очень неприятно. У GNU-версии ls есть специальная опция -v, которая как раз выводит файлы в порядке возрастания версий. А в mc ничего похожего, увы, нет.
За 10 минут сделал патч, добавляющий вариант «сортировать файлы по версии» в меню выбора режима сортировки. К сожалению, простой правкой конфига тут обойтись не получилось, поэтому пришлось пересобрать пакет mc целиком — еще 40 минут, но оно того стоило :-)
Мегаполезной фичей вдруг оказалось пользовательское меню, которым я раньше почти никогда не пользовался (наверно, потому, что там ничего полезного не было — ну на кой мне «распаковать архив», если я то же самое сделаю тремя привычными способами). Прочитав раздел справки про mc.menu и добавив в ~/.mc/menu несколько строчек, я сэкономил себе кучу времени, тратившегося на бесконечные
vimdiff Alt-A Alt-Enter Tab Alt-A Alt-Enter Enter
и
diff -rubB Alt-A Tab Alt-A Enter
Этот код добавляет в меню две команды: сравнения двух каталогов и мержа файла в одном каталоге с одноименным файлом в другом каталоге:
d Compare directories if [ "%d" = "%D" ]; then whiptail --msgbox "The two directores must be different" 7 60 exit 1 fi diff -rubB "%d" "%D" | vim - # обычный непомеченный файл + t r & ! t t f Diff & merge file under cursor with the same file in other panel if [ "%d" = "%D" ]; then # если в противоположной панели открыта та же папка whiptail --msgbox "The two directores must be different" 7 60 exit 1 fi if [ ! -f "%D/%f" ] ; then # если в противоположной панели нет файла с таким же именем whiptail --msgbox "No copy of %f in %D" 7 60 exit 1 fi if diff -q "%D/%f" "%d/%f" ; then # если файлы не различаются whiptail --msgbox "%D/%f and %d/%f are identical" 10 80 exit 1 fi vimdiff "%d/%s" "%D"