LINUX.ORG.RU

Как заставить MC запоминать свое место без мусора?

 


1

1

Не помню уже, как в других диструбуутивах, но в Debian сборщик(и) mc на редкость ленивые и на заботятся об удобстве его пользователей.
Иначе давно бы сделали так, чтобы mc при выходе запоминал каталог, в котором в этот момент находился.

Поэтому начиная где-то с «восьмерки» был вынужден выкручиваться извращенным способом - добавляя в конфиг ~/.bashrc эдакую экзотическую строку:

. /usr/lib/mc/mc.sh
Однако начиная с какой-то минорной версии «десятки» неутомимые разработчики похерили и эту возможность.
Вернее, сама она осталась, но лог .bash_history стал постоянно засираться бесконечными фрагментами вроде этого -
 PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'pwd>&8;kill -STOP $$'
 cd "`printf '%b' '\0057home'`"
 cd "`printf '%b' '\0057'`"
 cd "`printf '%b' '\0057media'`"
 cd "`printf '%b' '\0057media\0057chukcha'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB'`"
 cd "`printf '%b' '\0057media\0057chukcha'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB'`"
 cd "`printf '%b' '\0057media\0057chukcha'`"
 cd "`printf '%b' '\0057media'`"
 cd "`printf '%b' '\0057'`"
 cd "`printf '%b' '\0057home'`"
 cd "`printf '%b' '\0057home\0057chukcha'`"
 cd "`printf '%b' '\0057home\0057chukcha\0057SOFT'`"
 cd "`printf '%b' '\0057home\0057chukcha\0057SOFT\00571\0056\0040LINUX'`"
 cd "`printf '%b' '\0057home\0057chukcha\0057SOFT\00571\0056\0040LINUX\0057Soft'`"
 cd "`printf '%b' '\0057home\0057chukcha\0057SOFT\00571\0056\0040LINUX'`"
 cd "`printf '%b' '\0057home\0057chukcha\0057SOFT\00571\0056\0040LINUX\00575\0056\0040Server'`"
 cd "`printf '%b' '\0057home\0057chukcha\0057SOFT\00571\0056\0040LINUX\00575\0056\0040Server\0057Soft'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB\0057ANSYS'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB\0057Soft'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB'`"
 cd "`printf '%b' '\0057media\0057chukcha\0057FLASH\004032\0040GB\0057ANSYS'`"

Может, появилась другая нормальная возможность заставить MC запоминать свое место, без этой срани?

★★★★★

Последнее исправление: chukcha (всего исправлений: 1)

Не похоже, что штатно такое есть.

Вот что говорится в man (mc 4.8.26):

       Если в командной строке указаны два каталога, первый будет отображаться в активной панели,
       второй - в другой панели.

       Если  указан  только  один каталог, он будет отображён в активной панели, во второй панели
       будет отображён каталог, указанный в параметре "other_dir" в файле panels.ini.

       Если каталоги не указаны, в активной панели будет отображён текущий каталог, а  во  второй
       панели - каталог, указанный в параметре "other_dir" в файле panels.ini.

Но об открытии каталогов из предыдущтх запусков речи не идёт.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от apt_install_lrzsz

Об том и речь! Давным-давно, когда земля была еще квадратная, такой проблемы еще не было.
И емнип, это было в Федоре, когда при выходе из mc текущим становился каталог, в котором отображалась одна из его панелей.
А теперь, когда Дебианом занялись «эффективные менеджеры», проблема появилась.

Ладно я. чукча, но неужели и вы, всезнающие, терпите это вопиющее безобразие?

Кстати вот, оказывается до сих пор вопрос толком не решен

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)
Ответ на: комментарий от chukcha

А теперь, когда Дебианом занялись «эффективные менеджеры», проблема появилась.

Ну бред же. Еще курс доллара из-за них вырос и упали надои, ага.

ololoid ★★★★
()
Ответ на: комментарий от ololoid

всё правильно написал. Раньше такое поведение в mc было по умолчанию. И это было удобно. А сейчас приходится по истории бегать...

Sahas ★★★★☆
()
Ответ на: комментарий от ololoid

И кстати, раньше при выходе из mc текущий каталог не менялся, а теперь сбрасывается на тот, откуда mc запускали...

Sahas ★★★★☆
()

напиши свою обертку, и не парься, если с дистрибутивными что-то не так. вот тебе для примера

function mc ()
{
    MC=/tmp/mc$$-"$RANDOM"
    export RUN_MC=1
    [[ -n $DISPLAY ]] && ARGS="-x"
    /usr/bin/mc -S ${MCSKIN:-default} -P $MC $ARGS "$@"
    if [[ -e $MC ]]; then
        cd "$(< $MC)" &> /dev/null
        rm -f "$MC"
    fi
    unset MC RUN_MC
}
ananas ★★★★★
()

Как заставить MC запоминать свое место без мусора?

«Знай свое место, пес!» (с)

slackwarrior ★★★★★
()
Ответ на: комментарий от ananas

ananas
Что-то подобное уже видел, например, здесь
Но этот «рецепт» изумил свой сложностью - из-за такой мелочи городить такой огород??

Поэтому взял последний из рецептов, о котором человек написал так -

Остальные ответы хороши, но я чувствую, что они неудовлетворительны.
Вот мое решение, которое я считаю самым простым:
Поместите эту строку в свой ~/.profile

alias mc='source /usr/lib/mc/mc-wrapper.sh'

- ни хрена оно не работает :-(

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

ты не поверишь, но это же действие выполняется и твоим . /usr/lib/mc/mc.sh - там просто прописан этот-же алиас на этот-же врапер. и если у тебя в дистре что-то сломано - сделай свой, а не надейся на дистрибутивный

ananas ★★★★★
()
Ответ на: комментарий от chukcha

Рецепт не сложный, и это не мелочь. Когда ты запускаешь mc, он запускается новым процессом, все изменения cwd делаются в нём. Шелл, из которого ты его запустил, просто ждёт пока он завершится, про изменения cwd он не в курсе и не может быть в курсе, если не наставить костылей. Чтобы сменить cwd в шелле, надо выполнить (после завершения mc) команду cd в шелле, от имени шелла, в о место где был mc перед выходом. Все эти обёртки занимаются как раз тем, что организуют отправку этого пути из mc в родительский шелл и выполнение в родительском шелле cd.

Поведение «оставлять текущую директорию» именно по-дефолту было только в досе, где она была одна на всю систему, а не на процесс.

firkax ★★★★★
()
Ответ на: комментарий от firkax

firkax

Поведение «оставлять текущую директорию» именно по-дефолту было только в досе,

Шутите? :-) В других сборках дистрибутивов Linux не сталкивался с такой проблемой, Debian это первый.

К тому же в ранних Debian такой проблемы не было, и люди здесь вам это тоже подтверждают.
И я тоже такое помню. Если не верите - поставьте «семерку», а может и «восьмерку», и сами убедитесь в этом.
Просто сборщики mc живут в каком-то своем мире, и им пополам, с какими неудобствами сталкиваются его пользователи.
То цвета сломают, то еще какую-то хрень выкинут.
Ну вот нафига трогать то, что уже отлажено и нормально работает?? Не сборщики, а школота какая-то.

Кмк, самое эффективное решение - хором пинать этих сборщиков до их посинения, пока они не вернут эту полезную фичу.

Я бы сам написал багрипорт, но только по-русски, и они его наверняка проигнорируют.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

М-даааа....

2007 год: Мусор в истории .bash_history после работы MC
2008 год: mc, история команд, мусор
2012 год: «мусор» в терминале после закрытия mc

Вы правы - это не «эффективные менеджеры», а просто засранцы.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Согласен, нехорошо это. Но конкретно я редко использую mc, вот и не замечаю неудобства.

Но в дебиане ж всё стабильно. Если ранее это было стабильно не настроено, то и дальше стабильно не будет настроено, пока критическая масса майнтейнеров бунтовать не начнёт.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от chukcha

Шутите? :-) В других сборках дистрибутивов Linux не сталкивался с такой проблемой, Debian это первый.

Нет, не шучу. Тут дело не в плохом mc, а в мультипроцессных механизмах линукса (да и других современных ОС) вообще. cwd у каждого процесса свой, и сам собой он в родительском шелле измениться не может.

Если где-то оно работало - значит там просто костыли шли в комплекте с пакетом, по-другому быть не может (ну, без пропатчивания ядра, теоретически то можно придумать дополнительное нестандартное апи для запроса действия «забрать cwd у чайлда по завершению» или «синхронизировать cwd с чайлдом»).

К тому же в ранних Debian такой проблемы не было, и люди здесь вам это тоже подтверждают.
И я тоже такое помню. Если не верите - поставьте «семерку», а может и «восьмерку», и сами убедитесь в этом.

Пользуюсь дебианом с 5 версии (сейчас на одном компе 7 стоит до сих пор), нигде не было такого что после выхода из mc в шелле появлялось переключённое cwd. Но я в этом никогда не видел чего-то плохого, по-моему это как раз логично (причины см. выше), а костыли я не люблю. Вобщем-то даже с пользой это применял.

То цвета сломают,

А это убунтопроблемы вообще.

Просто сборщики mc живут в каком-то своем мире

У mc есть ряд проблем, но вобщем-то они скорее от разработчиков идут а не от сборщиков. Как-то пытался в нём кое-что запатчить - в исходниках очень сложно разобраться оказалось, там наслоения древнего кода разных времён друг на друге.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 4)
Ответ на: комментарий от firkax

Пора делать neomc с удалением или переписыванием старого кода на rust.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от firkax

Если MC после выхода не возвращается в текущий каталог, то приходится табиком клацать, пока доберешься после него.
И хотя делаю это довольно быстро, но жутко раздражает, потому что сбивает с основной мысли, и все равно теряется время, хоть и небольшое.

Как-то пытался в нём кое-что запатчить - в исходниках очень сложно разобраться оказалось, там наслоения древнего кода разных времён друг на друге.

Случаем, не вы были в команде наших ребят, которые решили его развивать MC после его забвения основными разработчиками? ;)
В этой команде, помнится, был Слава из Беларуси.
Дело пошло бойко, но потом основные разработчики вышли из анабиоза и начали продвигать дальше, и наша команда распалась.

Что до замшелого дряхлого кода, это уж точно. До сих по НИКТО НЕ СУМЕЛ устранить древний косяк, когда в командной строке внезапно появляется какая-то непонятная хрень, которую приходиться бекспейсить.
И хотя все знают, но никто не рискнул устранить ошибку по Alt-i, потому что к ней уже все привыкли :=)

Пора делать neomc

Зачем изобретать велосипед? Были же попытки портировать FAR, но что-то заглохли...
На что-то похожее на VolkovCommaner уже нынешнее поколение кодеров неспособно.

(с) Во люди были в наше время! Не то, что нынешнее племя, богатыри - не вы :=)

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)

Может, появилась другая нормальная возможность заставить MC запоминать свое место, без этой срани?

она всю жизнь была, но судя по тому тупняку, что ты регулярно генерируешь, тебе бесполезно объяснять базовые вещи
1. ты хоть раз смотрел ман или хелп по mc?
2. ты хоть раз обращал там внимание на ключ -Р?
3. ты знал, что набирая mc ты запускаешь не /usr/bin/mc, а алиас к нему, который как раз и запускает mc с ключом -Р?
4. тебе трудно глянуть, что этот алиас вызывается через /usr/lib/mc/mc.sh или /usr/lib/mc/mc.сsh, в зависимости от дефолтного шелла?
5. тебе сложно и пойти поправить всего одну строку там?
ну и кто теперь тебе виноват?

novitchok ★★★★★
()
Ответ на: комментарий от chukcha

- ни хрена оно не работает :-(

может потому, что ты тупой? ты сам враппер-то посмотрел? там всего пяток строк.

novitchok ★★★★★
()
Ответ на: комментарий от novitchok

ну и кто теперь тебе виноват?

Ты, конечно! Кто же еще!

Потому что до меня тут отписались уважаемые люди, признавшую проблему, и твое «тупой» автоматически относится и к ним.

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)
Ответ на: комментарий от chukcha

Потому что до меня тут отписались уважаемые люди, признавшую проблему

ещё раз спрашиваю, хотя кому я это говорю, вот дебовский враппер:

cat /usr/lib/mc/mc-wrapper.sh 
MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
	MC_PWD="`cat "$MC_PWD_FILE"`"
	if test -n "$MC_PWD" && test -d "$MC_PWD"; then
		cd "$MC_PWD"
	fi
	unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE
unset MC_USER
вот федоровый:
cat /usr/libexec/mc/mc-wrapper.sh 
MC_USER=`whoami`
MC_PWD_FILE="${TMPDIR-/var/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"

if test -r "$MC_PWD_FILE"; then
	MC_PWD="`cat "$MC_PWD_FILE"`"
	if test -n "$MC_PWD" && test "$MC_PWD" != "$PWD" && test -d "$MC_PWD"; then
		cd "$MC_PWD"
	fi
	unset MC_PWD
fi

rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE
unset MC_USER
и где тут проблема? не распарсил головою вот это штоле?
test -d "$MC_PWD"; then
		cd "$MC_PWD"
то так и скажи, что проблема не в дебиане.

novitchok ★★★★★
()
Ответ на: комментарий от novitchok

то так и скажи, что проблема не в дебиане.

Так и скажу: проблема в том, что кто-то (кто - не знаю) не позаботился о том, чтобы обычные пользователи не разбирались в этих многострочных дебрях, а получали нормально работающий MC из коробки.

Раньше было так? Было. Почему исчезло?
Значит, чья-то недоработка. И я, как и миллионы других пользователей Linux, не обязан исправлять чьи-то косяки.

Зачем мне эти ваши врапперы, в которых я точно не разбираюсь.
Почему? Да потому что не хочу разбираться в чужих недоработках, не мое это дело, а разработчиков, которые их допускают.


И только не надо опять заводить привычную гнусавую линксячую волынку «Линукс бесплатен, тебе никто ничего не должен, твое место в венде и т.п».
В венде и так 99% юзеров, а при таком вашем линуксячем отношении их число будет только возрастать.

Запомни, непонятливый, две вещи:

1) Люди делятся на два несоизмеримых лагеря: небольшого числа разработчиков и огромного количества обычных пользователей.
Это как кино: выпущен один фильм, а смотрят его миллионы.

2) Linux, как и венда, для обычных пользователей - это всего лишь инструмент, а не икона, на которую надо молиться.
И если этот инструмент выпущен кривым и косячным и мешает нормально работать - это уж точно не моя проблема его исправлять.

Так что не надо тащить меня в свое враперское болото. Я с удовольствием платил бы за Linux, только что бы он работал нормально, а не отвлекаться и не исправлять за кем-то чьи-то косяки.

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 3)
Ответ на: комментарий от chukcha

Я с удовольствием платил бы за Linux

ну так в job, составляй ТЗ со всеми своими хотелками, со своим персональным видением «нормально», озвучивай бюджет. делов-то.

Linux, как и венда, для обычных пользователей - это всего лишь инструмент

инструмент тоже требует ухода и обслуживания. ножи дома точишь или нет? или тоже производители виноваты? карандаши затачиваешь? у пылесоса пылесборник периодически чистишь? морду мылом моешь, как мыло закончилось, всё, виноват производитель, его косяк? тебе никто ничего не должен, и это не о линуксе, поверь.

novitchok ★★★★★
()
Ответ на: комментарий от chukcha

нормально работающий MC из коробки

Я предпочитаю возвращаться в тот каталог откуда mc был запущен. С чего ты взял что твой вариант поведения единственно верный?

kardapoltsev ★★★★★
()

Иначе давно бы сделали так, чтобы mc при выходе запоминал каталог, в котором в этот момент находился.

На самом деле это не очень то нужно так как каталог можно задавать как опцию mc

mc /path/to/directory1 /path2/to2/directory2  

К тому же одна из панелей помнит тот каталог в котором находится, но очень неудобно то, что это то левая, то правая, вот если бы последний каталог независимо от панели всегда бы восстанавливался в какой-то одно было бы удобно.

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от novitchok

ну так в job, составляй ТЗ со всеми своими хотелками, со своим персональным видением «нормально», озвучивай бюджет. делов-то.

Решил посмешить публику? Сколько годков-то Линуксу? И что, кто-то сумел создать настолько нормально работающий Линукс, чтобы можно было за него заплатить? Не донатес, и именно за законченный надежный продукт?
Вот вы ождетесь со своим линуксячим подходом, что мелкокософт обует вас как вшивых, прибрав ваш любимый швободный Линукс к своим рукам.
И похоже, это уже не за горами, попытки втихую уже делаются.
У вас нет стратегического мышления, потому что вы закопались в свои любимые коды по уши, и не видите, что вокруг вас творится.

инструмент тоже требует ухода и обслуживания. ножи дома точишь или нет?

Мультики в детстве смотрел? Или только тяжелые деревянные игрушки юзал?

(c) Чтобы продать что-нибудь ненужное, сначала надо купить что-нибудь ненужное.

(c) Чтобы ухаживать и обслуживать инструмент, нужно сначала чтобы оно было ИНСТРУМЕНТОМ.
А не скопищем багов и глюков, не разгребаемых с прошлого тысячелетия.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Если MC после выхода не возвращается в текущий каталог, то приходится табиком клацать, пока доберешься после него.
И хотя делаю это довольно быстро, но жутко раздражает, потому что сбивает с основной мысли, и все равно теряется время, хоть и небольшое.

Ничего не понял.

Случаем, не вы были в команде наших ребят,

Не был.

Зачем изобретать велосипед?

А я начал 6 лет назад делать свой файловый менеджер вместо mc, но быстро стало лень. Но успел довести до того момента, когда дальнейшую разработку можно делать в собственном редакторе (будущем клоне mcedit).

firkax ★★★★★
()
Ответ на: комментарий от chukcha

Раньше было так? Было. Почему исчезло?

У меня не было. И это хорошо.

получали нормально работающий MC из коробки.

У разных людей разное понятие нормальности. Я например не хочу чтобы шелл делал какие-то неявные cd в зависимости от своих дочерних процессов (не важно каких).

firkax ★★★★★
()
Ответ на: комментарий от chukcha

И хотя все знают, но никто не рискнул устранить ошибку по Alt-i, потому что к ней уже все привыкли :=)

Что за ошибка по alt-i?

akk ★★★★★
()
Ответ на: комментарий от akk

Что за ошибка по alt-i?

Может по Alt-. или Alt-, уже не помню точно.
В-общем, довольно смешная ошибка - в хелпе написали одну комбинацию, а реально работала другая.
И когда обнаружили ее, хотели привести в соответствие, но народ возбух, поскольку все привыкли к такому несоответствию.
Может, потом и исправили, уже не отслеживал.

Я предпочитаю возвращаться в тот каталог откуда mc был запущен. С чего ты взял что твой вариант поведения единственно верный?

Ну если это так по-разному воспринимается, то значит это дело вкуса, а о нем не спорят.
Лично я не представляю, как можно работать по твоему варианту.
Сегодня целый день плевался, когда использовал его.
А если включаю свой - .bash_history быстро забивается всякой вышеописанной сранью под завязку.

Щас раздумываю, какой из ваших костылей сподручнее использовать.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

обычных пользователей

Обычные пользователи юзают тунар, конкуерор и наутилус.

alfix
()
Ответ на: комментарий от chukcha

Сколько годков-то Линуксу? И что

А сколько годиков ты тут всё жалуешься?

ddidwyll ★★★★
()
Последнее исправление: ddidwyll (всего исправлений: 1)
Ответ на: комментарий от torvn77

вот если бы последний каталог независимо от панели всегда бы восстанавливался в какой-то одно было бы удобно.

Вот тут я патчил, чтобы сохранялись оба панели и восстанавливались при следующем заходе.

Кому нужно автосохранение/восстановление директорий на обоих панелях при старте/выходе mc?

До сих пор пользуюсь.

Также я почти полностью переписал работу с hotlist до минимально вменяемого состояния. И тоже пользуюсь каждый день. Но вроде этот патч нигде не выкладывал. Если кому интересно, черканите здесь могу на pastebin патчи выложить. Или в виде отдельного поста оформить, всё равно буду на новый год на F35 переходить и надо будет заново пакет mc пропатчить.

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

pastebin

Почему бы тебе не сделать github на котором аккумулировать все сделанные тобой изменения, и тебе будет удобно сделать переустановку, и людям.
Кто умеет - вытащит патчи из гита, кто не умеет просто скачает репозитарий и скомпилирует целиком.

torvn77 ★★★★★
()

Странное требование, он вроде как не для этого.

Но если есть срущий скрипт, то почему бы его не модифицировать чтобы срал он куда нибудь в другое место и при запуске подчищал за собой немного?

kirill_rrr ★★★★★
()

А о сочетании клавиш ctrl-o для переключения к шеллу и обратно вы знали? Будет синхронизация каталогов, может это покроет ваши требования.

shnnmnn
()
Ответ на: комментарий от chukcha
  • ни хрена оно не работает :-(

Оно и не будет работать, алиасы не наследуется в дочерние шелы, добавь эту строку в ~/.bashrc

kvpfs ★★
()

попробуй не пользоваться mc, я потихоньку от него ушёл, только для ахивов использую, несмотря что unrar, unzip быстрее распаковывают, но всё таки привычка и просто файл посмотреть удобнее в нём.
все остальные операции удобнее в консоли будь то скачать-отправить по ssh scp, или права поправить.

s-warus ★★★
()
Ответ на: комментарий от s-warus

попробуй не пользоваться mc,

А смысл? Я пользуюсь и тем, и тем. Но во-первых, на mc быстрее, а во-вторых - и это главное! - нагляднее.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

на mc быстрее

что быстрее просмотреть/перебирать 200 директорий файлов или набрать cd и начало имени
я к этому пришёл не сразу, заметил что чаще ctrl-O нажимаю
ну и автодополнение в scp (если ключи заброшены и в ~/.ssh/config имена забиты, то автодополнение для имён файлов на удалённом сервере работает) меня добили

s-warus ★★★
()
Последнее исправление: s-warus (всего исправлений: 2)
12 июля 2022 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.