Function: filesets-run-cmd

filesets-run-cmd is an interactive and byte-compiled function defined in filesets.el.gz.

Signature

(filesets-run-cmd &optional CMD-NAME FILESET MODE)

Documentation

Run CMD-NAME (see filesets-commands) on FILESET.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/filesets.el.gz
(defun filesets-run-cmd (&optional cmd-name fileset mode)
  "Run CMD-NAME (see `filesets-commands') on FILESET."
  (interactive)
  (let* ((cmd-name (or cmd-name
		       (completing-read "Select command: " filesets-commands
					nil t)))
	 (name  (or fileset
		    (completing-read "Select fileset: " filesets-data nil t))))
    (when (and cmd-name name)
      (let* ((event (if (equal cmd-name "Grep <<selection>>")
                        'on-grep
		      'on-cmd))
	     (files (if (and fileset
			     (or (equal mode :ingroup)
				 (equal mode :tree)))
			(filesets-get-filelist fileset mode event)
		      (filesets-get-filelist
		       (filesets-get-fileset-from-name name)
		       mode event))))
	(when files
	  (let ((fn   (filesets-cmd-get-fn cmd-name))
		(args
		 (dlet ((filesets--files files))
		   (filesets-cmd-get-args cmd-name))))
	    (if (memq fn '(multi-isearch-files multi-isearch-files-regexp))
		(apply fn args)
	      (dolist (this files nil)
		(save-excursion
		  (save-restriction
		    (let ((buffer (filesets-find-file this)))
		      (when buffer
			(goto-char (point-min))
			(cond
			 ((stringp fn)
			  (let* ((args
				  (mapconcat
				   (lambda (this)
				     (filesets-run-cmd--repl-fn
				      this
				      (lambda (this)
					(format "%s" this))))
				   args
				   " "))
				 (cmd (concat fn " " args)))
			    (filesets-cmd-show-result
			     cmd (shell-command-to-string cmd))))
			 ((symbolp fn)
			  (apply fn
                                 (mapcan (lambda (this)
                                           (filesets-run-cmd--repl-fn
					    this
					    'list))
					 args))))))))))))))))