Mercurial > emacs
comparison 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 |
comparison
equal
deleted
inserted
replaced
96488:a30459da1bd7 | 96489:b76b9628d74f |
---|---|
210 | 210 |
211 #ifdef HAVE_FSYNC | 211 #ifdef HAVE_FSYNC |
212 /* Nonzero means skip the call to fsync in Fwrite-region. */ | 212 /* Nonzero means skip the call to fsync in Fwrite-region. */ |
213 int write_region_inhibit_fsync; | 213 int write_region_inhibit_fsync; |
214 #endif | 214 #endif |
215 | |
216 /* Non-zero means call move-file-to-trash in Fdelete_file or | |
217 Fdelete_directory. */ | |
218 int delete_by_moving_to_trash; | |
219 | |
220 /* Lisp function for moving files to trash. */ | |
221 Lisp_Object Qmove_file_to_trash; | |
215 | 222 |
216 extern Lisp_Object Vuser_login_name; | 223 extern Lisp_Object Vuser_login_name; |
217 | 224 |
218 #ifdef WINDOWSNT | 225 #ifdef WINDOWSNT |
219 extern Lisp_Object Vw32_get_true_file_attributes; | 226 extern Lisp_Object Vw32_get_true_file_attributes; |
2672 | 2679 |
2673 handler = Ffind_file_name_handler (directory, Qdelete_directory); | 2680 handler = Ffind_file_name_handler (directory, Qdelete_directory); |
2674 if (!NILP (handler)) | 2681 if (!NILP (handler)) |
2675 return call2 (handler, Qdelete_directory, directory); | 2682 return call2 (handler, Qdelete_directory, directory); |
2676 | 2683 |
2684 if (delete_by_moving_to_trash) | |
2685 return call1 (Qmove_file_to_trash, directory); | |
2686 | |
2677 encoded_dir = ENCODE_FILE (directory); | 2687 encoded_dir = ENCODE_FILE (directory); |
2678 | 2688 |
2679 dir = SDATA (encoded_dir); | 2689 dir = SDATA (encoded_dir); |
2680 | 2690 |
2681 if (rmdir (dir) != 0) | 2691 if (rmdir (dir) != 0) |
2704 filename = Fexpand_file_name (filename, Qnil); | 2714 filename = Fexpand_file_name (filename, Qnil); |
2705 | 2715 |
2706 handler = Ffind_file_name_handler (filename, Qdelete_file); | 2716 handler = Ffind_file_name_handler (filename, Qdelete_file); |
2707 if (!NILP (handler)) | 2717 if (!NILP (handler)) |
2708 return call2 (handler, Qdelete_file, filename); | 2718 return call2 (handler, Qdelete_file, filename); |
2719 | |
2720 if (delete_by_moving_to_trash) | |
2721 return call1 (Qmove_file_to_trash, filename); | |
2709 | 2722 |
2710 encoded_file = ENCODE_FILE (filename); | 2723 encoded_file = ENCODE_FILE (filename); |
2711 | 2724 |
2712 if (0 > unlink (SDATA (encoded_file))) | 2725 if (0 > unlink (SDATA (encoded_file))) |
2713 report_file_error ("Removing old name", list1 (filename)); | 2726 report_file_error ("Removing old name", list1 (filename)); |
6355 doc: /* *Non-nil means don't call fsync in `write-region'. | 6368 doc: /* *Non-nil means don't call fsync in `write-region'. |
6356 This variable affects calls to `write-region' as well as save commands. | 6369 This variable affects calls to `write-region' as well as save commands. |
6357 A non-nil value may result in data loss! */); | 6370 A non-nil value may result in data loss! */); |
6358 write_region_inhibit_fsync = 0; | 6371 write_region_inhibit_fsync = 0; |
6359 #endif | 6372 #endif |
6373 | |
6374 DEFVAR_BOOL ("delete-by-moving-to-trash", &delete_by_moving_to_trash, | |
6375 doc: /* Specifies whether to use the system's trash can. | |
6376 When non-nil, the function `move-file-to-trash' will be used by | |
6377 `delete-file' and `delete-directory'. */); | |
6378 delete_by_moving_to_trash = 0; | |
6379 Qmove_file_to_trash = intern ("move-file-to-trash"); | |
6380 staticpro (&Qmove_file_to_trash); | |
6360 | 6381 |
6361 defsubr (&Sfind_file_name_handler); | 6382 defsubr (&Sfind_file_name_handler); |
6362 defsubr (&Sfile_name_directory); | 6383 defsubr (&Sfile_name_directory); |
6363 defsubr (&Sfile_name_nondirectory); | 6384 defsubr (&Sfile_name_nondirectory); |
6364 defsubr (&Sunhandled_file_name_directory); | 6385 defsubr (&Sunhandled_file_name_directory); |