X-Git-Url: https://git.hcoop.net/bpt/emacs.git/blobdiff_plain/4f9d7df139695e97cd1772d41940500480585df7..10339fa90363cf20a9e379c083df83405718302d:/lisp/filesets.el diff --git a/lisp/filesets.el b/lisp/filesets.el index 064cfbfb0e..269ee331fb 100644 --- a/lisp/filesets.el +++ b/lisp/filesets.el @@ -1,9 +1,8 @@ ;;; filesets.el --- handle group of files -;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 -;; Free Software Foundation, Inc. +;; Copyright (C) 2002-2011 Free Software Foundation, Inc. -;; Author: Thomas Link +;; Author: Thomas Link ;; Maintainer: FSF ;; Keywords: filesets convenience @@ -144,8 +143,8 @@ file -- before loading filesets.el. So, when should you think about setting this value to t? If filesets.el is loaded before user customizations. Thus, if (require 'filesets) -precedes the custom-set-variables command or, for XEmacs, if init.el is -loaded before custom.el, set this variable to t.") +precedes the `custom-set-variables' command or, for XEmacs, if init.el +is loaded before custom.el, set this variable to t.") ;;; utils @@ -307,21 +306,25 @@ SYM to VAL and return t. If INIT-FLAG is non-nil, set with (defcustom filesets-menu-name "Filesets" "Filesets' menu name." :set (function filesets-set-default) - :type 'sexp + :type 'string :group 'filesets) -(defcustom filesets-menu-path nil +(defcustom filesets-menu-path '("File") ; cf recentf-menu-path "The menu under which the filesets menu should be inserted. See `add-submenu' for documentation." :set (function filesets-set-default) - :type 'sexp + :type '(choice (const :tag "Top Level" nil) + (sexp :tag "Menu Path")) + :version "23.1" ; was nil :group 'filesets) -(defcustom filesets-menu-before "File" +(defcustom filesets-menu-before "Open File..." ; cf recentf-menu-before "The name of a menu before which this menu should be added. See `add-submenu' for documentation." :set (function filesets-set-default) - :type 'sexp + :type '(choice (string :tag "Name") + (const :tag "Last" nil)) + :version "23.1" ; was "File" :group 'filesets) (defcustom filesets-menu-in-menu nil @@ -344,15 +347,13 @@ See `add-submenu' for documentation." :group 'filesets) ;;(defcustom filesets-menu-cnvfp-flag nil -;; "*Non-nil means show \"Convert :pattern to :files\" entry for :pattern menus." +;; "Non-nil means show \"Convert :pattern to :files\" entry for :pattern menus." ;; :set (function filesets-set-default!) ;; :type 'boolean ;; :group 'filesets) (defcustom filesets-menu-cache-file - (if (featurep 'xemacs) - "~/.xemacs/filesets-cache.el" - (concat user-emacs-directory "filesets-cache.el")) + (locate-user-emacs-file "filesets-cache.el") "File to be used for saving the filesets menu between sessions. Set this to \"\", to disable caching of menus. Don't forget to check out `filesets-menu-ensure-use-cached'." @@ -565,12 +566,18 @@ including directory trees to the menu can take a lot of memory." :group 'filesets) (defcustom filesets-commands - `(("Query Replace" - query-replace + `(("Isearch" + multi-isearch-files + (filesets-cmd-isearch-getargs)) + ("Isearch (regexp)" + multi-isearch-files-regexp + (filesets-cmd-isearch-getargs)) + ("Query Replace" + perform-replace (filesets-cmd-query-replace-getargs)) ("Query Replace (regexp)" - query-replace-regexp - (filesets-cmd-query-replace-getargs)) + perform-replace + (filesets-cmd-query-replace-regexp-getargs)) ("Grep <>" "grep" ("-n " filesets-get-quoted-selection " " "<>")) @@ -841,10 +848,10 @@ subfile can't be found. in the pattern holding the subfile's name. 0 refers the whole match, 1 to the first group. -:stubp FUNCTION ... if (FUNCTION MASTER INCLUDED-FILE) returns non-nil, +:stubp FUNCTION ... If (FUNCTION MASTER INCLUDED-FILE) returns non-nil, INCLUDED-FILE is a stub -- see below. -:stub-flag ... files of this type are stubs -- see below. +:stub-flag ... Files of this type are stubs -- see below. :scan-depth INTEGER (default: 0) ... Whether included files should be rescanned. Set this to 0 to disable re-scanning of included file. @@ -966,9 +973,11 @@ being an association list with the fields: :tree ROOT-DIR PATTERN ... a base directory and a file pattern -:pattern DIR PATTERN ... PATTERN is a regular expression comprising path -and file pattern -- e.g. 'PATH/^REGEXP$'. Note the `^' at the beginning -of the file name pattern. +:pattern DIR PATTERN ... a base directory and a regexp matching + files in that directory. Usually, + PATTERN has the form '^REGEXP$'. Unlike + :tree, this form does not descend + recursively into subdirectories. :filter-dirs-flag BOOLEAN ... is only used in conjunction with :tree. @@ -1268,11 +1277,11 @@ the \"Grep <>\" command on-capture-output (:capture-output) ... Capture output of an external viewer -on-ls ... not used +on-ls ... Not used -on-cmd ... not used +on-cmd ... Not used -on-close-all ... not used" +on-close-all ... Not used" (let ((def (filesets-eviewer-get-props (or entry (filesets-get-external-viewer filename))))) @@ -1542,8 +1551,7 @@ First, save the buffer's contents using SAVE-FUNCTION. Then, kill buffer if `buffer-modified-p' returns nil. SAVE-FUNCTION takes no argument, but works on the current buffer." - (save-excursion - (set-buffer buffer) + (with-current-buffer buffer (if (buffer-modified-p) (funcall save-function)) (if (not (buffer-modified-p)) @@ -1623,38 +1631,40 @@ Replace or <> with filename." (when files (let ((fn (filesets-cmd-get-fn cmd-name)) (args (filesets-cmd-get-args cmd-name))) - (dolist (this files nil) - (save-excursion - (save-restriction - (let ((buffer (filesets-find-file this))) - (when buffer - (goto-char (point-min)) - (let () - (cond - ((stringp fn) - (let* ((args - (let ((txt "")) - (dolist (this args txt) - (setq txt - (concat txt - (filesets-run-cmd--repl-fn - this - (lambda (this) - (if (equal txt "") "" " ") - (format "%s" this)))))))) - (cmd (concat fn " " args))) - (filesets-cmd-show-result - cmd (shell-command-to-string cmd)))) - ((symbolp fn) - (let ((args - (let ((argl nil)) - (dolist (this args argl) - (setq argl - (append argl - (filesets-run-cmd--repl-fn - this - 'list))))))) - (apply fn args)))))))))))))))) + (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)) + (progn + (cond + ((stringp fn) + (let* ((args + (let ((txt "")) + (dolist (this args txt) + (setq txt + (concat txt + (filesets-run-cmd--repl-fn + this + (lambda (this) + (if (equal txt "") "" " ") + (format "%s" this)))))))) + (cmd (concat fn " " args))) + (filesets-cmd-show-result + cmd (shell-command-to-string cmd)))) + ((symbolp fn) + (let ((args + (let ((argl nil)) + (dolist (this args argl) + (setq argl + (append argl + (filesets-run-cmd--repl-fn + this + 'list))))))) + (apply fn args))))))))))))))))) (defun filesets-get-cmd-menu () "Create filesets command menu." @@ -1668,16 +1678,19 @@ Replace or <> with filename." ;;; sample commands (defun filesets-cmd-query-replace-getargs () "Get arguments for `query-replace' and `query-replace-regexp'." - (let* ((from-string (read-string "Filesets query replace: " - "" - 'query-replace-history)) - (to-string (read-string - (format "Filesets query replace %s with: " from-string) - "" - 'query-replace-history)) - (delimited (y-or-n-p - "Filesets query replace: respect word boundaries? "))) - (list from-string to-string delimited))) + (let ((common (query-replace-read-args "Filesets query replace" nil t))) + (list (nth 0 common) (nth 1 common) t nil (nth 2 common) nil + multi-query-replace-map))) + +(defun filesets-cmd-query-replace-regexp-getargs () + "Get arguments for `query-replace' and `query-replace-regexp'." + (let ((common (query-replace-read-args "Filesets query replace" t t))) + (list (nth 0 common) (nth 1 common) t t (nth 2 common) nil + multi-query-replace-map))) + +(defun filesets-cmd-isearch-getargs () + "Get arguments for `multi-isearch-files' and `multi-isearch-files-regexp'." + (and (boundp 'files) (list files))) (defun filesets-cmd-shell-command-getargs () "Get arguments for `filesets-cmd-shell-command'." @@ -2520,5 +2533,4 @@ Set up hooks, load the cache file -- if existing -- and build the menu." ;; sentence-end-double-space:t ;; End: -;; arch-tag: 2c03f85f-c3df-4cec-b0a3-b46fd5592d70 ;;; filesets.el ends here