Excluir arquivos para a lixeira no OS X

8

Existe um método melhor e mais à prova de futuro para definir o emacs no OS X para excluir arquivos do lixo?

Eu tentei as instruções aqui :

(setq delete-by-moving-to-trash t)

(defun system-move-file-to-trash (file)
  "Use \"trash\" to move FILE to the system trash.
When using Homebrew, install it using \"brew install trash\"."
  (call-process (executable-find "trash")
    nil 0 nil
        file))

mas eles não funcionam:

Trashing...
(wrong-type-argument stringp nil)

Além disso, parece errado ter que instalar um programa separado para que o Emacs possa lixeira de arquivos. Além disso, não me lembrarei de instalar o programa "lixo" na próxima vez que fizer uma instalação limpa do OS X.

Atualização: adicionei isso ao meu .emacs e removi a chamada trashe parece funcionar. Eu me pergunto por que o Emacs no OSX assume como padrão o ~/.local/share/Trashlocal do FreeDesktop .

(setq trash-directory "~/.Trash")
Harvey
fonte
Você deve registrar um relatório de bug para isso.
Nano
enviou um relatório de erro.
Harvey
4
Você pode querer fazer o checkout da osx-trashembalagem em Melpa github.com/lunaryorn/osx-trash.el
waymondo
//, até o ELPA está estragando tudo, aparentemente: stackoverflow.com/questions/36187765/…
Nathan Basanese 23/03/16

Respostas:

6

É necessário o seguinte:

(setq delete-by-moving-to-trash t)
(setq trash-directory "~/.Trash")

A função move-file-to-trashpossui três testes: (1) se trash-directoryestá definido; (2) se (fboundp 'system-move-file-to-trash); e (3) (t . . . o catch-all que usa ~/.local/share... O segundo teste sempre falha no OSX 10.6.8 quando construído com a opção padrão de --with-ns. No momento, não tenho acesso a outras versões do OSX.

lista de leis
fonte
No entanto faixas OS X al onde o arquivo veio de se utilizar o comércio a partir do Finder e que não ocorre aqui - por isso, note que esta não é uma implementação completa, mas muitas vezes bom o suficiente
user151019
3

Definir a função system-move-file-to-trashdesta maneira deve ser suficiente:

(defun system-move-file-to-trash (file)
  (call-process "trash" nil nil nil file))

se você não tiver trashinstalado, o Emacs informará. então, não defina a variável, trash-directorypois trashfaz isso para você.

Sobre o comportamento do lixo do Emacs:

move-file-to-lixo é uma função interativa do Lisp compilada em 'files.el'.

(mover arquivo para a lixeira FILENAME)

Mova o arquivo (ou diretório) chamado FILENAME para a lixeira. Quando 'excluir por mover para a lixeira' é zero, essa função é chamada por 'delete-file' e 'delete-directory' em vez de excluir os arquivos imediatamente.

Se a função 'sistema-mover-arquivo-para-lixo' for definida, chame-a com FILENAME como argumento. Caso contrário, se 'trash-directory' for nulo, mova FILENAME para esse diretório. Caso contrário, lixeira FILENAME usando as convenções do freedesktop.org, como os ambientes de área de trabalho GNOME, KDE e XFCE. O Emacs move apenas os arquivos para o "lixo doméstico", ignorando as latas de lixo por volume.

Acho que (setq trash-directory "~/.Trash")não está funcionando: o Finder não poderá recuperar esses arquivos, pois (pelo menos) não sabe de onde esses arquivos vêm.

xuchunyang
fonte
3

Eu tenho usado o pacote osx-trash . Ele funciona com ou sem o trashutilitário de linha de comando e se integra corretamente ao diretório macOS Trash.

Daniel Matz
fonte
Sem o trashutilitário de linha de comando, você pode ouvir o som do lixo. Com o trashutilitário de linha de comando, é mais rápido.
Raoul HATTERER