Function: eshell/rm
eshell/rm is a byte-compiled function defined in em-unix.el.gz.
Signature
(eshell/rm &rest ARGS)
Documentation
Implementation of rm in Lisp.
This is implemented to call either delete-file, kill-buffer,
kill-process, or unintern, depending on the nature of the
argument.
Source Code
;; Defined in /usr/src/emacs/lisp/eshell/em-unix.el.gz
(defun eshell/rm (&rest args)
"Implementation of rm in Lisp.
This is implemented to call either `delete-file', `kill-buffer',
`kill-process', or `unintern', depending on the nature of the
argument."
(setq args (flatten-tree args))
(eshell-eval-using-options
"rm" args
'((?h "help" nil nil "show this usage screen")
(?f "force" nil force-removal "force removal")
(?i "interactive" nil em-interactive "prompt before any removal")
(?n "preview" nil em-preview "don't change anything on disk")
(?r "recursive" nil em-recursive
"remove the contents of directories recursively")
(?R nil nil em-recursive "(same)")
(?v "verbose" nil em-verbose "explain what is being done")
:preserve-args
:external "rm"
:show-usage
:usage "[OPTION]... FILE...
Remove (unlink) the FILE(s).")
(unless em-interactive
(setq em-interactive (eshell-interactive-query-p
eshell-rm-interactive-query)))
(if (and force-removal em-interactive)
(setq em-interactive nil))
(while args
(let ((entry (if (stringp (car args))
(directory-file-name (car args))
(if (numberp (car args))
(number-to-string (car args))
(car args)))))
(cond
((bufferp entry)
(if em-verbose
(eshell-printn (format-message "rm: removing buffer `%s'" entry)))
(unless (or em-preview
(and em-interactive
(not (y-or-n-p (format-message
"rm: delete buffer `%s'? "
entry)))))
(eshell-funcalln 'kill-buffer entry)))
((eshell-processp entry)
(if em-verbose
(eshell-printn (format-message "rm: killing process `%s'" entry)))
(unless (or em-preview
(and em-interactive
(not (y-or-n-p (format-message
"rm: kill process `%s'? "
entry)))))
(eshell-funcalln 'kill-process entry)))
((symbolp entry)
(if em-verbose
(eshell-printn (format-message
"rm: uninterning symbol `%s'" entry)))
(unless
(or em-preview
(and em-interactive
(not (y-or-n-p (format-message
"rm: unintern symbol `%s'? "
entry)))))
(eshell-funcalln 'unintern entry)))
((stringp entry)
;; -f should silently ignore missing files (bug#15373).
(unless (and force-removal
(not (file-exists-p entry)))
(if (and (file-directory-p entry)
(not (file-symlink-p entry)))
(if (or em-recursive
eshell-rm-removes-directories)
(if (or em-preview
(not em-interactive)
(y-or-n-p
(format-message "rm: descend into directory `%s'? "
entry)))
(eshell-remove-entries (list entry) t))
(eshell-error (format "rm: %s: is a directory\n" entry)))
(eshell-remove-entries (list entry) t))))))
(setq args (cdr args)))
nil))