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