;;; filesets.el --- handle group of files
-;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+;; Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+;; Free Software Foundation, Inc.
-;; Author: Thomas Link <t.link@gmx.at>
+;; Author: Thomas Link <sanobast-emacs@yahoo.de>
;; Maintainer: FSF
;; Keywords: filesets convenience
;; This file is part of GNU Emacs.
-;; This program is free software; you can redistribute it and/or modify
+;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 3, or (at your option)
-;; any later version.
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
-;; This program is distributed in the hope that it will be useful,
+;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
-;; A copy of the GNU General Public License can be obtained from this
-;; program's author or from the Free Software Foundation, Inc.,
-;; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
(defvar filesets-version "1.8.4")
(defvar filesets-homepage
;; programs. See `filesets-external-viewers'.
;; BTW, if you close a fileset, files, which have been changed, will
-;; be silently saved. Change this behaviour by setting
+;; be silently saved. Change this behavior by setting
;; `filesets-save-buffer-fn'.
;;; Supported modes for inclusion groups (`filesets-ingroup-patterns'):
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
(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
: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'."
: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 <<selection>>"
"grep"
("-n " filesets-get-quoted-selection " " "<<file-name>>"))
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.
: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.
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)))))
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))
(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."
;;; 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'."
;; sentence-end-double-space:t
;; End:
-;; arch-tag: 2c03f85f-c3df-4cec-b0a3-b46fd5592d70
;;; filesets.el ends here