;ELC
;;; Compiled by LTX@Xue-LingTaos-MacBook-Pro.local on Wed Mar 16 23:09:20 2011
;;; from file /Users/LTX/Projects/Emacs/emacs/lisp/filesets.el
;;; in Emacs version 24.0.50.1
;;; with all optimizations.

;;; This file contains utf-8 non-ASCII characters,
;;; and so cannot be loaded into Emacs 22 or earlier.
(and (boundp 'emacs-version)
     (< (aref emacs-version (1- (length emacs-version))) ?A)
     (string-lessp emacs-version "23")
     (error "`filesets.el' was compiled for Emacs 23 or later"))

;;;;;;;;;;;;;;;;;;;;;;;


(byte-code "\301B\302\301!\204\303\301\304\"\210\305B\302\305!\204\303\305\306\"\210\301\207" [current-load-list filesets-version default-boundp set-default "1.8.4" filesets-homepage "http://members.a1.net/t.link/CompEmacsFilesets.html"] 3)
#@26 The whole filesets menu.
(defvar filesets-menu-cache nil (#$ . 791))
#@34 Filesets' cached version number.
(defvar filesets-cache-version nil (#$ . 866))
#@31 Filesets' cached system name.
(defvar filesets-cache-hostname nil (#$ . 952))
#@50 A plist containing files and their ingroup data.
(defvar filesets-ingroup-cache nil (#$ . 1036))
#@68 List of files already processed when searching for included files.
(defvar filesets-ingroup-files nil (#$ . 1139))
#@52 Non-nil means some fileset definition has changed.
(defvar filesets-has-changed-flag t (#$ . 1260))
#@46 An association list with filesets menu data.
(defvar filesets-submenus nil (#$ . 1366))
#@43 A list of buffers with updated menu bars.
(defvar filesets-updated-buffers nil (#$ . 1460))
#@70 Use cached data.  See `filesets-menu-ensure-use-cached' for details.
(defvar filesets-menu-use-cached-flag nil (#$ . 1558))
#@41 Non-nil means the cache needs updating.
(defvar filesets-update-cache-file-flag nil (#$ . 1688))
#@76 List of custom variables for which the next `set-default' will be ignored.
(defvar filesets-ignore-next-set-default nil (#$ . 1791))
#@101 Non-nil means the current buffer is an output buffer created by filesets.
Is buffer local variable.
(defvar filesets-output-buffer-flag nil (#$ . 1931))
#@73 An integer defining the level of verbosity.
0 means no messages at all.
(defvar filesets-verbosity 1 (#$ . 2090))
#@759 Make sure (X)Emacs uses filesets' cache.

Well, if you use XEmacs (prior to 21.5?) custom.el is loaded after
init.el.  This means that settings saved in the cache file (see
`filesets-menu-cache-file') will be overwritten by custom.el.  In order
to ensure the use of the cache file, set this variable to t -- which is
the default for XEmacs prior to 21.5.  If you want to change this value
put "(setq filesets-menu-ensure-use-cached VALUE)" into your startup
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.
(defvar filesets-menu-ensure-use-cached nil (#$ . 2211))
#@111 Remove all elements not conforming to COND-FN from list LST.
COND-FN takes one argument: the current element.
(defalias 'filesets-filter-list #[(lst cond-fn) "\305	\305\211\203 @\f\n!\203\306\nC\"A\211\204\n\305+\207" [rv lst elt #1=#:--cl-dolist-temp-- cond-fn nil append] 4 (#$ . 3033)])
#@68 Return the tail of LST for the head of which FSOM-PRED is non-nil.
(defalias 'filesets-ormap #[(fsom-pred lst) "\304\n\203	\204\n@!\203\n\202\nA\211\204	*\207" [lst fsom-rv fsom-lst fsom-pred nil] 3 (#$ . 3344)])
#@132 Return non-nil if FSS-PRED is non-nil for any element of FSS-LST.
Like `some', return the first value of FSS-PRED that is non-nil.
(defalias 'filesets-some #[(fss-pred fss-lst) "\300\301\215\207" [exit (byte-code "\305\211\203 \n@	!\211\203\306\307\f\"\210)\nA\211\204\305*\305\207" [fss-lst fss-this #1=#:--cl-dolist-temp-- fss-pred fss-rv nil throw exit] 4)] 2 (#$ . 3580)])
#@143 Find the first occurrence of FSM-ITEM in FSM-LST.
It is supposed to work like cl's `member*'.  At the moment only the :test
key is supported.
(defalias 'filesets-member #[(fsm-item fsm-lst &rest fsm-keys) "\303\304\"\206\305\306\307\n\")\207" [fsm-keys fsm-test fsm-lst plist-get :test equal filesets-ormap #[(fsm-this) "	\n\"\207" [fsm-test fsm-item fsm-this] 3]] 3 (#$ . 3977)])
#@45 Get the sublist of LST from BEG to END - 1.
(defalias 'filesets-sublist #[(lst beg &optional end) "\306	\206\nG\fW\203 \307
\f\n8C\"\fT\211\202\f
+\207" [beg end lst top i rv nil append] 5 (#$ . 4369)])
#@74 Select one command from CMD-LIST -- a string with space separated names.
(defalias 'filesets-select-command #[(cmd-list) "\302\303\304\"!\211\305\232?\205\306	\307	GSO!)\207" [cmd-list this shell-command-to-string format "which --skip-alias %s 2> /dev/null | head -n 1" "" file-name-nondirectory 0] 5 (#$ . 4589)])
#@19 Call "which CMD".
(defalias 'filesets-which-command #[(cmd) "\301\302\303\"!\207" [cmd shell-command-to-string format "which %s"] 4 (#$ . 4914)])
#@63 Call "which CMD" and return non-nil if the command was found.
(defalias 'filesets-which-command-p #[(cmd) "\301\302\303\"\304!\"\205
\207" [cmd string-match format "\\(/[^/]+\\)?/%s" filesets-which-command] 4 (#$ . 5067)])
#@77 Show a message only if LEVEL is greater or equal then `filesets-verbosity'.
(defalias 'filesets-message #[(level &rest args) "\303	!X\205\f\304\305\n\"\207" [level filesets-verbosity args abs apply message] 3 (#$ . 5300)])
#@32 Save filesets' customizations.
(defalias 'filesets-save-config #[nil "\300 \207" [customize-save-customized] 1 (#$ . 5531) nil])
#@50 Reset the cached values for one or all filesets.
(defalias 'filesets-reset-fileset #[(&optional fileset no-cache) "\203
\305	\306#\202\306\307\206\f?\211\207" [fileset filesets-submenus filesets-has-changed-flag filesets-update-cache-file-flag no-cache lax-plist-put nil t] 4 (#$ . 5666)])
#@31 Set-default wrapper function.
(defalias 'filesets-set-config #[(fileset var val) "\303!\210\304	\n\"\207" [fileset var val filesets-reset-fileset set-default] 3 (#$ . 5974)])
#@312 Set-default wrapper function used in conjunction with `defcustom'.
If SYM is in the list `filesets-ignore-next-set-default', delete
it from that list, and return nil.  Otherwise, set the value of
SYM to VAL and return t.  If INIT-FLAG is non-nil, set with
`custom-initialize-set', otherwise with `set-default'.
(defalias 'filesets-set-default #[(sym val &optional init-flag) "	\235\211\203\305	\"\202!\203\306\f\"\210\202!\307\f\"\210\n)?\207" [sym filesets-ignore-next-set-default ignore-flag init-flag val delete custom-initialize-set set-default] 4 (#$ . 6157)])
#@72 Call `filestes-set-default' and reset cached data (i.e. rebuild menu).
(defalias 'filesets-set-default! #[(sym val) "\302	\"\205	\303 \207" [sym val filesets-set-default filesets-reset-fileset] 3 (#$ . 6742)])
#@64 Call `filestes-set-default' and reset filesets' standard menu.
(defalias 'filesets-set-default+ #[(sym val) "\303	\"\205\n\304\211\207" [sym val filesets-has-changed-flag filesets-set-default t] 3 (#$ . 6960)])
#@38 Set the default for `filesets-data'.
(defalias 'filesets-data-set-default #[(sym val) "\203	\306\202,\307\310!\203,\311	\312\"\211\306\211\203+\f@\313@!\210\fA\211\204+\314
	\"\207" [filesets-menu-use-cached-flag val modified-filesets x #1=#:--cl-dolist-temp-- sym nil default-boundp filesets-data filesets-filter-list #[(x) "@A\305\n\"\211?\206	\fA\232?+\207" [x data name filesets-data elt assoc] 4] filesets-reset-fileset filesets-set-default] 4 (#$ . 7180)])
(custom-declare-group 'filesets nil "The fileset swapper." :prefix "filesets-" :group 'convenience :version "22.1")
#@22 Filesets' menu name.
(custom-declare-variable 'filesets-menu-name '"Filesets" '(#$ . 7787) :set 'filesets-set-default :type 'string :group 'filesets)
#@97 The menu under which the filesets menu should be inserted.
See `add-submenu' for documentation.
(custom-declare-variable 'filesets-menu-path ''("File") '(#$ . 7943) :set 'filesets-set-default :type '(choice (const :tag "Top Level" nil) (sexp :tag "Menu Path")) :version "23.1" :group 'filesets)
#@97 The name of a menu before which this menu should be added.
See `add-submenu' for documentation.
(custom-declare-variable 'filesets-menu-before '"Open File..." '(#$ . 8244) :set 'filesets-set-default :type '(choice (string :tag "Name") (const :tag "Last" nil)) :version "23.1" :group 'filesets)
#@99 Use that instead of `current-menubar' as the menu to change.
See `add-submenu' for documentation.
(custom-declare-variable 'filesets-menu-in-menu 'nil '(#$ . 8544) :set 'filesets-set-default :type 'sexp :group 'filesets)
#@65 Non-nil means to prepend menus with hopefully unique shortcuts.
(custom-declare-variable 'filesets-menu-shortcuts-flag 't '(#$ . 8771) :set 'filesets-set-default! :type 'boolean :group 'filesets)
#@36 String for marking menu shortcuts.
(custom-declare-variable 'filesets-menu-shortcuts-marker '"%_" '(#$ . 8973) :set 'filesets-set-default! :type 'string :group 'filesets)
#@170 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'.
(custom-declare-variable 'filesets-menu-cache-file '(locate-user-emacs-file "filesets-cache.el") '(#$ . 9151) :set 'filesets-set-default :type 'file :group 'filesets)
(put 'filesets-menu-cache-file 'risky-local-variable t)
#@786 Stuff we want to save in `filesets-menu-cache-file'.

Possible uses: don't save configuration data in the main startup files
but in filesets's own cache.  In this case add `filesets-data' to this
list.

There is a second reason for putting `filesets-data' on this list.  If
you frequently add and remove buffers on the fly to :files filesets, you
don't need to save your customizations if `filesets-data' is being
mirrored in the cache file.  In this case the version in the cache file
is the current one, and the version in your startup file will be
silently updated later on.

If you want caching to work properly, at least `filesets-submenus',
`filesets-menu-cache', and `filesets-ingroup-cache' should be in this
list.

Don't forget to check out `filesets-menu-ensure-use-cached'.
(custom-declare-variable 'filesets-menu-cache-contents ''(filesets-be-docile-flag filesets-submenus filesets-menu-cache filesets-ingroup-cache) '(#$ . 9550) :set 'filesets-set-default :type '(repeat (choice :tag "Variable" (const :tag "filesets-submenus" :value filesets-submenus) (const :tag "filesets-menu-cache" :value filesets-menu-cache) (const :tag "filesets-ingroup-cache" :value filesets-ingroup-cache) (const :tag "filesets-data" :value filesets-data) (const :tag "filesets-external-viewers" :value filesets-external-viewers) (const :tag "filesets-ingroup-patterns" :value filesets-ingroup-patterns) (const :tag "filesets-be-docile-flag" :value filesets-be-docile-flag) (sexp :tag "Other" :value nil))) :group 'filesets)
#@554 Hooks to run when writing the contents of filesets' cache file.

The hook is called with the cache file as current buffer and the cursor
at the last position.  I.e. each hook has to make sure that the cursor is
at the last position.

Possible uses: If you don't want to save `filesets-data' in your normal
configuration file, you can add a something like this

	(lambda ()
	      (insert (format "(setq-default filesets-data '%S)"
			      filesets-data))
	      (newline 2))

to this hook.

Don't forget to check out `filesets-menu-ensure-use-cached'.
(custom-declare-variable 'filesets-cache-fill-content-hooks 'nil '(#$ . 11072) :set 'filesets-set-default :type 'hook :group 'filesets)
#@130 Non-nil means cache the hostname.
If the current name differs from the cached one,
rebuild the menu and create a new cache file.
(custom-declare-variable 'filesets-cache-hostname-flag 'nil '(#$ . 11768) :set 'filesets-set-default :type 'boolean :group 'filesets)
#@259 Non-nil means save buffer on every change of the filesets menu.
If this variable is set to nil and if Emacs crashes, the cache and
filesets-data could get out of sync.  Set this to t if this happens from
time to time or if the fileset cache causes troubles.
(custom-declare-variable 'filesets-cache-save-often-flag 'nil '(#$ . 12038) :set 'filesets-set-default :type 'boolean :group 'filesets)
#@159 Maximum length of submenus.
Set this value to 0 to turn menu splitting off.  BTW, parts of submenus
will not be rewrapped if their length exceeds this value.
(custom-declare-variable 'filesets-max-submenu-length '25 '(#$ . 12439) :set 'filesets-set-default :type 'integer :group 'filesets)
#@53 Truncate names of splitted submenus to this length.
(custom-declare-variable 'filesets-max-entry-length '50 '(#$ . 12735) :set 'filesets-set-default :type 'integer :group 'filesets)
#@206 A function or command used for browsing directories.
When using an external command, "%s" will be replaced with the
directory's name.

Note: You have to manually rebuild the menu if you change this value.
(custom-declare-variable 'filesets-browse-dir-function ''dired '(#$ . 12924) :set 'filesets-set-default :type '(choice :tag "Function:" (const :tag "dired" :value dired) (list :tag "Command" :value ("" "%s") (string :tag "Name") (string :tag "Arguments")) (function :tag "Function" :value nil)) :group 'filesets)
#@516 The function used for opening files.

`filesets-find-or-display-file' ... Filesets' default function for
visiting files.  This function checks if an external viewer is defined
for a specific file type.  Either this viewer, if defined, or
`find-file' will be used to visit a file.

`filesets-find-file' ... An alternative function that always uses
`find-file'.  If `filesets-be-docile-flag' is true, a file, which isn't
readable, will not be opened.

Caveat: Changes will take effect only after rebuilding the menu.
(custom-declare-variable 'filesets-open-file-function ''filesets-find-or-display-file '(#$ . 13449) :set 'filesets-set-default :type '(choice :tag "Function:" (const :tag "filesets-find-or-display-file" :value filesets-find-or-display-file) (const :tag "filesets-find-file" :value filesets-find-file) (function :tag "Function" :value nil)) :group 'filesets)
#@97 The function used to save a buffer.
Caveat: Changes will take effect after rebuilding the menu.
(custom-declare-variable 'filesets-save-buffer-function ''save-buffer '(#$ . 14328) :set 'filesets-set-default :type '(choice :tag "Function:" (const :tag "save-buffer" :value save-buffer) (function :tag "Function" :value nil)) :group 'filesets)
#@168 Delay before calling `find-file'.
This is for calls via `filesets-find-or-display-file'
or `filesets-find-file'.

Set this to 0, if you don't use XEmacs' buffer tabs.
(custom-declare-variable 'filesets-find-file-delay '(if (and (featurep 'xemacs) gutter-buffers-tab-visible-p) 0.5 0) '(#$ . 14677) :set 'filesets-set-default :type 'number :group 'filesets)
#@163 Non-nil means don't complain if a file or a directory doesn't exist.
This is useful if you want to use the same startup files in different
computer environments.
(custom-declare-variable 'filesets-be-docile-flag 'nil '(#$ . 15041) :set 'filesets-set-default :type 'boolean :group 'filesets)
#@54 Non-nil means sort the filesets menu alphabetically.
(custom-declare-variable 'filesets-sort-menu-flag 't '(#$ . 15338) :set 'filesets-set-default :type 'boolean :group 'filesets)
#@63 Non-nil means sorting of the filesets menu is case sensitive.
(custom-declare-variable 'filesets-sort-case-sensitive-flag 't '(#$ . 15524) :set 'filesets-set-default :type 'boolean :group 'filesets)
#@644 Maximum scan depth for directory trees.
A :tree fileset is defined by a base directory the contents of which
will be recursively added to the menu.  `filesets-tree-max-level' tells up
to which level the directory structure should be scanned/listed,
i.e. how deep the menu should be.  Try something like

	("HOME -- only one level"
	 (:tree "~" "^[^.].*[^~]$")
	 (:tree-max-level 1)
	 (:filter-dirs-flag t))
	("HOME -- up to 3 levels"
	 (:tree "~" "^[^.].*[^~]$")
	 (:tree-max-level 3)
	 (:filter-dirs-flag t))

and it should become clear what this option is about.  In any case,
including directory trees to the menu can take a lot of memory.
(custom-declare-variable 'filesets-tree-max-level '3 '(#$ . 15730) :set 'filesets-set-default :type 'integer :group 'filesets)
#@245 Commands to run on filesets.
An association list of names, functions, and an argument list (or a
function that returns one) to be run on a filesets' files.

The argument <file-name> or <<file-name>> (quoted) will be replaced with
the filename.
(custom-declare-variable 'filesets-commands '`(("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)" perform-replace (filesets-cmd-query-replace-regexp-getargs)) ("Grep <<selection>>" "grep" ("-n " filesets-get-quoted-selection " " "<<file-name>>")) ("Run Shell Command" filesets-cmd-shell-command (filesets-cmd-shell-command-getargs))) '(#$ . 16507) :set 'filesets-set-default+ :type '(repeat :tag "Commands" (list :tag "Definition" :value ("") (string "Name") (choice :tag "Command" (string :tag "String") (function :tag "Function")) (repeat :tag "Argument List" (choice :tag "Arguments" (sexp :tag "Sexp" :value nil) (string :tag "File Name" :value "<file-name>") (string :tag "Quoted File Name" :value "<<file-name>>") (function :tag "Function" :value nil))))) :group 'filesets)
(put 'filesets-commands 'risky-local-variable t)
#@1625 Association list of file patterns and external viewers for use with
`filesets-find-or-display-file'.

Has the form ((FILE-PATTERN VIEWER PROPERTIES) ...), VIEWER being either a
function or a command name as string.

Properties is an association list determining filesets' behavior in
several conditions.  Choose one from this list:

:ignore-on-open-all ... Don't open files of this type automatically --
i.e. on open-all-files-events or when running commands

:capture-output ... capture an external viewer output

:constraintp FUNCTION ... use this viewer only if FUNCTION returns non-nil

:constraint-flag SEXP ... use this viewer only if SEXP evaluates to non-nil

:open-hook HOOK ... run hooks after spawning the viewer -- mainly useful
in conjunction with :capture-output

:args (FORMAT-STRING or SYMBOL or FUNCTION) ... a list of arguments
(defaults to (list "%S")) when using shell commands

Avoid modifying this variable and achieve minor speed-ups by setting the
variables my-ps-viewer, my-pdf-viewer, my-dvi-viewer, my-pic-viewer.

In order to view pdf or rtf files in an Emacs buffer, you could use these:


      ("^.+\\.pdf\\'" "pdftotext"
       ((:capture-output t)
	(:args ("%S - | fmt -w " window-width))
	(:ignore-on-read-text t)
	(:constraintp (lambda ()
			(and (filesets-which-command-p "pdftotext")
			     (filesets-which-command-p "fmt"))))))
      ("^.+\\.rtf\\'" "rtf2htm"
       ((:capture-output t)
	(:args ("%S 2> /dev/null | w3m -dump -T text/html"))
	(:ignore-on-read-text t)
	(:constraintp (lambda ()
			(and (filesets-which-command-p "rtf2htm")
			     (filesets-which-command-p "w3m"))))))
(custom-declare-variable 'filesets-external-viewers '(let ((ps-cmd "ggv") (pdf-cmd "xpdf") (dvi-cmd "xdvi") (doc-cmd "antiword") (pic-cmd "gqview")) `(("^.+\\..?html?$" browse-url ((:ignore-on-open-all t))) ("^.+\\.pdf$" ,pdf-cmd ((:ignore-on-open-all t) (:ignore-on-read-text t) (:constraint-flag ,pdf-cmd))) ("^.+\\.e?ps\\(.gz\\)?$" ,ps-cmd ((:ignore-on-open-all t) (:ignore-on-read-text t) (:constraint-flag ,ps-cmd))) ("^.+\\.dvi$" ,dvi-cmd ((:ignore-on-open-all t) (:ignore-on-read-text t) (:constraint-flag ,dvi-cmd))) ("^.+\\.doc$" ,doc-cmd ((:capture-output t) (:ignore-on-read-text t) (:constraint-flag ,doc-cmd))) ("^.+\\.\\(tiff\\|xpm\\|gif\\|pgn\\)$" ,pic-cmd ((:ignore-on-open-all t) (:ignore-on-read-text t) (:constraint-flag ,pic-cmd))))) '(#$ . 17776) :set 'filesets-set-default :type '(repeat :tag "Viewer" (list :tag "Definition" :value ("^.+\\.suffix$" #1="") (regexp :tag "Pattern") (choice :tag "Viewer" (symbol :tag "Function" :value nil) (string :tag "Program" :value #1#)) (repeat :tag "Properties" (choice (list :tag ":constraintp" :value (:constraintp) (const :format #1# :value :constraintp) (function :tag "Function")) (list :tag ":constraint-flag" :value (:constraint-flag) (const :format #1# :value :constraint-flag) (sexp :tag "Symbol")) (list :tag ":ignore-on-open-all" :value (:ignore-on-open-all t) (const :format #1# :value :ignore-on-open-all) (boolean :tag "Boolean")) (list :tag ":ignore-on-read-text" :value (:ignore-on-read-text t) (const :format #1# :value :ignore-on-read-text) (boolean :tag "Boolean")) (list :tag ":args" :value (:args) (const :format #1# :value :args) (repeat :tag "List" (choice :tag "Arguments" (string :tag "String" :value #1#) (symbol :tag "Symbol" :value nil) (function :tag "Function" :value nil)))) (list :tag ":open-hook" :value (:open-hook) (const :format #1# :value :open-hook) (hook :tag "Hook")) (list :tag ":capture-output" :value (:capture-output t) (const :format #1# :value :capture-output) (boolean :tag "Boolean")))))) :group 'filesets)
(put 'filesets-external-viewers 'risky-local-variable t)
#@2575 Inclusion group definitions.

Define how to find included file according to a file's mode (being
defined by a file pattern).

A valid entry has the form (FILE-PATTERN REMOVE-DUPLICATES-FLAG
CMD-DEF1 ...), CMD-DEF1 being a plist containing the fields :pattern
(mandatory), :name, :get-file-name, :match-number, :scan-depth,
:preprocess, :case-sensitive.

File Pattern ... A regexp matching the file's name for which the
following rules should be applied.

Remove Duplicates ... If t, only the first occurrence of an included
file is retained.  (See below for a full explanation.)

:name STRING ... This pattern's name.

:pattern REGEXP ... A regexp matching the command.  This regexp has to
include a group that holds the name of the included file.

:get-file-name FUNCTION (default: `filesets-which-file') ... A function
that takes two arguments (the path of the master file and the name
of the included file) and returns a valid path or nil -- if the
subfile can't be found.

:match-number INTEGER (default: 1) ... The number of the match/group
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,
INCLUDED-FILE is a stub -- 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.

:preprocess FUNCTION ... A function modifying a buffer holding the
master file so that pattern matching becomes easier.  This is usually
used to narrow a buffer to the relevant region.  This function could also
be destructive and simply delete non-relevant text.

:case-sensitive BOOLEAN (default: nil) ... Whether a pattern is
case-sensitive or not.


Stubs:

First, a stub is a file that shows up in the menu but will not be
included in an ingroup's file listing -- i.e. filesets will never
operate on this file automatically.  Secondly, in opposition to normal
files stubs are not scanned for new inclusion groups.  This is useful if
you want to have quick access to library headers.

In the menu, an asterisk is appended to the stub's name.


Remove Duplicates:

E.g. File A and file B refer to file X; X refers to A.  If
you choose not to remove duplicates the tree would look like:

    M + A - X - A ...
        B - X - A ...

As you can see, there is some chance that you run in circles.
Nevertheless, up to some degree this could still be what you want.

With duplicates removed, it would be:

    M + A - X
        B
(custom-declare-variable 'filesets-ingroup-patterns ''(("^.+\\.tex$" t (((:name "Package") (:pattern "\\\\usepackage\\W*\\(\\[[^]]*\\]\\W*\\)?{\\W*\\(.+\\)\\W*}") (:match-number 2) (:stub-flag t) (:get-file-name (lambda (master file) (filesets-which-file master (concat file ".sty") (filesets-convert-path-list (or (getenv "MY_TEXINPUTS") (getenv "TEXINPUTS"))))))) ((:name "Include") (:pattern "\\\\include\\W*{\\W*\\(.+\\)\\W*}") (:get-file-name (lambda (master file) (filesets-which-file master (concat file ".tex") (filesets-convert-path-list (or (getenv "MY_TEXINPUTS") (getenv "TEXINPUTS")))))) (:scan-depth 5)) ((:name "Input") (:pattern "\\\\input\\W*{\\W*\\(.+\\)\\W*}") (:stubp (lambda (a b) (not (filesets-files-in-same-directory-p a b)))) (:get-file-name (lambda (master file) (filesets-which-file master (concat file ".tex") (filesets-convert-path-list (or (getenv "MY_TEXINPUTS") (getenv "TEXINPUTS")))))) (:scan-depth 5)) ((:name "Bibliography") (:pattern "\\\\bibliography\\W*{\\W*\\(.+\\)\\W*}") (:get-file-name (lambda (master file) (filesets-which-file master (concat file ".bib") (filesets-convert-path-list (or (getenv "MY_BIBINPUTS") (getenv "BIBINPUTS"))))))))) ("^.+\\.el$" t (((:name "Require") (:pattern "(require\\W+'\\(.+\\))") (:stubp (lambda (a b) (not (filesets-files-in-same-directory-p a b)))) (:get-file-name (lambda (master file) (filesets-which-file master (concat file ".el") load-path)))) ((:name "Load") (:pattern "(load\\(-library\\)?\\W+\"\\(.+\\)\")") (:match-number 2) (:get-file-name (lambda (master file) (filesets-which-file master file load-path)))))) ("^\\([A-Z√Ñ√ñ√ú][a-z√§√∂√º√ü]+\\([A-Z√Ñ√ñ√ú][a-z√§√∂√º√ü]+\\)+\\)$" t (((:pattern "\\<\\([A-Z√Ñ√ñ√ú][a-z√§√∂√º√ü]+\\([A-Z√Ñ√ñ√ú][a-z√§√∂√º√ü]+\\)+\\)\\>") (:scan-depth 5) (:stubp (lambda (a b) (not (filesets-files-in-same-directory-p a b)))) (:case-sensitive t) (:get-file-name (lambda (master file) (filesets-which-file master file (if (boundp 'emacs-wiki-directories) emacs-wiki-directories nil)))))))) '(#$ . 21481) :set 'filesets-set-default :type '(repeat :tag "Include" (list :tag "Definition" :value ("^.+\\.suffix$" t) (regexp :tag "File Pattern" :value "^.+\\.suffix$") (boolean :tag "Remove Duplicates" :value t) (repeat :tag "Commands" (repeat :tag "Command" (choice :tag "Definition" (list :tag ":name" :value (:name #1="") (const :format #1# :value :name) (string :tag "String")) (list :tag ":pattern" :value (:pattern "\\<CMD\\W*\\(.+\\)\\>") (const :format #1# :value :pattern) (regexp :tag "RegExp")) (list :tag ":get-file-name" :value (:get-file-name) (const :format #1# :value :get-file-name) (function :tag "Function")) (list :tag ":match-number" :value (:match-number 1) (const :format #1# :value :match-number) (integer :tag "Integer")) (list :tag ":stub-flag" :value (:stub-flag t) (const :format #1# :value :stub-flag) (boolean :tag "Boolean")) (list :tag ":stubp" :value (:stubp) (const :format #1# :value :stubp) (function :tag "Function")) (list :tag ":scan-depth" :value (:scan-depth 0) (const :format #1# :value :scan-depth) (integer :tag "Integer")) (list :tag ":case-sensitive" :value (:case-sensitive) (const :format #1# :value :case-sensitive) (boolean :tag "Boolean")) (list :tag ":preprocess" :value (:preprocess) (const :format #1# :value :preprocess) (function :tag "Function"))))))) :group 'filesets)
(put 'filesets-ingroup-patterns 'risky-local-variable t)
#@2472 Fileset definitions.

A fileset is either a list of files, a file pattern, a base directory
and a search pattern (for files), or a base file.  Changes to this
variable will take effect after rebuilding the menu.

Caveat: Fileset names have to be unique.

Example definition:
      '(("My Wiki"
	 (:ingroup "~/Etc/My-Wiki/WikiContents"))
	("My Homepage"
	 (:pattern "~/public_html/" "^.+\\.html$")
	 (:open filesets-find-file))
	("User Configuration"
	 (:files "~/.xinitrc"
		 "~/.bashrc"
		 "~/.bash_profile"))
	("HOME"
	 (:tree "~" "^[^.].*[^~]$")
	 (:filter-dirs-flag t)))

`filesets-data' is a list of (NAME-AS-STRING . DEFINITION), DEFINITION
being an association list with the fields:

:files FILE-1 .. FILE-N ... a list of files belonging to a fileset

:ingroup FILE-NAME ... an inclusion group's base file.

:tree ROOT-DIR PATTERN ... a base directory and a file 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.

:tree-max-level INTEGER ... recurse into directories this many levels
(see `filesets-tree-max-level' for a full explanation)

:dormant-flag BOOLEAN ... non-nil means don't show this item in the
menu; dormant filesets can still be manipulated via commands available
from the minibuffer -- e.g. `filesets-open', `filesets-close', or
`filesets-run-cmd'

:dormant-p FUNCTION ... a function returning :dormant-flag

:open FUNCTION ... the function used to open file belonging to this
fileset.  The function takes a file name as argument

:save FUNCTION ... the function used to save file belonging to this
fileset; it takes no arguments, but works on the current buffer.

Either :files, :pattern, :tree, or :ingroup must be supplied.  :files
overrules :tree, :tree overrules :pattern, :pattern overrules :ingroup,
i.e. these tags are mutually exclusive.  The fields :open and :save are
optional.

In conjunction with the :tree tag, :save is void.  :open refers to the
function used for opening files in a directory, not for opening the
directory.  For browsing directories, `filesets-browse-dir-function' is used.

Before using :ingroup, make sure that the file type is already
defined in `filesets-ingroup-patterns'.
(custom-declare-variable 'filesets-data 'nil '(#$ . 27458) :group 'filesets :set 'filesets-data-set-default :type '(repeat (cons :tag "Fileset" (string :tag "Name" :value #1="") (repeat :tag "Data" (choice :tag "Type" :value nil (list :tag "Pattern" :value (:pattern "~/" "^.+\\.suffix$") (const :format #1# :value :pattern) (directory :tag "Dir") (regexp :tag "Pattern")) (cons :tag "Files" :value (:files) (const :format #1# :value :files) (repeat :tag "Files" file)) (list :tag "Single File" :value (:file "~/") (const :format #1# :value :file) (file :tag "File")) (list :tag "Inclusion group" :value (:ingroup "~/") (const :format #1# :value :ingroup) (file :tag "File" :value "~/")) (list :tag "Directory Tree" :value (:tree "~/" "^.+\\.suffix$") (const :format #1# :value :tree) (directory :tag "Dir") (regexp :tag "Pattern")) (list :tag "Filter directories" :value (:filter-dirs-flag) (const :format #1# :value :filter-dirs-flag) (boolean :tag "Boolean" :value nil)) (list :tag "Scanning depth" :value (:tree-max-level 3) (const :format #1# :value :tree-max-level) (integer :tag "Integer")) (list :tag "Verbosity" :value (:verbosity 1) (const :format #1# :value :verbosity) (integer :tag "Integer")) (list :tag "Conceal fileset (Flag)" :value (:dormant-flag) (const :format #1# :value :dormant-flag) (boolean :tag "Boolean")) (list :tag "Conceal fileset (Function)" :value (:dormant-p) (const :format #1# :value :dormant-p) (function :tag "Function")) (list :tag "Save function" :value (:save) (const :format #1# :value :save) (function :tag "Function")) (list :tag "Open function" :value (:open) (const :format #1# :value :open) (function :tag "Function")))))))
(put 'filesets-data 'risky-local-variable t)
#@63 Query the user before opening a fileset with that many files.
(custom-declare-variable 'filesets-query-user-limit '15 '(#$ . 31650) :set 'filesets-set-default :type 'integer :group 'filesets)
(byte-code "\300\301!\210\302\303\304\"\207" [require easymenu defalias filesets-error #[(class &rest args) "\301\302\303\304\305#\"\207" [args error "%s" mapconcat identity " "] 6 "`error' wrapper."]] 3)
#@104 Remove non-directory names from a list of strings.
If NEGATIVE is non-nil, remove all directory names.
(defalias 'filesets-filter-dir-names #[(lst &optional negative) "\301\302\"\207" [lst filesets-filter-list #[(x) "\302\303\"?\205	\203\302\304\"?\207\302\304\"\207" [x negative string-match "^\\.+/$" "[:/\\]$"] 3]] 3 (#$ . 32055)])
#@182 Return a sorted copy of LST, LST being a list of strings.
If `filesets-sort-menu-flag' is nil, return LST itself.

ACCESS-FN ... function to get the string value of LST's elements.
(defalias 'filesets-conditional-sort #[(lst &optional access-fn) "\203	\206	\306\203\307\202\310\311\312
!\f\"*\207
\207" [filesets-sort-menu-flag access-fn fni filesets-sort-case-sensitive-flag fn lst identity #[(a b) "	!\n!\231\207" [fni a b] 3] #[(a b) "	!\226\n!\226\231\207" [fni a b] 3] sort copy-sequence] 3 (#$ . 32405)])
#@222 Get WHAT (:files or :dirs) in DIR.
If PATTERN is provided return only those entries matching this
regular expression.
If MATCH-DIRS-FLAG is non-nil, also match directory entries.
Return full path if FULL-FLAG is non-nil.
(defalias 'filesets-directory-files #[(dir &optional pattern what full-flag match-dirs-flag) "\306\307\310#\210\311!\203\236\312\211\313\314\"\312\211\203y\f@\315\316\"\204r\315\317\"\203L
\203=\203=\315\"\203r\306\320\321$\210	B\202r\203Y\315\"\203r\306\320\322$\210\203n\323!P\202o\nB\fA\211\204* \324\232\203\207\325	!\202\234 \326\232\203\224\325\n!\202\234\327\325\n!\325	!\"*\207!\203\253\306\330\331#\210\312\207\332\333\334\335$\207" [dir dirs files this #1=#:--cl-dolist-temp-- match-dirs-flag filesets-message 2 "Filesets: scanning %S" file-exists-p nil file-name-all-completions "" string-match "^\\.+/$" "[:/\\]$" 5 "Filesets: matched dir %S with pattern %S" "Filesets: matched file %S with pattern %S" file-name-as-directory :dirs filesets-conditional-sort :files append 1 "Filesets: %S doesn't exist" filesets-error error "Filesets: " " does not exist" pattern full-flag what filesets-be-docile-flag] 6 (#$ . 32938)])
#@23 Return TXT in quotes.
(defalias 'filesets-quote #[(txt) "\301\301Q\207" [txt "\""] 3 (#$ . 34156)])
#@70 Get the text between mark and point -- i.e. the selection or region.
(defalias 'filesets-get-selection #[nil "\302 `\211\203	^	]{\202\303\304\305\"*\207" [p m mark filesets-error error "No selection."] 4 (#$ . 34263)])
#@47 Return the currently selected text in quotes.
(defalias 'filesets-get-quoted-selection #[nil "\300\301 !\207" [filesets-quote filesets-get-selection] 2 (#$ . 34496)])
#@42 Create menu shortcuts based on number N.
(defalias 'filesets-get-shortcut #[(n) "\302S\303\"	\204\304\2027\305X\203\306!\307P\2027\310X\203+\311\312\313\\\"\2027\303X\2057\311\312\314\\\")\207" [n filesets-menu-shortcuts-flag mod 51 "" 9 number-to-string " " 35 format "%c " 87 -3] 4 (#$ . 34669)])
#@48 Compare two filenames A and B after expansion.
(defalias 'filesets-files-equalp #[(a b) "\302!\302	!\232\207" [a b expand-file-name] 3 (#$ . 34991)])
#@48 Compare two filenames A and B after expansion.
(defalias 'filesets-files-in-same-directory-p #[(a b) "\304\305!!\304\305	!!\211\n\232*\207" [a b bd ad file-name-directory expand-file-name] 5 (#$ . 35148)])
#@45 Return a path-list given as STRING as list.
(defalias 'filesets-convert-path-list #[(string) "\205\302\303\304	\"\"\207" [string path-separator mapcar #[(x) "\301!\207" [x file-name-as-directory] 2] split-string] 5 (#$ . 35363)])
#@63 Search for a FILENAME relative to a MASTER file in PATH-LIST.
(defalias 'filesets-which-file #[(master filename &optional path-list) "\304!	P\305\n!\203\n\202\306\307\")\207" [master filename f path-list file-name-directory file-exists-p filesets-some #[(dir) "\302!\303!\205\304\305\306#\307\310	\"*\207" [dir files file-name-as-directory file-exists-p filesets-directory-files nil :files filesets-some #[(file) "\303	!\232\205\n	P\207" [filename file dir file-name-nondirectory] 3]] 5]] 3 (#$ . 35604)])
#@59 Get ENTRY's (representing an external viewer) properties.
(defalias 'filesets-eviewer-get-props #[(entry) "\3018\207" [entry 2] 2 (#$ . 36133)])
(defalias 'filesets-eviewer-constraint-p #[(entry) "\305!\306\307	\"\306\310	\"\n\203\n\211A@) \202,\203+\311\211A@)!\202,\312+\207" [entry props constraint constraint-flag x filesets-eviewer-get-props assoc :constraintp :constraint-flag eval t] 4])
#@35 Find an external viewer for FILE.
(defalias 'filesets-get-external-viewer #[(file) "\303!\304\305\n\")\207" [file filename filesets-external-viewers file-name-nondirectory filesets-some #[(entry) "\302@	\"\205\303!\205\207" [entry filename string-match filesets-eviewer-constraint-p] 3]] 3 (#$ . 36548)])
#@49 Get the external viewer definition called NAME.
(defalias 'filesets-get-external-viewer-by-name #[(name) "\205\302\303	\"\207" [name filesets-external-viewers filesets-some #[(entry) "A@	\230\205\302!\205\207" [entry name filesets-eviewer-constraint-p] 2]] 3 (#$ . 36868)])
#@432 Return non-nil if a file of a specific type has special flags/tags.

Events (corresponding tag):

on-open-all (:ignore-on-open-all) ... Exclude files of this when opening
a fileset

on-grep (:ignore-on-read-text) ... Exclude files of this when running
the "Grep <<selection>>" command

on-capture-output (:capture-output) ... Capture output of an external viewer

on-ls ... Not used

on-cmd ... Not used

on-close-all ... Not used
(defalias 'filesets-filetype-property #[(filename event &optional entry) "\304\206\305	!!\306\n\307\310\"\203\311\2025\307\312\"\203\"\313\2025\307\314\"\203-\315\2025\307\316\"\2055\315\315\317$)\207" [entry filename def event filesets-eviewer-get-props filesets-get-external-viewer filesets-alist-get memql (on-open-all) :ignore-on-open-all (on-grep) :ignore-on-read-text (on-cmd) nil (on-close-all) t] 5 (#$ . 37159)])
#@56 Return PROPERTY for filename -- use ENTRY if provided.
(defalias 'filesets-filetype-get-prop #[(property filename &optional entry) "\304\206\305	!!\211\205\306\n\307\310$)\207" [entry filename def property filesets-eviewer-get-props filesets-get-external-viewer filesets-alist-get nil t] 6 (#$ . 38034)])
#@60 Reset a buffer's filename if the buffer is being modified.
(defalias 'filesets-reset-filename-on-change #[nil "\205\301\302\303\"\207" [filesets-output-buffer-flag set-visited-file-name nil t] 3 (#$ . 38352)])
#@133 Start an external viewer for FILE.
Use the viewer defined in EV-ENTRY (a valid element of
`filesets-external-viewers') if provided.
(defalias 'filesets-spawn-external-viewer #[(file &optional ev-entry) "\306!	\206\307!\211\203\377\n\211A@)\310\311\n#\310\312\n#\310\313\n#\211\"\203\202\314#\"\315$\211%\203y%@$#$;\203R\316$\"\202m$9\203h\317$!\203h\316\320$ \"\202m\316\320$\"P#%A\211%\204=\315$#+\202\206\316\320\")&\321\f!\203\231
\203\231\f!\202\300\321\f!\203\247\f!\210\315\202\300
\203\266\322\316\323\f&#!\202\300\324\316\325\f&#!\210\315'
\203\363\326\316\327\f#!\210'c\210\330\331!\210\332\333\332\"\210\203\347\334\335!\210\336\315!\210\332(eb\202\373\205\373\334\335!-\202\337\340\341\"*\207" [file ev-entry entry x vwr co-flag expand-file-name filesets-get-external-viewer filesets-filetype-get-prop :capture-output :open-hook :args "" nil format fboundp "%S" functionp shell-command-to-string "%s %s" shell-command "%s %s&" switch-to-buffer "Filesets: %s %s" make-local-variable filesets-output-buffer-flag t set-visited-file-name run-hooks oh set-buffer-modified-p filesets-error error "Filesets: general error when spawning external viewer" fmt rv this #1=#:--cl-dolist-temp-- args output buffer-read-only] 6 (#$ . 38572)])
#@163 Call `find-file' after a possible delay (see `filesets-find-file-delay').
If `filesets-be-docile-flag' is true, a file, which isn't readable, will
not be opened.
(defalias 'filesets-find-file #[(file) "\303!\204	?\205\304\n!\210\305!\207" [file filesets-be-docile-flag filesets-find-file-delay file-readable-p sit-for find-file] 2 (#$ . 39893)])
#@68 Visit FILE using an external VIEWER or open it in an Emacs buffer.
(defalias 'filesets-find-or-display-file #[(&optional file viewer) "\206\n\303\304\305\211	$\306	!\206\307!\310\311\312\n$\210\n\203'\313\n\"\202*\314!*\207" [file viewer external-viewer-def read-file-name "Find file: " nil filesets-get-external-viewer-by-name filesets-get-external-viewer filesets-message 3 "Filesets: view %S using %s" filesets-spawn-external-viewer filesets-find-file] 5 (#$ . 40251) nil])
#@59 Select a viewer and call `filesets-find-or-display-file'.
(defalias 'filesets-find-file-using #[nil "\304\305\"\306\307	\310\311$\211\205\312\310\313\n	\"\211A@)\"*\207" [filesets-external-viewers lst viewer x mapcar #[(this) "\211A@)\303\304\n\"\n)D\207" [this x a format "%s"] 4] completing-read "Using viewer: " nil t filesets-find-or-display-file assoc] 6 (#$ . 40746) nil])
#@80 Get the directory browser's name as defined in `filesets-browse-dir-function'.
(defalias 'filesets-browser-name #[nil "<\203@\207\207" [filesets-browse-dir-function] 1 (#$ . 41140)])
#@50 Browse DIR using `filesets-browse-dir-function'.
(defalias 'filesets-browse-dir #[(dir) "\306!\203\n	!\207@\307\211A@)\310	!\"\311\312!r
q\210\313\216\314\315\fP\316\f$-\207" [filesets-browse-dir-function dir x args name #1=#:temp-buffer functionp format expand-file-name generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#1# buffer-name kill-buffer] 2)) start-process "Filesets:" "*Filesets external directory browser*"] 6 (#$ . 41334)])
#@35 Get SOMETHING's name (Don't ask).
(defalias 'filesets-get-fileset-name #[(something) "<\203@\207\207" [something] 1 (#$ . 41816)])
#@51 Access to `filesets-data'.  Get the ENTRY's name.
(defalias 'filesets-data-get-name #[(entry) "@\207" [entry] 1 (#$ . 41958)])
#@59 Access to `filesets-data'.  Get the ENTRY's data section.
(defalias 'filesets-data-get-data #[(entry) "A\207" [entry] 1 (#$ . 42092)])
#@117 Get KEY's value in the association list ALIST.
Return DEFAULT if not found.  Return (car VALUE) if CARP is non-nil.
(defalias 'filesets-alist-get #[(alist key &optional default carp) "\306	\"\211\203\203\n\211A@)\202$\nA\202$
\203#
\202$\307)\207" [key alist elt carp x default assoc nil] 4 (#$ . 42235)])
#@131 Extract the value for KEY in the data part of fileset ENTRY.
Return DEFAULT if not found.  Return (car VALUE) if CARP is non-nil.
(defalias 'filesets-data-get #[(entry key &optional default carp) "\304\305!	\n$\207" [entry key default carp filesets-alist-get filesets-data-get-data] 5 (#$ . 42560)])
#@58 Set the VALUE for KEY in the data part of fileset ENTRY.
(defalias 'filesets-data-set #[(entry key value) "\305!\306\n	\"\211\203\f\241\202\n\fB	B\241*\207" [entry alist key elt value filesets-data-get-data assoc] 4 (#$ . 42868)])
#@96 Return fileset ENTRY's mode: :files, :file, :tree, :pattern, or :ingroup.
See `filesets-data'.
(defalias 'filesets-entry-mode #[(entry) "\302!\303\304\305\")\207" [entry data filesets-data-get-data filesets-some #[(x) "\302	\"\205\207" [x data assoc] 3] (:files :tree :pattern :ingroup :file)] 3 (#$ . 43114)])
#@103 Get the open-function for FILESET-NAME.
Use FILESET-ENTRY for finding the open function, if provided.
(defalias 'filesets-entry-get-open-fn #[(fileset-name &optional fileset-entry) "\303\206\304	!\305\n\306$\207" [fileset-entry fileset-name filesets-open-file-function filesets-data-get filesets-get-fileset-from-name :open t] 5 (#$ . 43438)])
#@103 Get the save-function for FILESET-NAME.
Use FILESET-ENTRY for finding the save function, if provided.
(defalias 'filesets-entry-get-save-fn #[(fileset-name &optional fileset-entry) "\303\206\304	!\305\n\306$\207" [fileset-entry fileset-name filesets-save-buffer-function filesets-data-get filesets-get-fileset-from-name :save t] 5 (#$ . 43792)])
#@38 Get the file list for fileset ENTRY.
(defalias 'filesets-entry-get-files #[(entry) "\301\302\"\207" [entry filesets-data-get :files] 3 (#$ . 44147)])
#@38 Set the file list for fileset ENTRY.
(defalias 'filesets-entry-set-files #[(entry data &optional anyways) "\304!\n\204\f	\205\305\306#)\207" [entry files anyways data filesets-entry-get-files filesets-data-set :files] 4 (#$ . 44304)])
#@40 Get verbosity level for fileset ENTRY.
(defalias 'filesets-entry-get-verbosity #[(entry) "\301\302\303\304$\207" [entry filesets-data-get :verbosity 1 t] 5 (#$ . 44552)])
#@40 Get the single file for fileset ENTRY.
(defalias 'filesets-entry-get-file #[(entry) "\301\302\303\304$\207" [entry filesets-data-get :file nil t] 5 (#$ . 44730)])
#@58 Get the base directory + file pattern for fileset ENTRY.
(defalias 'filesets-entry-get-pattern #[(entry) "\301\302\"\207" [entry filesets-data-get :pattern] 3 (#$ . 44900)])
#@32 Get the file pattern for LIST.
(defalias 'filesets-entry-get-pattern--pattern #[(list) "G\302U\203\f\303@!\207\211A@)\207" [list x 1 file-name-nondirectory] 3 (#$ . 45081)])
#@47 Get a file pattern's base directory for LIST.
(defalias 'filesets-entry-get-pattern--dir #[(list) "G\301U\203\f\302@!\207@\207" [list 1 file-name-directory] 2 (#$ . 45266)])
#@41 Get the tree pattern for fileset ENTRY.
(defalias 'filesets-entry-get-tree #[(entry) "\301\302\"\207" [entry filesets-data-get :tree] 3 (#$ . 45450)])
#@37 Get dormant flag for fileset ENTRY.
(defalias 'filesets-entry-get-dormant-flag #[(entry) "\302\303\304\305$\211\203	 \202\302\306\304\305$)\207" [entry fn filesets-data-get :dormant-p nil t :dormant-flag] 6 (#$ . 45608)])
#@41 Get filter-dirs-flag for fileset ENTRY.
(defalias 'filesets-entry-get-filter-dirs-flag #[(entry) "\301\302\303\304$\207" [entry filesets-data-get :filter-dirs-flag nil t] 5 (#$ . 45843)])
#@52 Get maximal tree scanning depth for fileset ENTRY.
(defalias 'filesets-entry-get-tree-max-level #[(entry) "\301\302\303\304$\207" [entry filesets-data-get :tree-max-level nil t] 5 (#$ . 46038)])
#@38 Get the base file for fileset ENTRY.
(defalias 'filesets-entry-get-master #[(entry) "\301\302\303\304$\207" [entry filesets-data-get :ingroup nil t] 5 (#$ . 46240)])
#@107 Open FILE-NAME using OPEN-FUNCTION.
If OPEN-FUNCTION is nil, its value will be deduced from FILESET-NAME.
(defalias 'filesets-file-open #[(open-function file-name &optional fileset-name) "\206\303	!\304\n!\203\n!\202\305\306\n\")\207" [open-function fileset-name file-name filesets-entry-get-open-fn file-readable-p message "Filesets: Couldn't open `%s'"] 3 (#$ . 46414)])
#@192 Close BUFFER.
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.
(defalias 'filesets-file-close #[(save-function buffer) "rq\210\302 \203\f	 \210\302 ?\205\303!)\207" [buffer save-function buffer-modified-p kill-buffer] 2 (#$ . 46803)])
#@34 Get fileset definition for NAME.
(defalias 'filesets-get-fileset-from-name #[(name &optional mode) "\303\304\"\203		\207\305	\n\"\207" [mode name filesets-data memql (:ingroup :tree) assoc] 3 (#$ . 47177)])
#@45 Get `filesets-commands' entry for CMD-NAME.
(defalias 'filesets-cmd-get-def #[(cmd-name) "\302	\"\207" [cmd-name filesets-commands assoc] 3 (#$ . 47392)])
(defalias 'filesets-cmd-get-args #[(cmd-name) "\306!\307	8)\310\211\310\211\203H
@\2119\203;\311\f!\203;\f \312\n<\2032\2025C\")\202A\312\n\fC\"
A\211\204\310\n,\207" [cmd-name def rv args this #1=#:--cl-dolist-temp-- filesets-cmd-get-def 2 nil fboundp append x] 5])
(defalias 'filesets-cmd-get-fn #[(cmd-name) "\302!\211A@)\207" [cmd-name def filesets-cmd-get-def] 3])
#@39 Show OUTPUT of CMD (a shell command).
(defalias 'filesets-cmd-show-result #[(cmd output) "\302\303!\210\304 \210\305c\210c\210\306 \210	c\210\306 \207" [cmd output pop-to-buffer "*Filesets: Shell Command Output*" end-of-buffer "*** " newline] 2 (#$ . 47953)])
#@118 Helper function for `filesets-run-cmd'.  Apply FORMAT-FN to arg.
Replace <file-name> or <<file-name>> with filename.
(defalias 'filesets-run-cmd--repl-fn #[(arg &optional format-fn) "	\302\232\203\f\303 \202	\304\232\203\305\303 !\202	!\207" [format-fn arg "<file-name>" buffer-file-name "<<file-name>>" shell-quote-argument] 3 (#$ . 48221)])
#@52 Run CMD-NAME (see `filesets-commands') on FILESET.
(defalias 'filesets-run-cmd #[(&optional cmd-name fileset mode) "\206\n\306\307	\310\311$\n\206\306\312\310\311$\205\"\f\205\"\313\232\203(\314\202)\315\n\203E\316\232\204<\317\232\203E\320\n
#\202M\320\321\f!
#\211 \205!\322!\323!!\211\"\324>\203l\325\"!\"\202  \310#\211$\203$@#\212\214\326#!\211%\203eb\210\";\203\324\327&!\310#\211'\203\267'@#&\330#\331\"P&'A\211'\204\237\310#&+!\"\332!Q(\333(\334(!\"\210*\202\"9\203\310)!\310#\211*\203*@#\335)\330#\336\"\")*A\211*\204\350\310#)+!\325\"!\"\210)+$A\211$\204w\310#*\310***\207" [cmd-name filesets-commands fileset filesets-data name event completing-read "Select command: " nil t "Select fileset: " "Grep <<selection>>" on-grep on-cmd :ingroup :tree filesets-get-filelist filesets-get-fileset-from-name filesets-cmd-get-fn filesets-cmd-get-args (multi-isearch-files multi-isearch-files-regexp) apply filesets-find-file "" filesets-run-cmd--repl-fn #[(this) "\210\302\303	\"\207" [txt this format "%s"] 3] " " filesets-cmd-show-result shell-command-to-string append list mode files args fn this #1=#:--cl-dolist-temp-- buffer txt #2=#:--cl-dolist-temp-- cmd argl #3=#:--cl-dolist-temp--] 8 (#$ . 48578) nil])
#@31 Create filesets command menu.
(defalias 'filesets-get-cmd-menu #[nil "\301\302\303\"B\207" [filesets-commands "+ Commands" mapcar #[(this) "@\302	\303	D\")\207" [this name vector filesets-run-cmd] 4]] 4 (#$ . 49897)])
#@63 Get arguments for `query-replace' and `query-replace-regexp'.
(defalias 'filesets-cmd-query-replace-getargs #[nil "\302\303\304\305#\211@A@\305\304\3068\304	\257)\207" [common multi-query-replace-map query-replace-read-args "Filesets query replace" nil t 2] 8 (#$ . 50124)])
#@63 Get arguments for `query-replace' and `query-replace-regexp'.
(defalias 'filesets-cmd-query-replace-regexp-getargs #[nil "\302\303\304\211#\211@A@\304\211\3058\306	\257)\207" [common multi-query-replace-map query-replace-read-args "Filesets query replace" t 2 nil] 8 (#$ . 50409)])
#@75 Get arguments for `multi-isearch-files' and `multi-isearch-files-regexp'.
(defalias 'filesets-cmd-isearch-getargs #[nil "\301\300!\205C\207" [files boundp] 2 (#$ . 50701)])
#@49 Get arguments for `filesets-cmd-shell-command'.
(defalias 'filesets-cmd-shell-command-getargs #[nil "\300\301\302\303#\207" [read-string "Shell command (%s = file): " "%s" shell-command-history] 5 (#$ . 50883)])
#@39 Wrapper function for `shell-command'.
(defalias 'filesets-cmd-shell-command #[(txt) "\303 \203\304\305!\211\203\306 \210)\202\307\211\205/\310	\311\312 !\"\313\314\n\"\210\315\n\316\n!\"))\207" [ok txt cmd buffer-modified-p y-or-n-p "Save buffer? " save-buffer t format shell-quote-argument buffer-file-name message "Filesets: %s" filesets-cmd-show-result shell-command-to-string] 5 (#$ . 51101)])
#@88 Get all files for fileset ENTRY.
Assume MODE (see `filesets-entry-mode'), if provided.
(defalias 'filesets-get-filelist #[(entry &optional mode event) "\206\306	!\307\310\"\203\311	!\202\201\307\312\"\203#\313	!C\202\201\307\314\"\203B\315	;\2034	\2027\316	!!\211\317	!)B\202\201\307\320\"\203Z	@	A@\321\n\322\323$*\202\201\307\324\"\205\201\325	!\211\203{\326\f!\327\f!\321\n\322\323$*\202\200\330\331\332	#)\333
\334\"*\207" [mode entry patt dir dirpatt fl filesets-entry-mode memql (:files) filesets-entry-get-files (:file) filesets-entry-get-file (:ingroup) expand-file-name filesets-entry-get-master filesets-ingroup-cache-get (:tree) filesets-directory-files :files t (:pattern) filesets-entry-get-pattern filesets-entry-get-pattern--dir filesets-entry-get-pattern--pattern filesets-error error "Filesets: malformed entry: " filesets-filter-list #[(file) "\302	\"?\207" [file event filesets-filetype-property] 3]] 6 (#$ . 51516)])
#@90 Open the fileset called NAME.
Use LOOKUP-NAME for searching additional data if provided.
(defalias 'filesets-open #[(&optional mode name lookup-name) "\206\n\306\307	\310\311$\312\n\"\f\203\312\f!\202\n\206#\313
!\203{\314\n\315#\211G\316\310
\"X\204L\317\320\321#!\203t\310\211\203l@\322\"\210A\211\204W\310*\310\202w\323\324!+\202\200\325\326\327#,\207" [name filesets-data mode fileset lookup-name lookup-fs completing-read "Open fileset: " nil t filesets-get-fileset-from-name filesets-entry-mode filesets-get-filelist on-open-all filesets-entry-get-open-fn y-or-n-p format "Filesets: Open all %d files in %s? " filesets-file-open message "Filesets: cancelled" filesets-error error "Filesets: Unknown fileset: " files n open-function filesets-query-user-limit this #1=#:--cl-dolist-temp--] 6 (#$ . 52492) nil])
#@118 Close all buffers belonging to the fileset called NAME.
Use LOOKUP-NAME for deducing the save-function, if provided.
(defalias 'filesets-close #[(&optional mode name lookup-name) "\206\n\306\307	\310\311$\312\n\"\f\203\312\f!\202\n\206#\313
!\203g\314\n\315#\316\310
\"\211\310\211\203_@\317!\211\203U\320\"\210)A\211\204?\310,\310\202l\321\322\323#,\207" [name filesets-data mode fileset lookup-name lookup-fs completing-read "Close fileset: " nil t filesets-get-fileset-from-name filesets-entry-mode filesets-get-filelist on-close-all filesets-entry-get-save-fn get-file-buffer filesets-file-close filesets-error error "Filesets: Unknown fileset: " save-function files file-name #1=#:--cl-dolist-temp-- buffer] 6 (#$ . 53370) nil])
#@114 Add BUFFER (or current buffer) to the fileset called NAME.
User will be queried, if no fileset name is provided.
(defalias 'filesets-add-buffer #[(&optional name buffer) "\206p	\206\306\307\310\"\n\311#\312	\n\"\2061\313\307\314	\"!\2051\315\302	\316D\"\210\317\320	\"\210\n@\211\205t\321!\322!\323
\f\324\325$\211\203R\317\326
	#\202s\327!\330\232\203n
\203n\331
\fB\332#\210\333	\302\n#\202s\317\334
	#++\207" [buffer name filesets-data entry files this completing-read format "Add '%s' to fileset: " nil assoc y-or-n-p "Fileset %s does not exist. Create it? " add-to-list (:files) message "Fileset %s created.  Call `M-x filesets-save-config' to save." filesets-entry-get-files buffer-file-name filesets-member :test filesets-files-equalp "Filesets: '%s' is already in '%s'" filesets-entry-mode :files filesets-entry-set-files t filesets-set-config "Filesets: Can't add '%s' to fileset '%s'" inlist] 6 (#$ . 54158) nil])
#@106 Remove BUFFER (or current buffer) to fileset NAME.
User will be queried, if no fileset name is provided.
(defalias 'filesets-remove-buffer #[(&optional name buffer) "\206p	\206\306\307\310\"\n\311\312$\313	\n\"\211\205Y\314!\315!\316
\f\317\320$\f\203S
\203S\203S\321\322@\f\"BC\241\210\323	\302\n#)\202X\324\325
	#++\207" [buffer name filesets-data entry files this completing-read format "Remove '%s' from fileset: " nil t assoc filesets-entry-get-files buffer-file-name filesets-member :test filesets-files-equalp :files delete filesets-set-config message "Filesets: Can't remove '%s' from fileset '%s'" inlist new] 6 (#$ . 55114) nil])
#@53 Change fileset NAME's mode from :pattern to :files.
(defalias 'filesets-convert-patterns #[(name) "\305	\"\211\205\"\306\n!\307\n\310\"\211\205!\311\n\312#\210\313\301	#*)\207" [name filesets-data entry patfiles pattern assoc filesets-entry-get-pattern filesets-get-filelist :pattern filesets-entry-set-files t filesets-set-config] 5 (#$ . 55789) nil])
#@28 Customize `filesets-data'.
(defalias 'filesets-edit #[nil "\300\301!\207" [customize-variable filesets-data] 2 (#$ . 56156) nil])
#@31 Customize the filesets group.
(defalias 'filesets-customize #[nil "\300\301!\207" [customize-group filesets] 2 (#$ . 56292) nil])
#@41 Display filesets's version information.
(defalias 'filesets-info #[nil "\301\302\303\"!\205\304 \207" [filesets-version y-or-n-p format "Filesets v%s: visit homepage? " filesets-goto-homepage] 4 (#$ . 56428) nil])
#@27 Show filesets's homepage.
(defalias 'filesets-goto-homepage #[nil "\301!\207" [filesets-homepage browse-url] 2 (#$ . 56651) nil])
#@55 Remake a submenu's shortcut when wrapping long menus.
(defalias 'filesets-remake-shortcut #[(count submenu) "\303!	\304\234\305\306OP	<\203\n	AB\202!\307\310\n\311	\306\"AD\")\207" [count submenu name filesets-get-shortcut 0 2 nil apply vector append] 6 (#$ . 56788)])
#@22 Split long submenus.
(defalias 'filesets-wrap-submenu #[(submenu-body) "G\n\306U\204	\nX\203\202\335\307\310\311	!\n\245!\312\306
	V\204\332\203\332\313
\211\f\\	Y\205A)#\211\203\307\314G\312U\203h\203c\315@\"C\202\305\202\305\316!\317\211\203\250@\306\234A\204\206\317\202\207\320P\203\231\321\307O\202\233P)A\211\204w)GV\203\275\306O\322P\202\277)PBC\")AT
\f\\\211\202&+*)\207" [submenu-body bl filesets-max-submenu-length result factor count 0 nil ceiling float 1 filesets-sublist append filesets-remake-shortcut filesets-get-shortcut "" ", " 2 " ..." n data x sl filesets-menu-shortcuts-flag rv y filesets-max-entry-length] 9 (#$ . 57068)])
#@200 Get submenu epilog for SOMETHING (usually a fileset).
If mode is :tree or :ingroup, SOMETHING is some weird construct and
LOOKUP-NAME is used as lookup name for retrieving fileset specific settings.
(defalias 'filesets-get-menu-epilog #[(something &optional mode lookup-name rebuild-flag) "\304\305\"\203A\306\307\310\311\312D\312	D\312\nDF\"\307\313\314\315\312	D\312DF\"\307\316\317\320 \"\321\312	@DD\"\205<\307\322\323\312\nDD\"CBBBB\207\304\324\"\203t\306\307\310\311\312D\312	D\312\nDF\"\307\313\314\315\312	D\312DF\"\205p\307\322\323\312\nDD\"CBBB\207\304\325\"\203\266\306\307\310\311\312D\312	DE\"\307\313\314\315\312	D\312DF\"\307\316\317\320 \"\321\326\327\330	\331\"!!D\"\205\261\307\322\323\312\nDD\"CBBBB\207\304\332\"\203\374\306\307\310\311\312D\312	DE\"\307\313\314\315\312	D\312DF\"\307\333\334\312	D\335BB\"\307\336\337\312	D\340BB\"\205\366\307\322\323\312\nDD\"CBBBBB\207\341\342\343	#\207" [mode something lookup-name rebuild-flag memql (:tree) "---" vector "Close all files" filesets-close quote "Run Command" filesets-run-cmd nil format "Browse with `%s'" filesets-browser-name filesets-browse-dir "Rebuild this submenu" filesets-rebuild-this-submenu (:ingroup) (:pattern) filesets-entry-get-pattern--dir filesets-entry-get-pattern filesets-get-fileset-from-name :pattern (:files) "Add current buffer" filesets-add-buffer ((current-buffer)) "Remove current buffer" filesets-remove-buffer ((current-buffer)) filesets-error error "Filesets: malformed definition of "] 11 (#$ . 57826)])
#@63 Access to `filesets-ingroup-patterns'.  Extract data section.
(defalias 'filesets-ingroup-get-data #[(master pos &optional fun) "\305!	\206\306\307\310\f\"*\207" [master fun fn masterfile filesets-ingroup-patterns file-name-nondirectory #[(a b) ";\205	;\205\302	\"\207" [a b string-match] 3] filesets-some #[(x) "	@\n\"\205	8\207" [fn x masterfile pos] 3]] 3 (#$ . 59364)])
#@59 Access to `filesets-ingroup-patterns'.  Extract patterns.
(defalias 'filesets-ingroup-get-pattern #[(master) "\301\302\"\207" [master filesets-ingroup-get-data 2] 3 (#$ . 59759)])
#@73 Access to `filesets-ingroup-patterns'.  Extract remove-duplicates-flag.
(defalias 'filesets-ingroup-get-remdupl-p #[(master) "\301\302\"\207" [master filesets-ingroup-get-data 1] 3 (#$ . 59946)])
#@69 Helper function for `filesets-ingroup-collect'.  Find pattern PATT.
(defalias 'filesets-ingroup-collect-finder #[(patt case-sensitivep) "	?\305\n\306\307#\211*\207" [case-fold-search case-sensitivep patt rv cfs re-search-forward nil t] 6 (#$ . 60149)])
#@37 Access to `filesets-ingroup-cache'.
(defalias 'filesets-ingroup-cache-get #[(master) "\302	\"\207" [filesets-ingroup-cache master lax-plist-get] 3 (#$ . 60414)])
#@37 Access to `filesets-ingroup-cache'.
(defalias 'filesets-ingroup-cache-put #[(master file) "\305!\n\205
\n\306	!B\307\f	#\211*\207" [master emaster file this filesets-ingroup-cache expand-file-name filesets-ingroup-cache-get lax-plist-put] 4 (#$ . 60583)])
#@70 Helper function for `filesets-ingroup-collect'.  Collect file names.
(defalias 'filesets-ingroup-collect-files #[(fs &optional remdupl-flag master depth) "\206\306	!\n\206\307!\310\311\"\210\312\313\314#\210\315!\316\311\211\203Y
\311-\211.\203Q.@-\317-\320\311\321$/\317-\322\323\321$0\317-\324\311\321$1\317-\325\326\321$23\206f\317-\327\316\321$4\317-\330\311\321$5\317-\331\332\321$6\317-\333\311\321$7\317-\334\311\321$8\311\2119:/\204\241\335\336\337-#\210\202F4\316W\204F\340\341!;r;q\210\342\216\343!\210eb\2101\203\3041 \210\344/5\"\2038\3452!<6<\"\211=\2034=9\235\2044\n\203\366\346=>\347\350$\20448?\205\f7\2037=\"?\202\f\321?\fT=9B9=>B>?\203*\310=\"\210\351:=C\":)*\202\304+:\203F\352\353:\"\244..A\211.\2041\311-*\202^\312\313\354#-\207" [master fs remdupl-flag rv count cmdpatts filesets-entry-get-master filesets-ingroup-get-remdupl-p filesets-ingroup-cache-put nil filesets-message 2 "Filesets: parsing %S" filesets-ingroup-get-pattern 0 filesets-alist-get :pattern t :name "" :preprocess :match-number 1 :scan-depth :case-sensitive :get-file-name filesets-which-file :stubp :stub-flag filesets-error error "Filesets: malformed :ingroup definition " generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#1=#:temp-buffer buffer-name kill-buffer] 2)) insert-file-contents filesets-ingroup-collect-finder match-string filesets-member :test filesets-files-equalp append mapcar #[(this) "	D\305\n\fS$B\207" [this this-name fs remdupl-flag this-sd filesets-ingroup-collect-files] 6] "Filesets: no patterns defined for %S" this-def #2=#:--cl-dolist-temp-- this-patt this-name this-pp this-mn depth this-sd this-csp this-fn this-stubp this-stub-flag flist lst #1# txt f filesets-ingroup-files no-stub-flag] 7 (#$ . 60851)])
#@153 Helper function for `filesets-ingroup-collect'.  Build the menu.
FS is a fileset's name.  FLIST is a list returned by
`filesets-ingroup-collect-files'.
(defalias 'filesets-ingroup-collect-build-menu #[(fs flist &optional other-count) "\205\316\306	\307\307\211\203\312@\fT
<\203$
@\202'
\310D
<\2050
A@A@\311\203H\203L\f\202N!\203[\310\232\203_\310\202d\312\313\"\314!Q\315\n\203\257\316\317\314!P\320\321\322D\322DF\"\323\316\324\307\322D\322DF\"\323\315\306\325\326\")\327\330#\"BBBBBC\202\276\316\324\307\322D\322DF\"C\"-A\211\204\307\n-\207" [flist fs rv fsn count this 0 nil "" filesets-get-shortcut format "%s: " file-name-nondirectory append vector "Inclusion Group: " filesets-open ':ingroup quote "---" filesets-file-open mapcar #[(this) "T\304	\nC#\211G\305U\203@\202)\207" [count fs this ff filesets-ingroup-collect-build-menu 1] 5] filesets-get-menu-epilog :ingroup #1=#:--cl-dolist-temp-- def files master name other-count nm] 14 (#$ . 62726)])
#@52 Collect names of included files and build submenu.
(defalias 'filesets-ingroup-collect #[(fs remdupl-flag master) "\303\304\"\210\305\306\307#\210\310	\311	\n#\"\207" [master fs remdupl-flag filesets-ingroup-cache-put nil filesets-message 2 "Filesets: parsing %S" filesets-ingroup-collect-build-menu filesets-ingroup-collect-files] 6 (#$ . 63786)])
#@43 Build a :ingroup submenu for file MASTER.
(defalias 'filesets-build-ingroup-submenu #[(lookup-name master) "\305!\203\306!C\307	#)\207\f\203\310\311\"\210\312\207\313\314\315#\207" [master remdupl-flag filesets-ingroup-files lookup-name filesets-be-docile-flag file-readable-p filesets-ingroup-get-remdupl-p filesets-ingroup-collect message "Filesets: can't parse %s" nil filesets-error error "Filesets: can't parse "] 4 (#$ . 64144)])
#@51 Helper function for `filesets-build-dir-submenu'.
(defalias 'filesets-build-dir-submenu-now #[(level depth entry lookup-name dir patt fd &optional rebuild-flag) "\306U\204\f	W\205q\307\n!\310\311	\306U\203\n\202%\312\307\313\314\n!!!PP\315\316\317\nDD\fF\"\320B\321\n\322\211%\323!\306\324\325\"\323\326\" \324\327 \"!\330
\331\330!\"!\332\nD\316\f\"$#.\207" [depth level dir patt lookup-name header 0 file-name-as-directory vector "Tree: " ".../" file-name-nondirectory directory-file-name filesets-open :tree quote ("---") filesets-directory-files nil filesets-filter-dir-names mapcar #[(x) "T\306	!\n	P\307\fT
\f
&\310!	P\2030B\2027\311\312D\",\207" [count x dir xx level depth file-name-as-directory filesets-build-dir-submenu-now filesets-get-shortcut vector filesets-browse-dir entry lookup-name patt fd dd nm] 8] t #[(x) "T\304\305!	P\306\307\310\n	PD\310DF\"\207" [count x dir lookup-name vector filesets-get-shortcut filesets-file-open nil quote] 7] append filesets-wrap-submenu filesets-get-menu-epilog fd dirlist subdirs count dirsmenu files filesmenu rebuild-flag] 8 (#$ . 64599)])
#@119 Build a :tree submenu named LOOKUP-NAME with base directory DIR including
all files matching PATT for filesets ENTRY.
(defalias 'filesets-build-dir-submenu #[(entry lookup-name dir patt) "\306!\307!\206\n	\310\311\n\f
\312&*\207" [entry filesets-tree-max-level depth fd lookup-name dir filesets-entry-get-filter-dirs-flag filesets-entry-get-tree-max-level filesets-build-dir-submenu-now 0 t patt] 9 (#$ . 65768)])
#@89 Build submenu for the fileset ENTRY named LOOKUP-NAME.
Construct a shortcut from COUNT.
(defalias 'filesets-build-submenu #[(count lookup-name entry) "\206\306	!\307\310\"\210\311	!\312	!\313\n!P\314
\315\"\2038\316	!0\317\320\321\3220D\322DF\")\202\314
\323\"\203u\324	
\325#1\326	!2\327\330\3312B\"3\332\3173\333
E\"\334\335\336\337\3401\"!\341
\342$\",BB\202\314
\343\"\203\275\344	!4\317\345\3464!P\333\322
D\3224D\322DF\"\334\3174\320\321\3224D\322DF\"\334\335\336\3474\"!\3414
\342$\")BBBB\202\314
\350\"\203\343\351	!\2112@52\2116A@)7\352	57$+\202\314
\353\"\205\324	
\354#\3321\317\355P\333\322
D\322DE\"\334\335\336\337\356\3571\346\"\"!\341
\342$\"*BBB,\207" [lookup-name entry count this-lookup-name filesets-verbosity mode filesets-data-get-name message "Filesets: %s" filesets-entry-mode filesets-entry-get-verbosity filesets-get-shortcut memql (:file) filesets-entry-get-file vector filesets-file-open nil quote (:pattern) filesets-get-filelist on-ls filesets-entry-get-pattern apply concat "Pattern: " 0 filesets-open "---" append filesets-wrap-submenu mapcar #[(x) "T\303\304!\305	!P\306\307\310	D\310\nDF\"\207" [count x lookup-name vector filesets-get-shortcut file-name-nondirectory filesets-file-open nil quote] 7] filesets-get-menu-epilog t (:ingroup) filesets-entry-get-master "Inclusion Group: " file-name-nondirectory filesets-build-ingroup-submenu (:tree) filesets-entry-get-tree filesets-build-dir-submenu (:files) on-open-all "Files: " #[(x) "T\303\304!\305	!P\306\307\310	D\310\nDF\"\207" [count x lookup-name vector filesets-get-shortcut file-name-nondirectory filesets-file-open nil quote] 7] filesets-conditional-sort file files dirpatt pattname master dir x patt] 13 (#$ . 66198)])
#@63 BUFFER or current buffer require update of the filesets menu.
(defalias 'filesets-remove-from-ubl #[(&optional buffer) "\206p\211\n\235\205\303	\n\"\211)\207" [buffer b filesets-updated-buffers delete] 4 (#$ . 67988)])
#@152 Update the filesets menu.
Build all new if FROM-SCRATCH-FLAG is non-nil.  (To really build from the
bottom up, set `filesets-submenus' to nil, first.)
(defalias 'filesets-build-menu-now #[(from-scratch-flag) "\204\f	\204\f\n\204w\306\211\306\307\310
\311\"\312\203n@\313!\314\"\211\206A\315#\204R\316#\317!\204`\320\nC\",AT\202*\203w\321 \210p\211\235?\205\233\322 \323\324 \325\nBBBB!\"$\210B\211)\207" [from-scratch-flag filesets-has-changed-flag filesets-menu-cache filesets-updated-buffers filesets-update-cache-file-flag filesets-data nil t filesets-conditional-sort car 1 filesets-data-get-name lax-plist-get filesets-build-submenu lax-plist-put filesets-entry-get-dormant-flag append filesets-menu-cache-file-save-maybe add-submenu ("# Filesets" ["Edit Filesets" filesets-edit] ["Save Filesets" filesets-save-config] ["Save Menu Cache" filesets-menu-cache-file-save] ["Rebuild Menu" filesets-build-menu] ["Customize" filesets-customize] ["About" filesets-info]) filesets-get-cmd-menu "---" count data this name filesets-submenus cached submenu filesets-cache-save-often-flag cb filesets-menu-path filesets-menu-name filesets-menu-before filesets-menu-in-menu] 8 (#$ . 68221)])
#@27 Update the filesets menu.
(defalias 'filesets-build-menu-maybe #[nil "\300\301!\207" [filesets-build-menu-now nil] 2 (#$ . 69492) nil])
#@37 Force rebuild of the filesets menu.
(defalias 'filesets-build-menu #[nil "\300 \210\301\302!\210\303 \207" [filesets-reset-fileset filesets-build-menu-now t filesets-menu-cache-file-save-maybe] 2 (#$ . 69634) nil])
#@35 Force rebuild of FILESET submenu.
(defalias 'filesets-rebuild-this-submenu #[(fileset) "\301!\210\302\303!\207" [fileset filesets-reset-fileset filesets-build-menu-now t] 2 (#$ . 69855)])
#@142 Write filesets' cache file.
If SIMPLY-DO-IT is non-nil, the cache file will be written no matter if
fileset thinks this is necessary or not.
(defalias 'filesets-menu-cache-file-save-maybe #[(&optional simply-do-it) "\306\232?\205\223	\204\n\205\223\307!\203\310!\210\311\312!rq\210\313\216\f\314\211\203h@\211\315N\203R\316\317
\320
!#c\210\203[\321 \210\316\322\323
\323$c\210\202[\316\324
\320
!#c\210\321\325!\210A\211\204,*\316\326\"c\210\321\325!\210\203\204\316\327\330 \"c\210\321\325!\210\331\332!\210\333!\210+\314\211 \211\207" [filesets-menu-cache-file simply-do-it filesets-update-cache-file-flag #1=#:temp-buffer filesets-menu-cache-contents this "" file-exists-p delete-file generate-new-buffer " *temp*" ((byte-code "\301!\203\n\302!\210\301\207" [#1# buffer-name kill-buffer] 2)) nil custom-type format "(setq-default %s '%S)" eval newline "(setq %s (cons '%s %s))" filesets-ignore-next-set-default "(setq %s '%S)" 2 "(setq filesets-cache-version %S)" "(setq filesets-cache-hostname %S)" system-name run-hooks filesets-cache-fill-content-hooks write-file #2=#:--cl-dolist-temp-- filesets-menu-ensure-use-cached filesets-version filesets-cache-hostname-flag filesets-has-changed-flag] 7 (#$ . 70051)])
#@33 Save filesets' menu cache file.
(defalias 'filesets-menu-cache-file-save #[nil "\300\301!\207" [filesets-menu-cache-file-save-maybe t] 2 (#$ . 71313) nil])
#@68 Rebuild the menu and save the cache file after updating user data.
(defalias 'filesets-update-cleanup #[nil "\302\303	\206\304#\210\305 \210\306 \210\307 \207" [filesets-version filesets-cache-version message "Filesets v%s: updating menu & cache from version %s" "???" filesets-build-menu filesets-menu-cache-file-save-maybe filesets-menu-cache-file-load] 4 (#$ . 71475) nil])
(defalias 'filesets-update-pre010505 #[nil "\304	\206\n\305\306!\210c\210\307\310\311\"!\203\312!\210\313\314\"*\207" [msg custom-file user-init-file cf "Filesets: manual editing of user data required!\n\nFilesets has detected that you were using an older version before,\nwhich requires some manual updating. Type 'y' for editing the startup\nfile now.\n\nThe layout of `filesets-data' has changed. Please delete your cache file\nand edit your startup file as shown below:\n\n1. `filesets-data': Edit all :pattern filesets in your startup file and\ntransform all entries as shown in this example:\n\n   	(\"Test\" (:pattern \"~/dir/^pattern$\"))\n	--> (\"Test\" (:pattern \"~/dir/\" \"^pattern$\"))\n\n2. `filesets-data': Change all occurrences of \":document\" to \":ingroup\":\n\n      ((\"Test\" (:document \"~/dir/file\"))\n      --> ((\"Test\" (:ingroup \"~/dir/file\"))\n\n3. `filesets-subdocument-patterns': If you already modified the variable\npreviously called `filesets-subdocument-patterns', change its name to\n`filesets-ingroup-patterns'.\n\n4. `filesets-menu-cache-contents': If you already modified this\nvariable, change the entry `filesets-subdocument--cache' to\n`filesets-ingroup-cache'.\n\n5. Type M-x filesets-update-cleanup and restart Emacs.\n\nWe apologize for the inconvenience." switch-to-buffer-other-frame "*Filesets update*" y-or-n-p format "Edit startup (%s) file now? " find-file-other-window filesets-error error] 4])
#@45 Do some cleanup after updating filesets.el.
(defalias 'filesets-update #[(cached-version) "\203\301\231\204\302\303!\203\304 \210\305 \207" [cached-version "1.5.5" boundp filesets-subdocument-patterns filesets-update-pre010505 filesets-update-cleanup] 2 (#$ . 73323)])
#@33 Load filesets' menu cache file.
(defalias 'filesets-menu-cache-file-load #[nil "\306\232\204-\307!\203-\310!\210	\n\232\203)\203!\f\311 \232\202\"\312\203)\313\312\207\314	!\207\312\313\207" [filesets-menu-cache-file filesets-cache-version filesets-version filesets-cache-hostname-flag filesets-cache-hostname filesets-update-cache-file-flag "" file-readable-p load-file system-name t nil filesets-update] 2 (#$ . 73606)])
(defalias 'filesets-exit #[nil "\300 \207" [filesets-menu-cache-file-save-maybe] 1])
#@98 Filesets initialization.
Set up hooks, load the cache file -- if existing -- and build the menu.
(defalias 'filesets-init #[nil "\302\303\304\"\210\302\305\306\"\210\302\307\310\"\210\302\311\312\"\210\313 \203$\304 \210\205&\314\211\207\315 \207" [filesets-menu-ensure-use-cached filesets-menu-use-cached-flag add-hook menu-bar-update-hook filesets-build-menu-maybe kill-buffer-hook filesets-remove-from-ubl first-change-hook filesets-reset-filename-on-change kill-emacs-hook filesets-exit filesets-menu-cache-file-load t filesets-build-menu] 3 (#$ . 74132)])
(provide 'filesets)
