Midnight Commander не восстанавливает активную панель
Если я перехожу по определённым путям в панелях MC, а затем выхожу из него, то при следующем запуске состояние той панели, в которой не было курсора в момент выхода, будет восстановлено, а панель где был курсор сбросится в домашнюю директорию.
Меня такое поведение дико раздражает! Это единственная причина, по которой я никак не могу приучить себя пользоваться данным менеджером. Кто вообще придумал, что за положением курсора нужно следить при выходе? В каких ситуациях и кому это может быть удобно!? Возможно ли это исправить, чтобы MC запоминал ОБЕ панели?
Ответы (1 шт):
Таких опций там не предусмотрено.
Дело в том, что в активной панели при запуске МС отображает не домашнюю директорию, а директорию в которой он запущен. Чтобы он открыл нужную директорию, необходимо запускать его из этой директории.
По комбинации клавиш Ctrl+\ откроется инструмент список "горячих" папок. В этот список можно добавить папки, которые часто используются. Это может упростить переходы по глубоким директориям.
Дальше навязывается вопрос: а зачем вообще выходить из MC?
Например, если вам нужно набрать длинную команду, или посмотреть результаты работы предыдущей команды, можно нажать Ctrl+O и потом с той же Ctrl+O вернуться обратно.
Если вы работаете удалённо, то имеет смысл использовать какой-нибудь мультиплексор. Самые распространённые - screen и tmux. При разрыве канала связи сессия остаётся. К ней можно "при-аттачиться", когда связь будет восстановлена. Соответственно, и MC сохранит своё состояние.
Если работаете удалённо с нестабильным каналом связи (с постоянными короткими разрывами), можно также использовать mosh. Он сохраняет состояние на клиенте так, что если случится разрыв, он сам переконнектится и приаттачится к сессии, а вы при этом можете где-нибудь в vim печатать свой код и даже не заметите разрыва.
В любом случае можно написать скрипт запуска, который будет запускать mc из нужной директории и потом отслеживать переходы по директориям через изменения в заголовке терминала.
И я всё же написал этот скрипт. Его можно сохранить по пути /usr/local/bin/mc. После добавления файла необходимо проверить чтобы в переменной $PATH папка /usr/local/bin стояла перед папкой /usr/bin. Если вы пользовались mc в терминале до этого, терминал можно закрыть и открыть новое окно терминала.
#!/bin/bash
MC_MODE="0"
MC_PATH=""
MC_TITLE=""
MC_CH0="" MC_CH1="" MC_CH2="" MC_CH3=""
MC_TSRART=$(echo -ne "\033")
MC_TEND=$(echo -ne "\007")
export MC_MODE MC_PATH MC_TITLE MC_CH0 MC_CH1 MC_CH2 MC_CH3 MC_TSTART MC_TEND
mkdir -p /tmp/mc-$USER
if [ -f /tmp/mc-$USER/last.path ]
then cd $(tail -1 /tmp/mc-$USER/last.path)
rm -f /tmp/mc-$USER/last.path
fi
/usr/bin/mc | while IFS="" read -r -N 1 CH
do
printf "%s" "$CH"
if [ "$MC_MODE" = "0" ]
then
MC_CH0="$MC_CH1"
MC_CH1="$MC_CH2"
MC_CH2="$MC_CH3"
MC_CH3="$CH"
if [ "$MC_CH0" = "$MC_TSRART" ] && [ "$MC_CH1" = "]" ] && [ "$MC_CH2" = "0" ] && [ "$MC_CH3" = ";" ]
then
MC_MODE=1
MC_TITLE=""
fi
else
if [ "$CH" = "$MC_TEND" ]
then
MC_MODE=0
MC_PATH=$(cut -d':' -f2- <<< "$MC_TITLE")
echo "$MC_PATH" > /tmp/mc-$USER/last.path
MC_CH0=""
MC_CH1=""
MC_CH2=""
MC_CH3=""
else
MC_TITLE="$MC_TITLE$CH"
fi
fi
done