Mercurial > emacs
diff src/fileio.c @ 96489:b76b9628d74f
Changes from Toru Tsuneyoshi for using Trash can when deleting files.
* files.el (backup-extract-version): Handle versioned directories.
(trash-directory): New variable.
(move-file-to-trash): New function.
* cus-start.el (delete-by-moving-to-trash): Declare for custom.
* lisp.h (Qdelete_file, Qdelete_directory): Declare extern.
* fileio.c (delete_by_moving_to_trash, Qmove_file_to_trash): New vars.
(syms_of_fileio): Initialize and export them.
(Fdelete_directory, Fdelete_file): Optionally delete via trash.
* w32fns.c (FOF_NO_CONNECTED_ELEMENTS): Define if not already.
(Fsystem_move_file_to_trash): New function.
(syms_of_w32fns): Export it to lisp.
author | Jason Rumney <jasonr@gnu.org> |
---|---|
date | Wed, 02 Jul 2008 13:19:07 +0000 |
parents | ddedcecb18ef |
children | cb1bfa1dca4f |
line wrap: on
line diff
--- a/src/fileio.c Wed Jul 02 13:17:41 2008 +0000 +++ b/src/fileio.c Wed Jul 02 13:19:07 2008 +0000 @@ -213,6 +213,13 @@ int write_region_inhibit_fsync; #endif +/* Non-zero means call move-file-to-trash in Fdelete_file or + Fdelete_directory. */ +int delete_by_moving_to_trash; + +/* Lisp function for moving files to trash. */ +Lisp_Object Qmove_file_to_trash; + extern Lisp_Object Vuser_login_name; #ifdef WINDOWSNT @@ -2674,6 +2681,9 @@ if (!NILP (handler)) return call2 (handler, Qdelete_directory, directory); + if (delete_by_moving_to_trash) + return call1 (Qmove_file_to_trash, directory); + encoded_dir = ENCODE_FILE (directory); dir = SDATA (encoded_dir); @@ -2707,6 +2717,9 @@ if (!NILP (handler)) return call2 (handler, Qdelete_file, filename); + if (delete_by_moving_to_trash) + return call1 (Qmove_file_to_trash, filename); + encoded_file = ENCODE_FILE (filename); if (0 > unlink (SDATA (encoded_file))) @@ -6358,6 +6371,14 @@ write_region_inhibit_fsync = 0; #endif + DEFVAR_BOOL ("delete-by-moving-to-trash", &delete_by_moving_to_trash, + doc: /* Specifies whether to use the system's trash can. +When non-nil, the function `move-file-to-trash' will be used by +`delete-file' and `delete-directory'. */); + delete_by_moving_to_trash = 0; + Qmove_file_to_trash = intern ("move-file-to-trash"); + staticpro (&Qmove_file_to_trash); + defsubr (&Sfind_file_name_handler); defsubr (&Sfile_name_directory); defsubr (&Sfile_name_nondirectory);