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
, xdotool
i 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-terminal
i wkleja ścieżkę, poprzedzoną cd
poleceniem. Ponieważ zwykliśmy echo
ładować całą linię do schowka, Returnjest wliczony w cenę.gnome-terminal
okno.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/scripts
wylogowania z katalogu i ponownym
None
ponieważ 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ć, cd
a następnie przeciągnij folder na terminal i naciśnij klawisz Enter.
Najprostszy sposób to:
cd
spację, 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_EMULATOR
zawiera żądany emulator terminala dla nowych okien terminala (jeśli nie podoba Ci się domyślna wartość tego, co x-terminal-emulator
wskazuje) 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.