Ich mag es nicht, wenn Dutzende von Terminals geöffnet sind. Gibt es eine Möglichkeit, Open im aktuellen Terminal anstelle von Open im Terminal hinzuzufügen, wenn Nautilus verwendet wird?
Ich mag es nicht, wenn Dutzende von Terminals geöffnet sind. Gibt es eine Möglichkeit, Open im aktuellen Terminal anstelle von Open im Terminal hinzuzufügen, wenn Nautilus verwendet wird?
Antworten:
Schmutzig oder nicht, die Lösung unten hat in den 30 Minuten, die ich häufig getestet habe, einwandfrei funktioniert. Die Lösung funktioniert so lange, wie Sie mit der rechten Maustaste auf eine (beliebige) Datei im Verzeichnis klicken können:
#!/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)
Das Skript muss wmctrl
, xdotool
und xclip:
sudo apt-get install wmctrl xdotool xclip
Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter open_in_terminal
(ohne Erweiterung) in ~/.local/share/nautilus/scripts
. Erstellen Sie bei Bedarf das Verzeichnis. Machen Sie das Skript ausführbar
Das ist es. Melden Sie sich ab und wieder an, und Sie haben das Skript wie im Bild (2) verfügbar.
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
Fenster und fügt den Pfad ein, dem der cd
Befehl vorangestellt ist . Da wir früher echo
die ganze Zeile in die Zwischenablage geladen haben, Returnist das enthalten.gnome-terminal
Fenster aus.Weitere Informationen zu Nautilus-Skripten finden Sie hier .
Wenn Sie auswählen möchten, in welchem Terminalfenster Sie das aktuelle Verzeichnis (nautilus) öffnen möchten, verwenden Sie das folgende Skript.
Klicken Sie mit der rechten Maustaste auf (eine) Datei im Verzeichnis (in diesem Fall auf meinem Desktop) wie folgt:
Klicken Sie auf das Terminalfenster, das Sie verwenden möchten (oder heben Sie es anderweitig an), und es wird in das folgende Verzeichnis kopiert:
#!/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)
Ist genau wie das erste Drehbuch.
Das Skript hat einen Unterschied zum ersten: Anstatt das erste gefundene Terminalfenster automatisch zu öffnen, wartet es darauf, dass das erste Terminalfenster den Fokus hat. Dann befindet sich die CD in dem Verzeichnis in diesem Fenster.
~/.local/share/nautilus/scripts
Abmelden und wieder in :)
None
weil es keine solche Variable gibt (außerhalb von Nautilus).
Ich bin mir ziemlich sicher, dass es keine Möglichkeit gibt, dies zu tun, aber ich habe eine Problemumgehung für Sie, die helfen könnte.
Sie können ein Verzeichnis jederzeit von Nautilus in ein Terminalfenster ziehen und dort ablegen. Nautilus übergibt dieses Verzeichnis und fügt es in die Befehlszeile ein. cd
Ziehen Sie dann den Ordner auf das Terminal und drücken Sie die Eingabetaste.
Am einfachsten ist dies:
cd
Leerzeichen und dann Shift+ ein, Insert (or INS)um den Pfad einzufügen. Hit Enter.Keine Notwendigkeit für Skripte oder zusätzliche Arbeit.
Meiner Meinung nach ist der einzige elegante Weg, dies zu lösen, ohne herumzublödeln, einen Terminal-Multiplexer wie tmux zu verwenden und Ihren Dateimanager zu haben
Das folgende Shell-Skript erreicht genau das:
#!/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
Enthält den gewünschten Terminal-Emulator für neue Terminal-Fenster (falls Sie den Standard nicht mögen, auf den alles x-terminal-emulator
verweist) sowie eine Befehlszeilenoption, mit der der Befehl im Emulator ausgeführt werden kann.
Sie können das Dateihandlerskript wie jede andere Dateitypzuordnung in Ihrem Dateimanager registrieren.