[deepin exploration] deepin-terminal -e ls 打开新窗口执行命令,这个-e能否省去?
Tofloor
poster avatar
guyuming
deepin
2024-05-18 18:58
Author

我在DeepinV23 RC上装了和终端模拟器命令联动的文件管理器rfm. 通常在平铺桌面上比较好用,但在默认DDE桌面,特别是显示器比较宽或多屏的情况下应该也很方便。

我现在遇到的一个问题是rfm和终端模拟器联动,但不局限于特定终端模拟器,即使同一台机器上,在X或Wayland不同环境下也可能用不同终端模拟器,所以我用一个环境变量保存终端模拟器名称。

文件管理器调用终端模拟器通常两种情况:1, 打开新的交互窗口;2,打开新窗口并执行命令,即 deepin-terminal -e

这样,为这两种情况,我可能就要分别设置两个环境变量,就不太用户友好。

事实上,我在wayland下常用的foot, 就不需要这个 -e, 直接 foot ls 就可以打开新窗口并执行ls命令。这样,我就只需一个环境变量就可以设置了。

甚至,我可以无需事先设置的环境变量值:因为和终端模拟器联动的rfm是通过命令行启动的,可以想办法直接获得当前终端模拟器名,然后就把环境变量设成这个值。

所以,我建议deepin-terminal能否在保留-e的情况下,去掉-e也能实现同样的功能。

Reply Favorite View the author
All Replies
neko
deepin
Ecological co-builder
2024-05-18 20:40
#1

alias deepin-terminal="deepin-terminal -e"

你可以写个alias到.bashrc

Reply View the author
guyuming
deepin
2024-05-19 08:17
#2

可是我有的时候需要在后面加命令,有的时候不需要,如何区分呢?

还有,alias 不是有时候都会识别的吧? 好像 bash -c 里面就不认;我有的时候要从代码里直接spawn一个程序deepin-terminal,而不是先加载一个bash环境,alias是不是也不能识别?

Reply View the author
乾豫恒益
deepin
2024-05-19 11:26
#3

like

Reply View the author
ArchieMeng
deepin
2024-05-19 13:23
#4
其实,现在deepin-terminal支持xdg-scheme 的方式调用。dsg-terminal-exec://command 这种方式
Reply View the author
guyuming
deepin
2024-05-23 12:10
#5

@ArchieMeng, 我

apt install xdg-terminal-exec

后,执行结果如下,这是在读 $TERM 环境变量内容吗?你说的我是不是哪里理解错了?

guyuming@guyuming-deepin:~$ xdg-terminal-exec
/usr/bin/xdg-terminal-exec: 403: exec: xterm: not found
guyuming@guyuming-deepin:~$ echo $TERM
xterm-256color

这个貌似从2019年起就在PR状态的标准proposol, 是能解决打开一个默认终端模拟器的问题,但我在这个贴子里遇到的问题是已经知道哪个是当前打开的终端模拟器了(用户很可能在wayland和x下用的是不同终端模拟器,我不知道标准里是否有这个设置),我是通过下面链接里面的rfm.sh脚本来识别当前终端模拟器的,这个方法如有问题,欢迎指正。这里的问题,我们可以用xdg-terminal-exec这个wrapper程序,省去在应用里判断是否要加 -e 这个问题。 但xdg-terminal-exec 这个wrapper,能把我的逻辑也加进去吗,就是说如果调用xdg-terminal-exec发生在一个具体的终端模拟器里,就打开这个终端模拟器,而不是一个预先设定的终端模拟器。否则我岂不是要在自己的代码里,查询这个xdg啥的schema,或某个api,来决定是否加 -e?

https://gitee.com/guyuming76/rfm/commit/a1debe30de3175e9c81f04508bd64d066a54a60d

不管怎么说,我都觉得这个-e有些多余,谁能举出反例吗?

还有,不就设个默认终端吗,单一个环境变量TERM为啥就不行?我在gentoo上用foot,TERM值自动就设成foot,而不是啥xterm. 好吧,环境变量毕竟不是永久存储,默认值必然要起源于某种永久存储配置。

从文件管理器的角度,默认终端的设置我能想到一种情况下是无法避免的,比如某应用需要打开文件管理器作为FileChooser使用,而同时又希望以和终端模拟器联动的方式打开文件管理器,方便文件的全局深度查找。这种情况下就必须要有一个事先设置的终端模拟器,而不能依赖用户先打开一个。但这个只是默认终端模拟器存在的必要性,而不是那个 -e 参数存在的必要性。

反正这事分析到这里就仿佛是个政治问题了,如果大家全都加-e,我这里目前看来也不难办.好像支持-e的还挺多,问题是我最常用的foot不支持-e.我仿佛印象中foot之前是支持-e的,不晓得哪天为啥就不支持了,虽然我也直觉感觉这个参数没必要

回忆一下我刚学linux的时候,用的比较多的是konsole, 当时我觉得应该可以有konsole command 这样的用法,但是不行。后来花了不少时间才从网上搜到 -e 这个参数. 我用wayland下动态平铺后,换到了foot, 现在foot 不支持这个-e,以前是否支持我也记不清了. 我想说的是, 对于初学者来时,这个 -e 是不符合直觉的,并且你很难保证初学者能很快找到答案.

你也许会拿bash -c ls 而不是 bash ls 这样的例子来说bash也这样。但作为一个linux桌面初学者, 使用 bash -c 这样的需求场景我觉得非常少. bash ls 这样的命令语义本身对初学者来说就反直觉了. 但 terminal command 语义很直观, 需求场景多.

Reply View the author