Nautilus movendo itens para Lixeira sem pedir confirmação

3

Como eu forço o Nautilus a exigir confirmação sim / não após pressionar a tecla delete?

Estou ciente da opção "Arquivos" - > "Preferências" - > "Comportamento": "Perguntar antes de esvaziar a lixeira ou excluir arquivos", mas ela está marcada e só se aplica ao esvaziamento da Lixeira.

Existe uma maneira de obter uma janela de confirmação antes que os arquivos sejam movidos para a Lixeira?

Antecedentes
O maior problema que eu tenho é que às vezes eu acidentalmente apertei a tecla delete no meu teclado sem nem perceber. Tenho certeza de que isso aconteceu e não posso viver com a ideia de examinar minha pasta de lixo para verificar se não vou jogar fora algo que não pretendia.

    
por Adam 22.02.2015 / 17:17

2 respostas

2

Não, o Unity não possui uma caixa de exclusão de confirmação, como o Windows. Essa é a razão pela qual o bin existe, por isso, se você cometeu um erro, poderá desfazê-lo pressionando a restauração.

    
por Virusboy 22.02.2015 / 17:32
1

O Nautilus não oferece uma opção de confirmação: solução?

O fato de o nautilus não fornecer uma opção, não significa que você tenha que correr o risco de perder acidentalmente arquivos se acidentalmente (e despercebido) pressionar a tecla Enter.

Você pode simplesmente executar um script em segundo plano, mantendo um olho nas ações de exclusão, usando o trash-cli -tools. Se você executar o script abaixo em segundo plano, ele fará duas coisas que impedirão a exclusão não percebida

  • Ele avisa sempre que você move um arquivo para o lixo:

    Sevocêclicarem"OK", nada acontece. Se você clicar em "Cancelar", a lixeira será aberta e você poderá restaurar seu item, desde que você saiba o nome e o caminho original para o arquivo.

  • Ele registra as últimas 50 ações de lixo (uma por linha)
    Em seu diretório inicial, o script cria um arquivo de log, trashlog.txt , com as últimas 50 ações da lixeira. Isso garante que você possa acompanhar o que aconteceu, mesmo se acidentalmente pressionar o botão "OK".

    Registratodososeventosdalixeiracomumregistrodedataehora,como:

    TueFeb2407:30:552015:'/home/jacob/Naamlozemap/Naamloosdocument(11ekopie)'TueFeb2407:31:092015:'/home/jacob/Naamlozemap/Naamlozemap'

Explicação

Emumloop,oscriptverificaalistadearquivosexcluídoscomaajudadetrash-cli,comocomando:

trash-list

Ocomandolistatodasaçõesdeexclusão,tambémde,e.drivesexternos.

Semprequenovositensaparecemnalista,oscriptchamaumajaneladoZenity,listandoosarquivos(recém)excluídos.Aomesmotempo,essesarquivossãolistadosemumarquivodelog:~/trashlog.txt.Paraevitarqueoarquivofiquegrande,eleapenas"lembra" (um pouco mais) os últimos 50 eventos de exclusão.

A janela do Zenity retorna um "diferente de zero" quando o botão Cancel é pressionado, e o script abre Trash (na verdade trash:/// ) para permitir que o usuário restaure o arquivo.

Como usar

  1. O script usa trash-cli

    sudo apt-get install trash-cli
    
  2. Copie o script abaixo em um arquivo vazio, salve-o como trash_secure (sem extensão) em ~/bin . Crie o diretório, se ainda não existir.

  3. Torne o script executável.
  4. Efetue logout e back in, teste-execute o script a partir de um terminal eindow com o comando:

    trash_secure
    
  5. Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar.

O script

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

Notas

  • O script também rastreia ações de lixo de unidades externas possivelmente conectadas. Se uma dessas unidades tiver um espaço em seu nome, o script será interrompido. Eu tive que renomear meu drive externo, chamado "My Passport", para dar um exemplo. Isso não é causado pelo próprio script, mas pelas ferramentas trash-cli que o script usa.
  • A maneira mais elegante seria (claro) diretamente "descarcerar" os arquivos se você pressionasse "Cancelar". As ferramentas trash-cli não fornecem uma opção para fazer isso a partir da linha de comando, exceto uma interativa.
por Jacob Vlijm 23.02.2015 / 18:17