web-dev-qa-db-fra.com

Comment ouvrir le répertoire Nautilus dans le Terminal actuel?

Je n'aime pas avoir des dizaines de terminaux ouverts. Est-il possible d'ajouter Ouvrir dans le terminal actuel au lieu de Ouvrir dans le terminal lors de l'utilisation de Nautilus?

13
Vitor Abella

Sale ou pas, la solution ci-dessous a parfaitement fonctionné dans les 30 minutes où je l’ai testée fréquemment. La solution fonctionne tant que vous pouvez cliquer avec le bouton droit sur un fichier (n'importe lequel) dans le répertoire:

1.

enter image description here

2.

enter image description here

3.

enter image description here

Script Nautilus

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

Comment utiliser

  1. Le script a besoin de wmctrl, xdotool et xclip:

    Sudo apt-get install wmctrl xdotool xclip
    
  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom open_in_terminal (sans extension) dans ~/.local/share/nautilus/scripts. Créez le répertoire si nécessaire. Rendre le script exécutable

C'est tout. Déconnectez-vous et reconnectez-vous. Le script est disponible comme dans l'image (2).

Explication

  • En cliquant avec le bouton droit sur un fichier, nous pouvons obtenir le chemin en utilisant le "NAUTILUS_SCRIPT_CURRENT_URI" de Nautilus.
  • Dans un script, nous pouvons ensuite charger ce chemin dans le presse-papiers (en utilisant xclip)
  • Par la suite, le script ouvre la fenêtre (le premier trouvé) gnome-terminal et colle le chemin, précédé de la commande cd. Puisque nous avons utilisé echo pour charger la ligne entière dans le presse-papiers, Return est inclus.

Remarques

  1. Il devrait être clair que rien ne doit fonctionner dans le terminal et que cela fonctionne mieux si une seule fenêtre de terminal est ouverte. S'il y en a plusieurs, le script sélectionne la plus ancienne fenêtre gnome-terminal.
  2. Le script doit être testé de manière approfondie dans la pratique. Pendant que je l’exécutais, le timing n’était pas un problème, pas même une seule fois, pas même lorsque le bureau devait "parcourir" quatre ou cinq fenêtres d’affichage pour se rendre à la fenêtre du terminal. SI des erreurs se produiraient cependant, avec quelques lignes de plus nous pourrions le faire réellement wait de manière intelligente pour que la fenêtre du terminal soit levée. Voyons ce qui se passe. Cela ne semble pas nécessaire.
  3. Puisque le script utilise le realpath , les répertoires liés fonctionneront également correctement.

Plus d'informations sur les scripts Nautilus ici .


Sinon, choisissez votre propre fenêtre de terminal si vous avez plusieurs

Si vous voulez pouvoir choisir dans la fenêtre de terminal dans laquelle vous voulez ouvrir le répertoire actuel (nautilus), utilisez le script ci-dessous.

Comment ça marche en pratique

  1. Cliquez avec le bouton droit (n'importe quel) fichier dans le répertoire (dans ce cas, mon bureau) comme ci-dessous:

    enter image description here

  2. Cliquez sur (ou soulevez sinon) la fenêtre du terminal que vous souhaitez utiliser, et le dossier se trouvera dans le répertoire:

    enter image description here

Le scénario

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

Installer

Est exactement comme le premier script.

Explication

Le script a une différence par rapport à la première: au lieu de lever automatiquement la première fenêtre de terminal trouvée, il attend que la première fenêtre de terminal soit active. Puis le cd est dans le répertoire à l'intérieur de cette fenêtre.

13
Jacob Vlijm

Je suis presque sûr qu'il n'y a aucun moyen de le faire, mais j'ai une solution de contournement pour vous qui pourrait aider.

Vous pouvez toujours glisser et déposer un répertoire de Nautilus dans une fenêtre de terminal. Nautilus le transmettra et le collera dans la ligne de commande. Vous pourrez ainsi faire cd, puis faire glisser le dossier sur le terminal et appuyer sur Entrée.

8
Jorge Castro

La manière la plus simple est la suivante:

  1. De nautile, appuyez sur Ctrl + L , cela ouvrira la barre d’adresse pour l’édition. appuyez sur la Ctrl+C
  2. Passez au terminal et tapez cd, space, puis Shift + Insert (or INS) coller le chemin. Frappé Enter.

Pas besoin de scripts ou de travail supplémentaire.

8

A mon avis, le seul moyen élégant de résoudre ce problème sans fusion est d'utiliser un multiplexeur de terminal tel que tmux et de disposer de votre gestionnaire de fichiers.

  • ouvrir de nouvelles fenêtres de terminal dans une session existante ou
  • démarrez un nouvel émulateur de terminal avec une nouvelle session tmux.

Le script Shell suivant réalise exactement cela:

#!/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 contient l'émulateur de terminal souhaité pour les nouvelles fenêtres de terminal (si vous n'aimez pas la valeur par défaut de x-terminal-emulator), ainsi qu'une option de ligne de commande pour l'exécution de la commande dans l'émulateur.

Vous pouvez enregistrer le script de gestionnaire de fichiers comme toute autre association de type de fichier dans votre gestionnaire de fichiers.

1
David Foerster