Pourquoi c'est une question difficile
La question présente quelques défis:
nautilus
ne communique pas directement depuis la ligne de commande, pour obtenir le répertoire actuellement actif par exemple, et vous ne pouvez pas "envoyer" le dossier actuellement ouvert (-window) vers un autre répertoire à partir de la ligne de commande.
- Dans le chemin d'accès actuel, comme demandé via
"NAUTILUS_SCRIPT_CURRENT_URI"
, Nautilus ne renvoie pas le chemin d'accès réel au dossier actuel, mais "voit" le lien comme s'il s'agissait d'un dossier réel.
La solution est donc aussi sale que possible; nous devons trouver des solutions. Ci-dessous quatre options pour résoudre le problème.
1. clic droit pour monter d'un niveau
Pour obtenir le vrai chemin vers le répertoire courant, nous devons récupérer des informations à partir du lien. Nous pouvons le faire soit en utilisant ls -l
le lien, qui affichera par exemple:
lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
où la section après ->
est le vrai chemin à l'intérieur du lien symbolique, ou, en utilisant python
:
real = os.path.realpath("/path")
En utilisant cela dans un nautilus
script, nous pouvons indirectement obtenir le chemin réel vers le fichier ou le dossier actuel.
Ensuite, si nous avons le chemin, comment faire remonter le nautile d'un niveau?
Encore une fois, nous ne pouvons pas résoudre ce problème et garder nos mains propres. Pour monter d'un niveau, nous éditons d'abord un peu le chemin trouvé, à partir de:
/path/to/a/folder
dans
/path/to/a
puis, en utilisant xdotool
pour simuler Ctrl+ L(le raccourci GUI pour insérer un chemin dans une fenêtre nautilus, puisqu'il n'y a pas d'option cli pour se déplacer vers un autre répertoire en utilisant la fenêtre courante ), et ensuite faire xclip
coller le chemin édité + Enter, nous avons une solution de travail !
En pratique
Nous sommes dans un dossier, ouvert à partir d'un lien ("Lien vers télégramme") sur mon bureau. Le vrai dossier est un sous-dossier de mon Downloads
dossier:
Ensuite, si nous faisons un clic droit sur l' un des fichiers à l'intérieur du dossier pour exécuter le script:
Automatiquement, le chemin vers le répertoire supérieur est inséré:
Et, aussi automatiquement, Returnest pressé, et nous remontons d'un niveau de répertoire:
Le script
#!/usr/bin/env python3
import subprocess
import os
import time
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = os.path.abspath(os.path.join(real, os.pardir))
run("xdotool key Control_L+l")
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
Comment installer
Le script a besoin des deux xdotool
et xclip
:
sudo apt-get install xdotool xclip
créer, s'il n'existe pas déjà, le répertoire
~/.local/share/nautilus/scripts
Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous level_up
(sans extension) ~/.local/share/nautilus/scripts
et rendez-le exécutable
- Vous devrez peut-être vous déconnecter puis vous reconnecter.
Vous devriez maintenant pouvoir exécuter le script en cliquant avec le bouton droit sur un fichier (n'importe lequel)> scripts> level_up:
[ EDIT ] J'ai changé le script ci-dessus pour coller le chemin dans la nautilus
fenêtre, au lieu de le xdotool
taper . C'est needs
xclip
à installer, mais c'est une amélioration majeure, surtout sur les très longs chemins.
2. Alternativement, ouvrez une nouvelle fenêtre nautilus dans le répertoire supérieur
Vous pouvez éviter d'utiliser xdotool
, en ouvrant le script une nouvelle fenêtre nautilus, dans le répertoire parent. Le script serait alors encore plus court:
#!/usr/bin/env python3
import subprocess
import os
def run(cmd):
subprocess.call(cmd)
current = os.getenv("NAUTILUS_SCRIPT_CURRENT_URI").replace("file://", "").replace("%20", " ")
real = os.path.realpath(current)
up = real[:real.rfind("/")]
subprocess.Popen(["nautilus", up])
Dans ce cas, vous n'auriez pas besoin d'installer xdotool
. Nous pourrions même étendre le script en fermant la fenêtre d'origine et en plaçant la nouvelle fenêtre exactement dans la même position (& taille).
L'inconvénient est que l'historique de la fenêtre d'origine est perdu de cette façon.
3. Une solution supplémentaire: moyen alternatif de créer (automatiquement) des liens
Ne concerne pas les liens existants, mais lorsqu'il est utilisé à partir de l'interface graphique, un script nautilus pour créer automatiquement des .desktop
fichiers exécutables par clic droit peut être utile:
clic droit sur le répertoire pour créer un raccourci (se comportant comme un lien)
Contrairement aux liens symboliques, ces liens vous mèneront au dossier réel, sans se comporter comme un dossier lui-même:
Le script
#!/usr/bin/env python3
import subprocess
import os
current = os.getenv(
"NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"
).replace("file://", "").replace("%20", " ").strip()
if os.path.isdir(current):
parent = os.path.abspath(os.path.join(current, os.pardir))
fldr_path = '"'+current+'"'
folder = current[current.rfind("/")+1:]
linkfilename = parent+"/"+folder+"link.desktop"
linkdata = [
"[Desktop Entry]",
"Type=Application",
"Name=Link to -> "+folder,
"Icon=folder",
"Exec=nautilus "+fldr_path,
]
with open(linkfilename, "wt") as wt:
for l in linkdata:
wt.write(l+"\n")
command = "chmod +x "+"'"+linkfilename+"'"
subprocess.Popen(["/bin/bash", "-c", command])
Comment utiliser
- Copiez le script dans un fichier vide, enregistrez-le sous
make_link
(sans extension) ~/.local/share/nautilus/scripts
et rendez-le exécutable
- Utilisez le script en le choisissant comme option de clic droit comme dans la première image. Un
.desktop
fichier exécutable sera créé dans le même répertoire, déplacez-le ailleurs si nécessaire; le chemin lié est absolu.
Donnez au lien une icône distinctive
Vous pouvez donner au lien alternatif une icône distinctive. Si vous recherchez dans le répertoire /usr/share/icons
"dossier", de nombreuses options valides apparaissent.
Si dans le script la ligne "Icon=folder",
est remplacée par Icon=stock_folder-copy,
(utilisez le nom de l'icône sans extension), le résultat sur mon système est:
Bien sûr, vous pouvez également utiliser votre propre icône personnalisée, mais si vous utilisez des chemins d'accès complets (ne pas utiliser ~
), vous devez inclure l'extension de l'icône.
4. Accédez au répertoire supérieur avec une touche de raccourci
Probablement l'option la plus pratique; avec la fenêtre nautilus devant, appuyez sur une touche de raccourci pour déplacer un répertoire vers le haut.
Le script
#!/usr/bin/env python3
import subprocess
import time
import os
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def run(cmd):
subprocess.call(["/bin/bash", "-c", cmd])
# get information on the active window
front = get(["xprop", "-id", get(["xdotool", "getactivewindow"])])
# (only) if it is a "normal" nautilus window, take action
if 'WM_CLASS(STRING) = "nautilus", "Nautilus"' in front:
# "virtually" press Ctrl + l
run("xdotool key Control_L+l"); time.sleep(0.05)
# copy the current path, calculate the "real" parent directory
real = os.path.realpath(get(["xclip", "-o"]))
up = os.path.abspath(os.path.join(real, os.pardir))
time.sleep(0.1)
# enter the superior directory
run("printf '"+up+"' | xclip -selection clipboard")
run("xdotool key Control_L+v")
# confirm by virtually press Return
time.sleep(0.1)
run("xdotool key Return")
Utiliser
Pour cette solution, à la fois xclip
et ont xdotool
besoin d'être sur votre système.
sudo apt-get install xdodool xclip
Copiez le script dans un fichier vide, enregistrez-le sous level_up.py
(n'importe où).
Ajoutez-le à une touche de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
python3 /path/to/level_up.py
NB Les options de raccourci sont un peu limitées dans ce cas, car le script lui - même simuleraCtrl+L, etCtrl+Alt+Lvous fera vous déconnecter ...Ctrl+\a bien fonctionné sur mon système.
Explication
Ce script simule également Ctrl+ L, mais au lieu d'utiliser nautilus "NAUTILUS_SCRIPT_CURRENT_URI"
, il utilisexclip
pour copier le chemin sélectionné automatiquement dans la fenêtre nautilus. Comme l'option 1, le script calcule ensuite le chemin réel et dérive le répertoire supérieur.
Cette option peut être utile si vous préférez le clavier à un clic droit.