我想创建一个.desktop
文件,在新选项卡中打开默认文件管理器中的文件夹。为了测试它是否打开了正确的位置,我尝试了nautilus ~/*folder*
。这会打开我的文件管理器,但它说出了问题。当我使用 时也会出现同样的情况nautilus /home/*username*/*folder*
。我可以使用什么命令从文件中在新选项卡中打开主目录中的特定文件夹.desktop
?
我的目标是在我的 dock(plank)上有一个图标,可以在 Nautilus 的新标签页中打开地图 ~/Downloads。
答案1
编辑:
作为不断洞察的结果,下面是改进版本的脚本。
由于剧本现在糊状物路径而不是打字它(使用xdotool
),脚本更可靠。虽然脚本不是实际上更快(考虑一下是由于 nautilus 缺少 cli 选项,因此(一种解决方法)脚本“感觉”更“清晰”。但事实是,脚本只需要等待 GUI 准备好执行每个下一步,因为它模拟了用户操作。脚本内部的时间比较节省;在更快的系统上,可以进行一些优化。
完全按照原始答案中的说明使用脚本;它(仍然)需要安装wmctrl
和。此版本还需要:xdotool
xclip
sudo apt-get install xclip
新版本的脚本:
#!/usr/bin/env python3
import subprocess
import sys
import time
arg = sys.argv[1:]
arg = arg[0] if arg else ""
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
try:
pid = get(["pidof", "nautilus"])
except subprocess.CalledProcessError:
wlist = []
else:
wlist = [l for l in get(["wmctrl", "-lp"]).splitlines() if pid in l\
and "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", l.split()[0]])]
if wlist:
w = wlist[-1].split()[0]
subprocess.call(["wmctrl", "-ia", w])
subprocess.call(["/bin/bash", "-c", "printf '"+arg+"' | xclip -selection clipboard"])
subprocess.Popen(["xdotool", "key", "Control_L+t"])
time.sleep(0.4)
subprocess.Popen(["xdotool", "key", "Control_L+l"])
time.sleep(0.2)
subprocess.call(["xdotool", "key", "Control_L+v"])
subprocess.Popen(["xdotool", "key", "Return"])
else:
subprocess.Popen(["nautilus", arg])
旧答案:
Nautilus 没有用于打开新选项卡的命令行选项,但是,您可以在脚本的帮助下使用xdotool
和 来“伪造”它wmctrl
。
如何使用
安装(如果需要)
wmctrl
和xdotool
:sudo apt-get install xdotool wmctrl
将以下脚本复制到一个空文件中,将其另存为
nautilus_tab
(无扩展名)~/bin
,然后使其可执行。
如果目录~/bin
尚不存在,请创建它,然后运行source ~/.profile
以使目录“显示”在 中$PATH
。(或者,注销/登录)通过运行以下命令进行测试运行:
nautilus_tab <directory>
它应该:
- 如果没有打开 nautilus 窗口,则在目录中打开一个新的 nautilus 窗口
- 如果一个窗口开了,在目录中打开一个新标签页
剧本
#!/usr/bin/env python3
import subprocess
import time
import sys
get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
def run(cmd):
subprocess.call(cmd)
try:
arg = sys.argv[1]
except:
arg = ""
try:
pid = get(["pidof", "nautilus"]).strip()
except subprocess.CalledProcessError:
run(["nautilus ", arg])
else:
w = [l.split() for l in get(["wmctrl", "-lp"]).splitlines() if pid in l][-1]
print(w)
w_id = w[0]
if len([l for l in get(["xprop", "-id", w_id]).splitlines() if all(
["_NET_WM_WINDOW_TYPE(ATOM)" in l, "_TYPE_NORMAL" in l])]) != 0:
run(["wmctrl", "-ia", w[0]]); time.sleep(0.1)
run(["xdotool", "key", "Control_L+t"])
if arg != "":
run(["xdotool", "key", "Control_L+l"])
time.sleep(0.2)
run(["xdotool", "type", arg])
time.sleep(0.02*len(arg))
run(["xdotool", "key", "Return"])
else:
run(["nautilus", arg])
笔记
- 该脚本是一种变通方法,用于模拟用户操作。因此,脚本“内部”的计时非常重要。我在我的系统上将计时设置为“安全”值,并尽可能使其“智能”。如果它可能无法在您的系统上正常工作,请发表评论。
- 如果目标窗口(要添加选项卡的窗口)位于另一个工作区,则脚本可能会中断
如果目录中有空格,请使用引号:
nautilus_tab '</directory/with spaces>'
如果未使用参数 (-directory),脚本将在当前打开的窗口所在的目录中打开一个新选项卡nautilus
。如果没有打开 `nautilus 窗口,则将在您的主目录中打开一个新窗口。
答案2
(这些网站的奇怪要求让我抓狂——这应该是一条评论,但我的声誉不够,这种胡说八道并不能鼓励我获得它!)
Jacob 的答案不适用于包含空格的路径。它需要进行两项更改...
run("nautilus "+arg)
run('nautilus "'+arg+'"')
run("xdotool type "+arg)
run('xdotool type "'+arg+'"')
我用 Thunar 运行它,但它解释得不~
太好。例如thunar-tab.py "~/Documents"
会产生无法找到的错误/home/user/~/Documents
。您必须使用显式路径来调用它。