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);