Мені не подобається відкривати десятки терміналів. Чи можна додати Open у поточному терміналі замість Open у Terminal під час використання Nautilus?
Мені не подобається відкривати десятки терміналів. Чи можна додати Open у поточному терміналі замість Open у 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 тут .
Якщо ви хочете мати можливість вибрати, у якому вікні терміналу ви б відкрили поточний каталог (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
точки), а також параметр командного рядка для команди, що виконується в емуляторі.
Ви можете зареєструвати скрипт обробника файлів, як і будь-яке інше об'єднання типів файлів у вашому файловому менеджері.