Nie lubię otwierać dziesiątek terminali. Czy istnieje sposób, aby dodać opcję Otwórz w bieżącym terminalu zamiast opcji Otwórz w terminalu podczas korzystania z Nautilus?
Nie lubię otwierać dziesiątek terminali. Czy istnieje sposób, aby dodać opcję Otwórz w bieżącym terminalu zamiast opcji Otwórz w terminalu podczas korzystania z Nautilus?
Odpowiedzi:
Brudne czy nie, poniższe rozwiązanie działało idealnie w ciągu 30 minut, które często testowałem. Rozwiązanie działa, o ile można kliknąć prawym przyciskiem myszy plik (dowolny) w katalogu:
#!/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)
Potrzeby skryptów wmctrl, xdotooli xclip:
sudo apt-get install wmctrl xdotool xclip
Skopiuj skrypt do pustego pliku, zapisz go jako open_in_terminal(bez rozszerzenia) w ~/.local/share/nautilus/scripts. W razie potrzeby utwórz katalog. Spraw, aby skrypt był wykonywalny
Otóż to. Wyloguj się i zaloguj ponownie, a będziesz mieć skrypt dostępny jak na obrazku (2).
"NAUTILUS_SCRIPT_CURRENT_URI".xclip)gnome-terminali wkleja ścieżkę, poprzedzoną cdpoleceniem. Ponieważ zwykliśmy echoładować całą linię do schowka, Returnjest wliczony w cenę.gnome-terminalokno.Więcej informacji na temat skryptów nautilus tutaj .
Jeśli chcesz mieć możliwość wyboru, w którym oknie terminala chcesz otworzyć bieżący katalog (nautilus), użyj poniższego skryptu.
Kliknij prawym przyciskiem myszy (dowolny) plik w katalogu (w tym przypadku mój pulpit), jak poniżej:
Kliknij (lub podnieś inaczej) okno terminala, którego chcesz użyć, a nastąpi przejście do katalogu:
#!/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)
Jest dokładnie tak, jak pierwszy skrypt.
Skrypt ma jedną różnicę w stosunku do pierwszego: zamiast automatycznie podnosić pierwsze znalezione okno terminala, czeka na fokus pierwszego okna terminala. Następnie cd do katalogu w tym oknie.
~/.local/share/nautilus/scriptswylogowania z katalogu i ponownym
Noneponieważ nie ma takiej zmiennej (poza Nautilus).
Jestem pewien, że nie ma sposobu, aby to zrobić, jednak mam dla ciebie obejście, które może ci pomóc.
Zawsze możesz przeciągnąć i upuścić katalog z Nautilus do okna terminala, a Nautilus przekaże ten katalog i wklei go do wiersza poleceń, więc możesz to zrobić, cda następnie przeciągnij folder na terminal i naciśnij klawisz Enter.
Najprostszy sposób to:
cdspację, a następnie Shift+, Insert (or INS)aby wkleić ścieżkę. Hit Enter.Nie potrzeba skryptów ani dodatkowej pracy.
Moim zdaniem jedynym eleganckim sposobem na rozwiązanie tego problemu bez marnowania czasu jest użycie terminalowego multipleksera takiego jak tmux i posiadanie menedżera plików
Poniższy skrypt powłoki osiąga właśnie to:
#!/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_EMULATORzawiera żądany emulator terminala dla nowych okien terminala (jeśli nie podoba Ci się domyślna wartość tego, co x-terminal-emulatorwskazuje) oraz opcję wiersza poleceń, aby polecenie mogło zostać wykonane wewnątrz emulatora.
Możesz zarejestrować skrypt obsługi plików jak każde inne skojarzenie typu pliku w menedżerze plików.