123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # Support mksh for mc subshell
- # https://midnight-commander.org/ticket/3748
- diff -Naur mc-4.8.18.orig/lib/shell.c mc-4.8.18/lib/shell.c
- --- mc-4.8.18.orig/lib/shell.c 2016-09-22 18:24:12.000000000 +0000
- +++ mc-4.8.18/lib/shell.c 2017-02-16 13:47:34.933939000 +0000
- @@ -66,6 +66,8 @@
- /* 3rd choice: look for existing shells supported as MC subshells. */
- if (access ("/bin/bash", X_OK) == 0)
- mc_shell->path = g_strdup ("/bin/bash");
- + else if (access ("/bin/mksh", X_OK) == 0)
- + mc_shell->path = g_strdup ("/bin/mksh");
- else if (access ("/bin/ash", X_OK) == 0)
- mc_shell->path = g_strdup ("/bin/ash");
- else if (access ("/bin/dash", X_OK) == 0)
- @@ -149,6 +153,12 @@
- mc_shell->type = SHELL_ZSH;
- mc_shell->name = "zsh";
- }
- + else if (strstr (mc_shell->path, "/mksh") != NULL
- + || strstr (mc_shell->real_path, "/mksh") != NULL)
- + {
- + mc_shell->type = SHELL_MKSH;
- + mc_shell->name = "mksh";
- + }
- else if (strstr (mc_shell->path, "/tcsh") != NULL
- || strstr (mc_shell->real_path, "/tcsh") != NULL)
- {
- diff -Naur mc-4.8.18.orig/lib/shell.h mc-4.8.18/lib/shell.h
- --- mc-4.8.18.orig/lib/shell.h 2016-03-12 15:45:47.000000000 +0000
- +++ mc-4.8.18/lib/shell.h 2017-02-15 21:57:39.000000000 +0000
- @@ -12,6 +12,7 @@
- typedef enum
- {
- SHELL_NONE,
- + SHELL_MKSH,
- SHELL_SH,
- SHELL_BASH,
- SHELL_ASH_BUSYBOX, /* BusyBox default shell (ash) */
- diff -Naur mc-4.8.18.orig/src/subshell/common.c mc-4.8.18/src/subshell/common.c
- --- mc-4.8.18.orig/src/subshell/common.c 2016-09-22 18:24:12.000000000 +0000
- +++ mc-4.8.18/src/subshell/common.c 2017-02-20 18:48:22.681514000 +0000
- @@ -320,6 +320,12 @@
-
- break;
-
- + case SHELL_MKSH:
- + init_file = g_strdup (".shrc");
- + putenv_str = g_strconcat ("ENV=", init_file, (char *) NULL);
- + putenv (putenv_str);
- + break;
- +
- /* TODO: Find a way to pass initfile to TCSH, ZSH and FISH */
- case SHELL_TCSH:
- case SHELL_ZSH:
- @@ -367,6 +373,7 @@
-
- case SHELL_ASH_BUSYBOX:
- case SHELL_DASH:
- + case SHELL_MKSH:
- case SHELL_TCSH:
- case SHELL_FISH:
- execl (mc_global.shell->path, mc_global.shell->path, (char *) NULL);
- @@ -801,6 +808,11 @@
- "PS1='\\u@\\h:\\w\\$ '\n", subshell_pipe[WRITE]);
- break;
-
- + case SHELL_MKSH:
- + g_snprintf (precmd, buff_size,
- + "PS1='$(pwd>&%d; kill -STOP $$)'\"$((( USER_ID )) && print '$ ' || print '# ')\"\n", subshell_pipe[WRITE]);
- + break;
- +
- case SHELL_ASH_BUSYBOX:
- /* BusyBox ash needs a somewhat complicated precmd emulation via PS1, and it is vital
- * that BB be built with active CONFIG_ASH_EXPAND_PRMT, but this is the default anyway.
|