Ticket #3748 (new enhancement)

Opened 8 years ago

Last modified 6 hours ago

mksh as a subshell

Reported by: gloomyquazar Owned by:
Priority: minor Milestone: 4.8.33
Component: mc-core Version: master
Keywords: subshell mksh Cc: d3m3t3r@…
Blocked By: #3692 Blocking:
Branch state: no branch Votes for changeset:

Description

Hello.

On my desktop and notebook I use FreeBSD together with mksh, which I like for it's small size, robustness, security... Recently I got to know that MC supports only bash, (t)csh, zsh and something else as main shells, hence my mksh doesn't work as a subshell, I can't just switch with Ctrl+O and work there, so I had to postpone using MC for now. Is there a way to add mksh for supported shells? Without a subshell working in MC gets very unconvenient.

With regards,
Sergey P.

Attachments

mc-mksh-subshell.patch (2.8 KB) - added by gloomyquazar 8 years ago.
mc-mksh-subshell-v2.patch (2.8 KB) - added by gloomyquazar 8 years ago.

Change History

comment:1 follow-up: ↓ 2 Changed 8 years ago by gloomyquazar

It would be nice to also add support for general Bourne /bin/sh as a subshell.

comment:2 in reply to: ↑ 1 Changed 8 years ago by andrew_b

  • Blocked By 3692 added
  • Milestone changed from 4.8.19 to Future Releases

Replying to gloomyquazar:

It would be nice to also add support for general Bourne /bin/sh as a subshell.

#3658

comment:3 Changed 8 years ago by zaytsev

If mksh has an equivalent of precmd (which, I think, it does) and you can cook up a patch to support it that is not impossible.

comment:4 Changed 8 years ago by gloomyquazar

Maybe the function like this will do?

function precmd {

<put something here>

}

PS1="$(precmd) $PS1 "

comment:5 Changed 8 years ago by zaytsev

As I said, if you manage to provide a clean working patch, we might eventually get it in.

Changed 8 years ago by gloomyquazar

comment:6 Changed 8 years ago by gloomyquazar

Could you please check this patch? It works OK for me.

Changed 8 years ago by gloomyquazar

comment:7 Changed 7 years ago by woodsb02

Any progress on this?
The v2 patch look a simple enough.

Version 0, edited 7 years ago by woodsb02 (next)

comment:8 follow-up: ↓ 9 Changed 32 hours ago by zaytsev

comment:9 in reply to: ↑ 8 Changed 31 hours ago by d3m3t3r

Replying to zaytsev:

Somebody turned this in a PR:

https://github.com/MidnightCommander/mc/pull/209

Added support for ksh/oksh/mksh Korn shell variants.

comment:10 Changed 30 hours ago by zaytsev

  • Milestone changed from Future Releases to 4.8.33

I assume you tested it and it works for you?

  • I'm surprised that the "precmd" part was so simple. Is that due to static prompt? Is supporting user prompt impossible / problematic?
  • I'm not sure that ksh supports HISTCONTROL... Does it really? If yes, good news.

comment:11 Changed 28 hours ago by d3m3t3r

I need to fix it for mksh which is actually dumber than other pdksh/openbsd based variants. mksh doesn't support HISTCONTROL either \x placeholders in PS1 and recognizes not just ENV but $HOME/.mkshrc too.

Couldn't find any "precmd" like functionality in any variant so I suppose user prompt is not possible.

Since mksh seems to be quite different from other variants, would you recommend using distinct SHELL_KSH and SHELL_MKSH types? Or perhaps use single SHELL_KSH type but specific mc_shell->name?

comment:12 Changed 28 hours ago by zaytsev

Since mksh seems to be quite different from other variants

I would add SHELL_MKSH if it's different enough, and SHELL_OKSH / SHELL_PDKSH (whichever official names make sense, didn't look into it) for clarity - you can use multiple enum values for the same case.

Couldn't find any "precmd" like functionality in any variant so I suppose user prompt is not possible.

It would be great to have this as a comment. Otherwise our children will wonder...

mksh doesn't support HISTCONTROL

But the others do, or everything is trashed with our cd commands?

comment:13 Changed 25 hours ago by d3m3t3r

First, thanks much for the feedback. I've split mksh support under its own SHELL_MKSH type since its features differ so much it makes sense to handle it separately.

Some overview: There seems to be several implementations of ksh around but all but mksh (MirBSD ksh https://github.com/MirBSD/mksh) are based on pdksh (Public Domain ksh), in particular ports of OpenBSD ksh, e.g. https://github.com/dimkr/loksh and https://github.com/ibara/oksh. pdksh supports \x codes, variable and command substitution in PS1, HISTCONTROL (ignorespace & ignoredups) and ENV variable for interactive shell rc-file. mksh, on the other hand, doesn't support \x codes in PS1 either HISTCONTROL. It supports ENV variable for interactive shell rc-file but if it's not set the shell also tries ~/.mkshrc.

comment:14 Changed 6 hours ago by d3m3t3r

  • Cc d3m3t3r@… added
Note: See TracTickets for help on using tickets.