Answers:
不管是否脏,下面的解决方案在我经常测试的30分钟内都可以正常工作。只要您可以右键单击目录内的文件(任意),该解决方案就可以工作:
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
t = get(["pgrep", "gnome-terminal"])
if t:
w = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if t in l][0]
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# raise the found terminal window
subprocess.call(["wmctrl", "-ia", w])
time.sleep(0.3)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
该脚本的需求wmctrl
,xdotool
并XCLIP:
sudo apt-get install wmctrl xdotool xclip
将脚本复制到一个空文件中,然后将其另存为open_in_terminal
(无扩展名)~/.local/share/nautilus/scripts
。根据需要创建目录。使脚本可执行
而已。注销并重新登录,您将获得如图所示的脚本(2)。
"NAUTILUS_SCRIPT_CURRENT_URI"
。xclip
)gnome-terminal
窗口并粘贴路径,并在cd
命令之前添加路径。由于我们曾经echo
将整行加载到剪贴板中,Return因此包含在内。gnome-terminal
窗口。有关nautilus脚本的更多信息,请参见此处。
如果要选择在哪个终端窗口中打开当前(鹦鹉螺)目录,请使用以下脚本。
#!/usr/bin/env python3
import subprocess
import os
import time
def replace(path):
for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
("file://", ""), ("%20", " ")]:
path = path.replace(c[0], c[1])
return path
def get(command):
try:
return subprocess.check_output(command).decode("utf-8").strip()
except subprocess.CalledProcessError:
pass
# check if gnome-terminal runs
pid = get(["pgrep", "gnome-terminal"])
if pid:
t = 0
while t < 30:
# see if the frontmost window is a terminam window
active = get(["xdotool", "getactivewindow"])
if pid in get(["xprop", "-id", active]):
# get the current path
current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
dr = os.path.realpath(current)
# copy the cd command to clipboard
c1 = "printf 'cd ' | xclip -in -selection c"
c2 = 'echo "'+"'"+dr+"'"+'" | xclip -in -selection c'
# paste & run it
for c in [c1, c2]:
subprocess.call(["/bin/bash", "-c", c])
subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
time.sleep(0.05)
break
else:
t += 1
time.sleep(0.5)
完全像第一个脚本。
该脚本与第一个脚本有一个区别:它不会自动提高找到的第一个终端窗口,而是等待第一个终端窗口具有焦点。然后将其CD到该窗口内的目录。
~/.local/share/nautilus/scripts
注销后返回菜单::
None
因为没有这样的变量(即在Nautilus之外)。
最简单的方法是这样的:
cd
,空格,然后按Shift+ Insert (or INS)粘贴路径。击中Enter。无需脚本或额外的工作。
在我看来,解决这一问题的唯一优雅方法是使用像tmux这样的终端多路复用器并使用文件管理器
下面的shell脚本实现了这一目的:
#!/bin/sh
set -e
TMUX=tmux
#TERMINAL_EMULATOR='gnome-terminal -x'
cd "$1"
if $TMUX has-session; then
exec $TMUX new-window
else
exec ${TERMINAL_EMULATOR:-x-terminal-emulator -x} $TMUX
fi
TERMINAL_EMULATOR
为新的终端窗口保存所需的终端模拟器(如果您不喜欢默认值) x-terminal-emulator
指向的),以及用于在仿真器内部执行的命令的命令行选项。
您可以像在文件管理器中注册任何其他文件类型关联一样注册文件处理程序脚本。