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?
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:
#!/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 script a besoin de wmctrl
, xdotool
et xclip:
Sudo apt-get install wmctrl xdotool xclip
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).
"NAUTILUS_SCRIPT_CURRENT_URI"
de Nautilus.xclip
)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.gnome-terminal
.Plus d'informations sur les scripts Nautilus ici .
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.
Cliquez avec le bouton droit (n'importe quel) fichier dans le répertoire (dans ce cas, mon bureau) comme ci-dessous:
Cliquez sur (ou soulevez sinon) la fenêtre du terminal que vous souhaitez utiliser, et le dossier se trouvera dans le répertoire:
#!/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)
Est exactement comme le premier script.
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.
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.
La manière la plus simple est la suivante:
cd
, space, puis Shift + Insert (or INS) coller le chemin. Frappé Enter.Pas besoin de scripts ou de travail supplémentaire.
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.
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.