Je n'aime pas avoir des dizaines de terminaux ouverts. Existe-t-il un moyen d'ajouter Ouvrir dans le terminal actuel au lieu de Ouvrir dans le terminal lors de l'utilisation de Nautilus?
Je n'aime pas avoir des dizaines de terminaux ouverts. Existe-t-il un moyen d'ajouter Ouvrir dans le terminal actuel au lieu de Ouvrir dans le terminal lors de l'utilisation de Nautilus?
Réponses:
Sale ou non, la solution ci-dessous a parfaitement fonctionné dans les 30 minutes que j'ai testées 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 wmctrl
, xdotool
et xclip:
sudo apt-get install wmctrl xdotool xclip
Copiez le script dans un fichier vide, enregistrez-le sous 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 ça. Déconnectez-vous et reconnectez-vous et vous aurez le script disponible comme dans l'image (2).
"NAUTILUS_SCRIPT_CURRENT_URI"
.xclip
)gnome-terminal
fenêtre (la première trouvée) et colle le chemin d'accès, précédé de la cd
commande. Puisque nous avions l'habitude echo
de charger toute la ligne dans le presse-papiers, Returnest inclus.gnome-terminal
fenêtre la plus ancienne .Plus d'informations sur les scripts nautilus ici .
Si vous voulez pouvoir choisir dans quelle fenêtre de terminal vous souhaitez ouvrir le répertoire courant (nautilus), utilisez le script ci-dessous.
Cliquez avec le bouton droit sur (n'importe quel) fichier dans le répertoire (dans ce cas, mon bureau) comme ci-dessous:
Cliquez sur (ou augmentez autrement) la fenêtre du terminal que vous souhaitez utiliser, et elle sera enregistrée 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 au premier: au lieu de déclencher automatiquement la première fenêtre de terminal trouvée, il attend que la première fenêtre de terminal soit active. Ensuite, il se place dans le répertoire de cette fenêtre.
~/.local/share/nautilus/scripts
déconnexion du répertoire et de retour :)
None
car il n'y a pas une telle variable (en dehors de Nautilus).
Je suis sûr qu'il n'y a aucun moyen de le faire, mais j'ai une solution de contournement pour vous qui pourrait vous aider.
Vous pouvez toujours faire glisser et déposer un répertoire de Nautilus dans une fenêtre de terminal et Nautilus passera ce répertoire et le collera dans la ligne de commande, vous pourrez donc le faire cd
, puis faire glisser le dossier sur le terminal et appuyer sur Entrée.
La façon la plus simple est la suivante:
cd
, espace, puis Shift+ Insert (or INS)pour coller le chemin. Frappez Enter.Pas besoin de scripts ou de travail supplémentaire.
À mon avis, la seule façon élégante de résoudre cela sans contourner est d'utiliser un multiplexeur de terminal comme tmux et d'avoir votre gestionnaire de fichiers
Le script shell suivant y parvient:
#!/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 ce qui x-terminal-emulator
pointe), plus une option de ligne de commande pour que la commande s'exécute à l'intérieur de l'émulateur.
Vous pouvez enregistrer le script du gestionnaire de fichiers comme toute autre association de type de fichier dans votre gestionnaire de fichiers.