Wie öffne ich das Nautilus-Verzeichnis im aktuellen Terminal?

13

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?

Vitor Abella
quelle
Nur schmutzige Lösungen, soweit ich es mir vorstellen kann. Ich kann einen geben, wenn Sie damit
einverstanden

Antworten:

13

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:

1.

Bildbeschreibung hier eingeben

2.

Bildbeschreibung hier eingeben

3.

Bildbeschreibung hier eingeben

Nautilus-Schrift

#!/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)

Wie benutzt man

  1. Das Skript muss wmctrl, xdotoolund xclip:

    sudo apt-get install wmctrl xdotool xclip
    
  2. 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.

Erläuterung

  • Wenn Sie mit der rechten Maustaste auf eine Datei klicken, können Sie den Pfad mit nautilus 'ermitteln "NAUTILUS_SCRIPT_CURRENT_URI".
  • In einem Skript können wir diesen Pfad dann in die Zwischenablage laden (mit xclip)
  • Anschließend öffnet das Skript das (zuerst gefundene) gnome-terminalFenster und fügt den Pfad ein, dem der cdBefehl vorangestellt ist . Da wir früher echodie ganze Zeile in die Zwischenablage geladen haben, Returnist das enthalten.

Anmerkungen

  1. Es sollte klar sein, dass im Terminal nichts laufen sollte und es funktioniert am besten, wenn nur ein Terminalfenster geöffnet ist. Falls es mehrere gibt, wählt das Skript das älteste gnome-terminalFenster aus.
  2. Das Skript muss in der Praxis gründlich getestet werden. Während ich es ausführte, war das Timing selbst ein einziges Mal kein Problem, auch nicht, wenn der Desktop vier oder fünf Ansichtsfenster "durchlaufen" musste, um zum Terminalfenster zu gelangen. Wenn jedoch Fehler auftreten würden, könnten wir mit ein paar Zeilen mehr auf intelligente Weise darauf warten , dass das Terminalfenster geöffnet wird. Mal sehen was passiert. Es scheint nicht notwendig.
  3. Da das Skript den Realpath verwendet, funktionieren auch verknüpfte Verzeichnisse ordnungsgemäß.

Weitere Informationen zu Nautilus-Skripten finden Sie hier .


Alternativ können Sie Ihr eigenes Terminalfenster auswählen, wenn Sie mehrere haben

Wenn Sie auswählen möchten, in welchem Terminalfenster Sie das aktuelle Verzeichnis (nautilus) öffnen möchten, verwenden Sie das folgende Skript.

Wie es in der Praxis funktioniert

  1. Klicken Sie mit der rechten Maustaste auf (eine) Datei im Verzeichnis (in diesem Fall auf meinem Desktop) wie folgt:

    Bildbeschreibung hier eingeben

  2. Klicken Sie auf das Terminalfenster, das Sie verwenden möchten (oder heben Sie es anderweitig an), und es wird in das folgende Verzeichnis kopiert:

    Bildbeschreibung hier eingeben

Das Drehbuch

#!/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)

Installieren

Ist genau wie das erste Drehbuch.

Erläuterung

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.

Jacob Vlijm
quelle
Da Sie zum Starten des Skripts ohnehin eine Datei verwenden, entfernen Sie einfach den Dateinamen aus dem Pfad sys.argv [1]. es wird das Skript viel kürzer machen
Sergiy Kolodyazhnyy
1
@ TonyLancer das Menü erscheint nach dem Erstellen des Verzeichnisses ~/.local/share/nautilus/scriptsAbmelden und wieder in :)
Jacob Vlijm
1
@ Benny es funktioniert nur von Nautilus mit der rechten Maustaste.
Jacob Vlijm
1
@Benny Die Umgebung für das Skript wird vom übergeordneten Prozess übergeben. In diesem Fall ist Nautilus der übergeordnete Prozess des Skripts und richtet die Umgebung für das Skript ein. Wenn Sie versuchen, dasselbe mit dem Python-Interpreter oder einem Skript zu tun, hat es einen anderen übergeordneten Prozess. Daher wird es zurückgegeben, Noneweil es keine solche Variable gibt (außerhalb von Nautilus).
Sergiy Kolodyazhnyy
1
@JacobVlijm du bist großartig. Voll funktionsfähig! Jetzt habe ich verstanden, wie das zweite Skript funktioniert, Sie haben Recht mit dem Auslöser. Es ist wirklich ein schönes Gadget für die Ubuntu-Community. Natürlich können wir wie bei jedem Skript über viele Verbesserungen nachdenken, aber dieses macht den Job. Erwähnen Sie in Ihrer Antwort nur, dass das zweite Skript mit Alt Tab funktioniert.
Vitor Abella
8

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. cdZiehen Sie dann den Ordner auf das Terminal und drücken Sie die Eingabetaste.

Jorge Castro
quelle
8

Am einfachsten ist dies:

  1. Drücken Sie in Nautilus Ctrl+ L, um die Adressleiste zum Bearbeiten zu öffnen. Drücken Sie die Ctrl+C
  2. Wechseln Sie zum Terminal und geben Sie cdLeerzeichen und dann Shift+ ein, Insert (or INS)um den Pfad einzufügen. Hit Enter.

Keine Notwendigkeit für Skripte oder zusätzliche Arbeit.

Sergiy Kolodyazhnyy
quelle
Ich benutze Strg + Umschalt + V, um den Pfad einzufügen.
Katu
1
yup, das ist ein anderer Weg, um es zu tun. Linux hat eigentlich zwei Zwischenablagen, also ist Strg + Umschalt + V für Primär und Umschalt + Einfügen für Sekundär, aber da für die zweite nur zwei Tasten erforderlich sind, verwende ich diese meistens. Sie werden geteilt, es sei denn, Sie markieren etwas - das ist, wenn Sachen in die sekundäre Zwischenablage gehen
Sergiy Kolodyazhnyy
1

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

  • Öffnen Sie neue Terminalfenster in einer vorhandenen Sitzung oder
  • Starten Sie einen neuen Terminal-Emulator mit einer neuen tmux-Sitzung.

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_EMULATOREnthält den gewünschten Terminal-Emulator für neue Terminal-Fenster (falls Sie den Standard nicht mögen, auf den alles x-terminal-emulatorverweist) 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.

David Foerster
quelle