[ Content | View menu ]

Мелкие хитрости 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"
«
»

0 комментариев

Write a comment - TrackBack - RSS Comments

Write comment

Я не робот.