Mercurial > emacs
diff src/fileio.c @ 108223:261591829d04
Add optional arg to delete-file to force deletion (Bug#6070).
* eval.c (internal_condition_case_n): Rename from
internal_condition_case_2.
(internal_condition_case_2): New function.
* xdisp.c (safe_call): Use internal_condition_case_n.
* fileio.c (Fdelete_file, internal_delete_file): New arg FORCE.
(internal_delete_file, Frename_file): Callers changed.
* buffer.c (Fkill_buffer):
* callproc.c (delete_temp_file): Callers changed (Bug#6070).
* lisp.h: Update prototypes.
* diff.el (diff-sentinel):
* epg.el (epg--make-temp-file, epg-decrypt-string)
(epg-verify-string, epg-sign-string, epg-encrypt-string):
* jka-compr.el (jka-compr-partial-uncompress)
(jka-compr-call-process, jka-compr-write-region, jka-compr-load):
* server.el (server-sentinel): Use delete-file's new FORCE arg
(Bug#6070).
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Mon, 03 May 2010 11:01:21 -0400 |
parents | f4b0e5358091 |
children | 973b5bc5fcfe |
line wrap: on
line diff
--- a/src/fileio.c Mon May 03 14:46:56 2010 +0200 +++ b/src/fileio.c Mon May 03 11:01:21 2010 -0400 @@ -2194,11 +2194,17 @@ return Qnil; } -DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 1, "fDelete file: ", +DEFUN ("delete-file", Fdelete_file, Sdelete_file, 1, 2, "fDelete file: \nP", doc: /* Delete file named FILENAME. If it is a symlink, remove the symlink. -If file has multiple names, it continues to exist with the other names. */) - (filename) +If file has multiple names, it continues to exist with the other names. + +If optional arg FORCE is non-nil, really delete the file regardless of +`delete-by-moving-to-trash'. Otherwise, \"deleting\" actually moves +it to the system's trash can if `delete-by-moving-to-trash' is non-nil. +Interactively, FORCE is non-nil if called with a prefix arg. */) + (filename, force) Lisp_Object filename; + Lisp_Object force; { Lisp_Object handler; Lisp_Object encoded_file; @@ -2217,7 +2223,7 @@ if (!NILP (handler)) return call2 (handler, Qdelete_file, filename); - if (delete_by_moving_to_trash) + if (delete_by_moving_to_trash && NILP (force)) return call1 (Qmove_file_to_trash, filename); encoded_file = ENCODE_FILE (filename); @@ -2234,14 +2240,15 @@ return Qt; } -/* Delete file FILENAME, returning 1 if successful and 0 if failed. */ +/* Delete file FILENAME, returning 1 if successful and 0 if failed. + FORCE means to ignore `delete-by-moving-to-trash'. */ int -internal_delete_file (filename) - Lisp_Object filename; +internal_delete_file (Lisp_Object filename, Lisp_Object force) { Lisp_Object tem; - tem = internal_condition_case_1 (Fdelete_file, filename, + + tem = internal_condition_case_2 (Fdelete_file, filename, force, Qt, internal_delete_file_1); return NILP (tem); } @@ -2335,7 +2342,7 @@ ) call2 (Qdelete_directory, file, Qt); else - Fdelete_file (file); + Fdelete_file (file, Qt); unbind_to (count, Qnil); } else