Мне не нравится, когда открываются десятки терминалов. Есть ли способ добавить Open в текущий терминал вместо Open in Terminal при использовании Nautilus?
Мне не нравится, когда открываются десятки терминалов. Есть ли способ добавить Open в текущий терминал вместо Open in Terminal при использовании Nautilus?
Ответы:
Грязное или нет, решение, приведенное ниже, отлично работало в течение 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)
Точно так же, как первый сценарий.
Сценарий имеет одно отличие от первого: вместо того, чтобы автоматически поднимать первое найденное окно терминала, он ожидает фокусировки на первом окне терминала. Затем он перейдет в каталог внутри этого окна.
~/.local/share/nautilus/scripts
выхода из системы :)
None
потому что такой переменной нет (за исключением Nautilus).
Я почти уверен, что нет никакого способа сделать это, однако у меня есть обходной путь для вас, который может помочь.
Вы всегда можете перетащить каталог из Nautilus в окно терминала, и Nautilus передаст этот каталог и вставит его в командную строку, чтобы вы могли это сделать, cd
а затем перетащите папку в терминал и нажмите Enter.
Самый простой способ это:
cd
пробел, затем Shift+, Insert (or INS)чтобы вставить путь. Хит Enter.Нет необходимости в скриптах или дополнительной работе.
На мой взгляд, единственный элегантный способ решить эту проблему без суеты - это использовать терминальный мультиплексор, такой как tmux, и иметь свой файловый менеджер.
Следующий скрипт оболочки достигает именно этого:
#!/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
), а также параметр командной строки для выполнения команды внутри эмулятора.
Вы можете зарегистрировать скрипт обработчика файлов, как любое другое сопоставление типов файлов в вашем файловом менеджере.