# 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.