From b52dfcdd0a2cf4b9d67141e188c78cc499a891ea Mon Sep 17 00:00:00 2001 From: Jarkko Sakkinen Date: Sat, 28 Jun 2025 10:32:38 +0300 Subject: [PATCH 1/4] Ticket #4726: add `mc-wrapper` for FISH Fish is increasingly growing popularity, and has gained a lot of new interest after 4.0 version was released. There is obviously high chance that bunch of them are mc users, and would like to continue that trend also as fish users. Based on these observations, add mc-wrapper shenanigans for fish. Signed-off-by: Jarkko Sakkinen Signed-off-by: Yury V. Zaytsev --- contrib/Makefile.am | 2 ++ contrib/mc-wrapper.fish.in | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 contrib/mc-wrapper.fish.in diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 4fad494b5..c3a083d11 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -29,3 +29,5 @@ mc-wrapper.csh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.csh.in mc-wrapper.sh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.sh.in $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.sh.in > mc-wrapper.sh +mc-wrapper.sh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.fish.in + $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.fish.in > mc-wrapper.fish diff --git a/contrib/mc-wrapper.fish.in b/contrib/mc-wrapper.fish.in new file mode 100644 index 000000000..3b9168b04 --- /dev/null +++ b/contrib/mc-wrapper.fish.in @@ -0,0 +1,20 @@ +if set -q MC_TMPDIR + set MC_PWD_FILE (mktemp "$MC_TMPDIR/mc.pwd.XXXXXX") +else if set -q TMPDIR + set MC_PWD_FILE (mktemp "$TMPDIR/mc.pwd.XXXXXX") +else + set MC_PWD_FILE (mktemp "/tmp/mc.pwd.XXXXXX") +end + +@bindir@/mc -P "$MC_PWD_FILE" "$argv" + +if test -r "$MC_PWD_FILE" + set MC_PWD (cat $MC_PWD_FILE) + if test -n "$MC_PWD" && test "$MC_PWD" != "$PWD" && test -d "$MC_PWD" + cd "$MC_PWD" + end + set -e MC_PWD +end + +rm -f "$MC_PWD_FILE" +set -e MC_PWD_FILE From 7376bc6699c7372fce6186ad6691a9a777777292 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Sat, 28 Jun 2025 15:33:02 +0200 Subject: [PATCH 2/4] docs: man/mc.1.in: fix typo Signed-off-by: Johannes Altmanninger Signed-off-by: Yury V. Zaytsev --- doc/man/mc.1.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/man/mc.1.in b/doc/man/mc.1.in index dc90272ad..c67dbcbcc 100644 --- a/doc/man/mc.1.in +++ b/doc/man/mc.1.in @@ -79,7 +79,7 @@ script that automatically changes the current directory of the shell to the last directory Midnight Commander was in. Source the file .B %pkglibexecdir%/mc.sh (bash and zsh users) or -.B %libexecdir%/mc.csh +.B %pkglibexecdir%/mc.csh (tcsh users) respectively to define .B mc as an alias to the appropriate shell script. From 96afdcd03d5ac67e30da839cac375626f905d365 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Sat, 28 Jun 2025 14:26:38 +0200 Subject: [PATCH 3/4] contrib: updates for fish wrapper - make gitignore and makefile work for all shell wrappers - use $@ instead of repeating target name - add missing fish targets - remove unnecessary quoting (fish does not do word splitting, only line splitting) - fix wrong quoting ("$argv" would join args by spaces into a single arg) - add missing contrib/mc.fish.in; use "function" instead of "alias" since that's more idiomatic for fish. Though "alias mc='source @pkglibexecdir@/mc-wrapper.fish '" would result in pretty much the same function being defined internally. Confirmed it works (but only when I exit mc with F10, not when I type "exit" in its subshell): $ make install $ source /home/johannes/.local/libexec/mc/mc.fish $ type mc mc is a function with definition # Defined in /home/johannes/.local/libexec/mc/mc.fish @ line 1 function mc --description 'Visual shell for Unix-like systems - fish wrapper' source /home/johannes/.local/libexec/mc/mc-wrapper.fish $argv end Signed-off-by: Johannes Altmanninger Signed-off-by: Yury V. Zaytsev --- contrib/.gitignore | 5 +++-- contrib/Makefile.am | 33 ++++++++++++++++++--------------- contrib/mc-wrapper.fish.in | 14 +++++++------- contrib/mc.fish.in | 3 +++ doc/man/es/mc.1.in | 4 +++- doc/man/hu/mc.1.in | 6 ++++-- doc/man/it/mc.1.in | 6 ++++-- doc/man/mc.1.in | 4 +++- doc/man/ru/mc.1.in | 4 +++- doc/man/sr/mc.1.in | 4 +++- 10 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 contrib/mc.fish.in diff --git a/contrib/.gitignore b/contrib/.gitignore index bf2c44a93..8aebcef00 100644 --- a/contrib/.gitignore +++ b/contrib/.gitignore @@ -1,4 +1,5 @@ -mc-wrapper.csh -mc-wrapper.sh +mc-wrapper.* +!mc-wrapper.*.in mc.csh mc.sh +mc.fish diff --git a/contrib/Makefile.am b/contrib/Makefile.am index c3a083d11..0f99f3fee 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -1,8 +1,20 @@ noinst_DATA = README.xterm -SCRIPTS_IN = mc.csh.in mc.sh.in mc-wrapper.csh.in mc-wrapper.sh.in -SCRIPTS_OUT = mc.csh mc.sh mc-wrapper.csh mc-wrapper.sh +SCRIPTS_IN = \ + mc.csh.in \ + mc.fish.in \ + mc.sh.in \ + mc-wrapper.csh.in \ + mc-wrapper.fish.in \ + mc-wrapper.sh.in +SCRIPTS_OUT = \ + mc.csh \ + mc.fish \ + mc.sh \ + mc-wrapper.csh \ + mc-wrapper.fish \ + mc-wrapper.sh pkglibexec_SCRIPTS = $(SCRIPTS_OUT) @@ -17,17 +29,8 @@ EXTRA_DIST = \ $(SCRIPTS_IN) \ $(noinst_DATA) -mc.csh: $(top_builddir)/config.status $(srcdir)/mc.csh.in - $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.csh.in > mc.csh +mc.%: $(top_builddir)/config.status $(srcdir)/mc.%.in + $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.$*.in > $@ -mc.sh: $(top_builddir)/config.status $(srcdir)/mc.sh.in - $(SED) "s%@""pkglibexecdir@%$(pkglibexecdir)%" $(srcdir)/mc.sh.in > mc.sh - -mc-wrapper.csh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.csh.in - $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.csh.in > mc-wrapper.csh - -mc-wrapper.sh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.sh.in - $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.sh.in > mc-wrapper.sh - -mc-wrapper.sh: $(top_builddir)/config.status $(srcdir)/mc-wrapper.fish.in - $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.fish.in > mc-wrapper.fish +mc-wrapper.%: $(top_builddir)/config.status $(srcdir)/mc-wrapper.%.in + $(SED) "s%@""bindir@%$(bindir)%" $(srcdir)/mc-wrapper.$*.in > $@ diff --git a/contrib/mc-wrapper.fish.in b/contrib/mc-wrapper.fish.in index 3b9168b04..186d48f14 100644 --- a/contrib/mc-wrapper.fish.in +++ b/contrib/mc-wrapper.fish.in @@ -1,20 +1,20 @@ if set -q MC_TMPDIR - set MC_PWD_FILE (mktemp "$MC_TMPDIR/mc.pwd.XXXXXX") + set MC_PWD_FILE (mktemp $MC_TMPDIR/mc.pwd.XXXXXX) else if set -q TMPDIR - set MC_PWD_FILE (mktemp "$TMPDIR/mc.pwd.XXXXXX") + set MC_PWD_FILE (mktemp $TMPDIR/mc.pwd.XXXXXX) else - set MC_PWD_FILE (mktemp "/tmp/mc.pwd.XXXXXX") + set MC_PWD_FILE (mktemp /tmp/mc.pwd.XXXXXX) end -@bindir@/mc -P "$MC_PWD_FILE" "$argv" +@bindir@/mc -P "$MC_PWD_FILE" $argv if test -r "$MC_PWD_FILE" set MC_PWD (cat $MC_PWD_FILE) - if test -n "$MC_PWD" && test "$MC_PWD" != "$PWD" && test -d "$MC_PWD" - cd "$MC_PWD" + if test -n "$MC_PWD" && test $MC_PWD != $PWD && test -d $MC_PWD + cd $MC_PWD end set -e MC_PWD end -rm -f "$MC_PWD_FILE" +rm -f $MC_PWD_FILE set -e MC_PWD_FILE diff --git a/contrib/mc.fish.in b/contrib/mc.fish.in new file mode 100644 index 000000000..d48ce2a67 --- /dev/null +++ b/contrib/mc.fish.in @@ -0,0 +1,3 @@ +function mc --description 'Visual shell for Unix-like systems - fish wrapper' + source @pkglibexecdir@/mc-wrapper.fish $argv +end diff --git a/doc/man/es/mc.1.in b/doc/man/es/mc.1.in index a4ac7f33a..ff15ecb73 100644 --- a/doc/man/es/mc.1.in +++ b/doc/man/es/mc.1.in @@ -94,7 +94,9 @@ Midnight Commander. Consúltese en los archivos .B %pkglibexecdir%/mc.sh (usuarios de bash y zsh) y .B %pkglibexecdir%/mc.csh -(usuarios de tcsh) la manera de definir +(usuarios de tcsh) +.B %pkglibexecdir%/mc.fish +(usuarios de fish) la manera de definir .B mc como un alias para el correspondiente guión de shell. .TP diff --git a/doc/man/hu/mc.1.in b/doc/man/hu/mc.1.in index b14631c1b..06a57e550 100644 --- a/doc/man/hu/mc.1.in +++ b/doc/man/hu/mc.1.in @@ -61,9 +61,11 @@ helyett a Midnight Commander által utoljára meglátogatott könyvtárra való Fjerdingstad\-nek és Sergey\-nek közreműködésükért). Kérlek, ne csinálj szó szerinti másolatot a funkció beállításairól. A fájlok forrása a .I %pkglibexecdir%/mc.sh -(bash és zsh felhasználóknak), illetőleg a +(bash és zsh felhasználóknak), .I %pkglibexecdir%/mc.csh -(tcsh felhasználóknak) fájl. Ilyenkor, amikor a funkció beállításokat +(tcsh felhasználóknak) illetőleg a +.I %pkglibexecdir%/mc.fish +(fish felhasználóknak) fájl. Ilyenkor, amikor a funkció beállításokat változtatod, a profil értékeket nem szükséges megváltoztatnod, csak arról gondoskodj, hogy az MC\-t ne fordítsd eltérő beállításokkal. .PP diff --git a/doc/man/it/mc.1.in b/doc/man/it/mc.1.in index 7b2591ad0..e1c806b38 100644 --- a/doc/man/it/mc.1.in +++ b/doc/man/it/mc.1.in @@ -82,9 +82,11 @@ utilizzata da una speciale funzione shell che imposti automaticamente l'ultima directory corrente della shell come l'ultima directory in cui stava il Midnight Commander. Prelevate i file .B %pkglibexecdir%/mc.sh -(utenti bash e zsh) o rispettivamente +(utenti bash e zsh), .B %pkglibexecdir%/mc.csh -(utenti tcsh) per definire +(utenti tcsh) o rispettivamente +.B %pkglibexecdir%/mc.fish +(utenti fish) per definire .B mc come un alias allo script di shell appropriato. .TP diff --git a/doc/man/mc.1.in b/doc/man/mc.1.in index c67dbcbcc..3265dbd46 100644 --- a/doc/man/mc.1.in +++ b/doc/man/mc.1.in @@ -80,7 +80,9 @@ the last directory Midnight Commander was in. Source the file .B %pkglibexecdir%/mc.sh (bash and zsh users) or .B %pkglibexecdir%/mc.csh -(tcsh users) respectively to define +(tcsh users) or +.B %pkglibexecdir%/mc.fish +(fish users) respectively to define .B mc as an alias to the appropriate shell script. .TP diff --git a/doc/man/ru/mc.1.in b/doc/man/ru/mc.1.in index 0c0630951..2ae88751e 100644 --- a/doc/man/ru/mc.1.in +++ b/doc/man/ru/mc.1.in @@ -90,8 +90,10 @@ Commander. .IP Для того чтобы эта функция была определена, используйте файл .B %pkglibexecdir%/mc.sh -для оболочек bash и zsh, а для оболочки tcsh соответственно файл +для оболочек bash и zsh, или для оболочки tcsh файл .B %pkglibexecdir%/mc.csh +а для оболочки fish соответственно файл +.B %pkglibexecdir%/mc.fish .TP .I \-s, \-\-slow Включает медленный режим терминала, в котором программа выводит меньше diff --git a/doc/man/sr/mc.1.in b/doc/man/sr/mc.1.in index 98b16c635..2d2db4ce9 100644 --- a/doc/man/sr/mc.1.in +++ b/doc/man/sr/mc.1.in @@ -64,7 +64,9 @@ termcap/terminfo. Корисно је само на ХП\-овим термин .B %pkglibexecdir%/mc.sh (за кориснике љуски bash и zsh) или .B %pkglibexecdir%/mc.csh -(за кориснике љуске tcsh), тим редом, да бисте задали +(за кориснике љуске tcsh) или +.B %pkglibexecdir%/mc.fish +(за кориснике љуске fish), тим редом, да бисте задали .B mc као надимак за одговарајући спис љуске. .TP From aee8d0a6260aafe007c729a948a924c047891026 Mon Sep 17 00:00:00 2001 From: "Yury V. Zaytsev" Date: Sun, 29 Jun 2025 12:19:53 +0200 Subject: [PATCH 4/4] contrib: make wrappers more robust w.r.t. mc exit code (#1466) Signed-off-by: Yury V. Zaytsev --- contrib/mc-wrapper.csh.in | 2 +- contrib/mc-wrapper.fish.in | 4 ++-- contrib/mc-wrapper.sh.in | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/contrib/mc-wrapper.csh.in b/contrib/mc-wrapper.csh.in index 1b00491bc..671ab02bf 100644 --- a/contrib/mc-wrapper.csh.in +++ b/contrib/mc-wrapper.csh.in @@ -6,7 +6,7 @@ else setenv MC_PWD_FILE "`mktemp '/tmp/mc.pwd.XXXXXX'`" endif -@bindir@/mc -P "$MC_PWD_FILE" $* +@bindir@/mc -P "$MC_PWD_FILE" $* || true if (-r "$MC_PWD_FILE") then setenv MC_PWD "`cat '$MC_PWD_FILE'`" diff --git a/contrib/mc-wrapper.fish.in b/contrib/mc-wrapper.fish.in index 186d48f14..0acc8c89c 100644 --- a/contrib/mc-wrapper.fish.in +++ b/contrib/mc-wrapper.fish.in @@ -6,12 +6,12 @@ else set MC_PWD_FILE (mktemp /tmp/mc.pwd.XXXXXX) end -@bindir@/mc -P "$MC_PWD_FILE" $argv +@bindir@/mc -P "$MC_PWD_FILE" $argv || true if test -r "$MC_PWD_FILE" set MC_PWD (cat $MC_PWD_FILE) if test -n "$MC_PWD" && test $MC_PWD != $PWD && test -d $MC_PWD - cd $MC_PWD + cd $MC_PWD || true end set -e MC_PWD end diff --git a/contrib/mc-wrapper.sh.in b/contrib/mc-wrapper.sh.in index 3d929b348..399b38a89 100644 --- a/contrib/mc-wrapper.sh.in +++ b/contrib/mc-wrapper.sh.in @@ -6,7 +6,7 @@ else MC_PWD_FILE="`mktemp "/tmp/mc.pwd.XXXXXX"`" fi -@bindir@/mc -P "$MC_PWD_FILE" "$@" +@bindir@/mc -P "$MC_PWD_FILE" "$@" || true if test -r "$MC_PWD_FILE"; then MC_PWD="`cat "$MC_PWD_FILE"`"