Non mi piace aprire decine di terminali. C'è un modo per aggiungere Apri nel terminale corrente anziché Apri nel terminale quando si utilizza Nautilus?
Non mi piace aprire decine di terminali. C'è un modo per aggiungere Apri nel terminale corrente anziché Apri nel terminale quando si utilizza Nautilus?
Risposte:
Sporco o no, la soluzione di seguito ha funzionato perfettamente nei 30 minuti in cui l'ho testata frequentemente. La soluzione funziona fintanto che è possibile fare clic con il pulsante destro del mouse su un file (qualsiasi) all'interno della directory:
#!/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)
Le esigenze di script wmctrl
, xdotool
e xclip:
sudo apt-get install wmctrl xdotool xclip
Copia lo script in un file vuoto, salvalo come open_in_terminal
(nessuna estensione) in ~/.local/share/nautilus/scripts
. Creare la directory se necessario. Rendi eseguibile lo script
Questo è tutto. Esci e rientra e avrai lo script disponibile come nell'immagine (2).
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
finestra (prima trovata) e incolla il percorso, preceduto dal cd
comando. Dal momento che abbiamo usato echo
per caricare l'intera riga negli appunti, Returnè incluso.gnome-terminal
finestra più vecchia .Maggiori informazioni sugli script nautilus qui .
Se vuoi essere in grado di scegliere in quale finestra terminale aprire la directory (nautilus) corrente, usa lo script qui sotto.
Fai clic con il pulsante destro del mouse (qualsiasi) file all'interno della directory (in questo caso il mio desktop) come di seguito:
Fare clic su (o sollevare diversamente) la finestra del terminale che si desidera utilizzare e verrà indirizzata alla directory:
#!/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)
È esattamente come il primo copione.
Lo script ha una differenza rispetto al primo: invece di sollevare automaticamente la prima finestra del terminale trovata, attende che la prima finestra del terminale abbia lo stato attivo. Quindi cd nella directory all'interno di quella finestra.
~/.local/share/nautilus/scripts
disconnessione dalla directory e di nuovo :)
None
perché non esiste tale variabile (al di fuori di Nautilus).
Sono abbastanza sicuro che non c'è modo di farlo, tuttavia ho una soluzione alternativa per te che potrebbe aiutarti.
Puoi sempre trascinare e rilasciare una directory da Nautilus in una finestra del terminale e Nautilus passerà quella directory e la incollerà nella riga di comando, quindi potresti farlo cd
e quindi trascinare la cartella sul terminale e premere invio.
Il modo più semplice è questo:
cd
, spazio, quindi Shift+ Insert (or INS)per incollare il percorso. Hit Enter.Non c'è bisogno di script o lavoro extra.
A mio avviso, l'unico modo elegante per risolverlo senza doversi preoccupare è usare un multiplexer terminale come tmux e avere il tuo file manager
Il seguente script di shell ottiene proprio questo:
#!/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
contiene l'emulatore di terminale desiderato per le nuove finestre di terminale (se non ti piace il valore predefinito di qualunque x-terminal-emulator
punto) più un'opzione della riga di comando per l'esecuzione del comando all'interno dell'emulatore.
È possibile registrare lo script del gestore file come qualsiasi altra associazione di tipi di file nel file manager.