我喜欢午夜指挥官。可能与 90 年代初俄罗斯开始使用 DOS 机器有关,但现在我真的很喜欢命令行与两面板文件列表的集成。一个关键功能是 Ctrl+Enter 将当前选定的文件或目录的名称复制到命令行中,而不启动它。
不幸的是,在 Fedora(26 和 27)上,这在 Konsole 中失败了,而且显然在所有其他基于 X 的终端中也失败了。它确实可以在虚拟控制台中工作,我可以按 Ctrl-Alt-F3。
在 OpenSuse Leap(42.1、42.2、42.3)上,Ctrl+Enter 功能完美运行。我无法找出任何区别。 (我在两者上都使用 KDE,据我了解,这意味着在 Fedora 上我有 X.org,而不是 Wayland)。
如何让 Ctrl+Enter 在 Fedora 上工作?或者,如果这是不可能的,是否有办法将非常有用的功能重新分配给 Midnight Commander 中的其他一些组合键?
(我也会考虑 Midnight Commander 本身的替代品,但是在控制台窗口中运行的那些,似乎没有。我不需要图形两面板文件管理器,因为我使用 MC 来协助快速制定命令)。
答案1
tl;dr:习惯使用Alt+ Enter(又名ESC后接Enter)。
Ctrl+Enter在终端模拟器中生成与 完全相同的序列Enter,因此应用程序无法区分这两者。好吧,没有办法通过查看从终端模拟器接收的输入流。
mc
有一个有趣的功能,称为“X11 支持”。它不仅查看从终端仿真器接收的字节,而且(如果编译了此支持,并且 X11 连接在运行时可用)查询 X11 服务器以获取修饰键的状态。
所以基本上它是这样的:“哇,我从终端模拟器收到了一个 Enter。嘿,X11 服务器,现在按下 Ctrl 了吗?”
有多种方法可能不适合您。
Fedora 的mc
编译可能没有 X11 支持,我不知道。检查 的输出mc --version
,是否包含“With support for X11 events”?
su
、sudo
、screen
、tmux
或类似工具也可能会破坏此功能,以防 X11 连接在它们内部不可用(例如,凭据未由或ssh
正确设置/转发;或者与另一个 X 服务器分离并重新连接;显示未由 转发) 。su
sudo
screen
tmux
ssh
该功能在 Wayland 上也不起作用。我怀疑由于其安全模型,它无法在 Wayland 中实现,或者至少在没有某些核心 Wayland 组件的插件/扩展的情况下无法实现。但即使可以检测修饰符的状态,在mc
.
答案2
我们仍然没有替代品Ctrl-Shift-Enter在韦兰的MC中。
所以缺少一个,我建议使用Alt-m反而。并且因为进入是相同的Ctrl-m,这意味着我们将有:
- Alt-Ctrl-m, IE。Alt-Enter, 为了粘贴文件名。
- Alt-m为了粘贴完整路径名。
请注意,默认情况下Alt-m被分配给邮件行动,因此我们将失去该映射,但它看起来像是一笔成功的交易。
这是一个(可重播)脚本,用于在默认键盘映射(文件/etc/mc/mc.keymap
)中应用此新映射:
sudo sed -ri '/PutCurrentFullSelected/s/=( alt-m;)?/= alt-m;/' /etc/mc/mc.default.keymap
sudo sed -ri '/Mail = alt-m/s/= alt-m/=/;' /etc/mc/mc.default.keymap
或者补丁:
diff --git a/mc/mc.default.keymap b/mc/mc.default.keymap
--- a/mc/mc.default.keymap
+++ b/mc/mc.default.keymap
@@ -33,7 +33,7 @@ Shell = ctrl-o
PutCurrentPath = alt-a
PutOtherPath = alt-shift-a
PutCurrentSelected = alt-enter; ctrl-enter
-PutCurrentFullSelected = ctrl-shift-enter
+PutCurrentFullSelected = alt-m; ctrl-shift-enter
ViewFiltered = alt-exclamation
Select = kpplus
Unselect = kpminus
@@ -313,7 +313,7 @@ Help = f1
Refresh = ctrl-l
Goto = alt-l
Sort = alt-t
-Mail = alt-m
+Mail =
ParagraphFormat = alt-p
MatchBracket = alt-b
ExternalCommand = alt-u