Comment forcer Nautilus à demander une confirmation oui/non après avoir appuyé sur la touche Suppr?
Je connais les options "Fichiers" -> "Préférences" -> "Comportement": "Demander avant de vider la corbeille ou de supprimer des fichiers", mais cette option est cochée et ne s'applique que si vous videz la Corbeille.
Existe-t-il un moyen d’obtenir une fenêtre de confirmation avant que les fichiers ne soient déplacés vers la corbeille?
Contexte
Le problème majeur que j'ai, c’est que j’appuie parfois accidentellement sur la touche Suppr de mon clavier sans même que je m'en rende compte. Je suis sûr que cela est arrivé et je ne peux pas vivre avec l'idée de regarder dans mon dossier Corbeille pour vérifier si je ne vais pas jeter quelque chose que je ne voulais pas.
Non, Unity ne possède pas de boîte de confirmation de suppression comme Windows. C’est la raison pour laquelle la corbeille existe, donc si vous faites une erreur, vous pouvez la défaire en cliquant sur restaurer.
Le fait que nautilus ne soit pas une option ne signifie pas que vous devez prendre le risque de perdre accidentellement des fichiers si vous appuyez involontairement (et sans être remarqué) sur la touche Entrée.
Vous pouvez simplement exécuter un script en arrière-plan, en gardant un œil sur les actions de suppression, en utilisant trash-cli
-tools. Si vous exécutez le script ci-dessous en arrière-plan, deux actions sont mises en place pour empêcher toute suppression inaperçue.
Il vous avertit chaque fois que vous déplacez un fichier dans la corbeille:
Si vous cliquez sur "OK", rien ne se passe. Si vous cliquez sur "Annuler", la corbeille s'ouvrira et vous pourrez restaurer votre élément, puisque vous connaissez le nom et le chemin d'origine du fichier.
Il garde une trace des 50 dernières actions de la corbeille (une par ligne)
Dans votre répertoire de base, le script crée un fichier journal, _trashlog.txt
_, contenant les 50 dernières actions de la corbeille. Cela garantit que vous pouvez suivre ce qui s'est passé, même si vous avez accidentellement appuyé sur le bouton "OK".
Il enregistre tous les événements de la corbeille avec un horodatage, comme:
_Tue Feb 24 07:30:55 2015: '/home/jacob/Naamloze map/Naamloos document (11e kopie)'
Tue Feb 24 07:31:09 2015: '/home/jacob/Naamloze map/Naamloze map'
_
En boucle, le script vérifie la liste des fichiers supprimés à l'aide de _trash-cli
_, à l'aide de la commande:
_trash-list
_
La commande répertorie toutes les actions de suppression, également à partir de, par exemple. disques externes.
Chaque fois que de nouveaux éléments apparaissent dans la liste, le script appelle une fenêtre Zenity, répertoriant les fichiers (nouvellement) supprimés. Dans le même temps, ces fichiers sont répertoriés dans un fichier journal: _~/trashlog.txt
_. Pour éviter que le fichier ne devienne trop volumineux, il ne "se souvient" (un peu plus) que des 50 derniers événements de suppression.
La fenêtre Zenity renvoie une valeur "non nulle" lorsque vous appuyez sur le bouton Cancel
et que le script ouvre Trash
(en fait _trash:///
_) pour permettre à l'utilisateur de restaurer le fichier.
Le script utilise _trash-cli
_
_Sudo apt-get install trash-cli
_
Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom _trash_secure
_ (sans extension) dans _~/bin
_. Faites le répertoire s'il n'existe pas encore.
Déconnectez-vous et reconnectez-vous, exécutez le script à partir d'une fenêtre de terminal à l'aide de la commande suivante:
_trash_secure
_
Si tout fonctionne correctement, ajoutez-le à vos applications de démarrage: Dash> Applications de démarrage> Ajouter.
_#!/usr/bin/env python3
import subprocess
import os
import time
home = os.environ["HOME"]
trashlog = home+"/trashlog.txt"
def trashlist():
return subprocess.check_output(["trash-list"]).decode("utf-8")
def log_trash(last_trashed):
if not os.path.exists(trashlog):
with open(trashlog, "wt") as log:
log.write(last_trashed)
else:
with open(trashlog, "r") as log:
log = log.readlines()
log = log[50:]+[last_trashed] if len(log) > 50 else log+[last_trashed]
with open(trashlog, "wt") as out:
for it in log:
out.write(it)
out.write("\n")
trash1 = trashlist()
while True:
time.sleep (1)
trash2 = trashlist()
if trash2 != trash1:
diff = (" ").join(["'"+l[l.find("/"):]+"'" for l in trash2.splitlines() if not l in trash1])
log_trash(time.ctime()+": "+diff)
zenity_message = "zenity --list --width=600 --height=200 --title='Items were trashed' --text='' --column='Path' "+diff
try:
check = subprocess.check_output(["/bin/bash", "-c", zenity_message]).decode("utf-8")
if check != "":
subprocess.Popen(["nautilus", "trash:///"])
except subprocess.CalledProcessError:
subprocess.Popen(["nautilus", "trash:///"])
trash1 = trash2
_
trash-cli
_ utilisés par le script.trash-cli
_ n'offrent pas l'option de le faire à partir de la ligne de commande, à l'exception d'une solution interactive.