;; program's author or from the Free Software Foundation, Inc., 675 Mass
;; Ave, Cambridge, MA 02139, USA.
-(defvar filesets-version "1.8.1")
+(defvar filesets-version "1.8.4")
(defvar filesets-homepage
"http://members.a1.net/t.link/CompEmacsFilesets.html")
(when (funcall cond-fn elt)
(setq rv (append rv (list elt)))))))
+(defun filesets-ormap (fsom-pred lst)
+ "Return the tail of FSOM-LST for the head of which FSOM-PRED is non-nil."
+ (let ((fsom-lst lst)
+ (fsom-rv nil))
+ (while (and (not (null fsom-lst))
+ (null fsom-rv))
+ (if (funcall fsom-pred (car fsom-lst))
+ (setq fsom-rv fsom-lst)
+ (setq fsom-lst (cdr fsom-lst))))
+ fsom-rv))
+
+(defun filesets-some (fss-pred fss-lst)
+ "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."
+ (catch 'exit
+ (dolist (fss-this fss-lst nil)
+ (let ((fss-rv (funcall fss-pred fss-this)))
+ (when fss-rv
+ (throw 'exit fss-rv))))))
+;(fset 'filesets-some 'some) ;; or use the cl function
+
+(defun filesets-member (fsm-item fsm-lst &rest fsm-keys)
+ "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."
+ (let ((fsm-test (or (plist-get fsm-keys ':test)
+ (function equal))))
+ (filesets-ormap (lambda (fsm-this)
+ (funcall fsm-test fsm-item fsm-this))
+ fsm-lst)))
+;(fset 'filesets-member 'member*) ;; or use the cl function
+
(defun filesets-sublist (lst beg &optional end)
"Get the sublist of LST from BEG to END - 1."
(let ((rv nil)
:type 'sexp
:group 'filesets)
-(defcustom filesets-menu-path nil
- "*The menu under which the filesets menu should be inserted.
+(if filesets-running-xemacs
+ (progn
+ (defcustom filesets-menu-path nil
+ "*The menu under which the filesets menu should be inserted.
XEmacs specific; see `add-submenu' for documentation."
- :set (function filesets-set-default)
- :type 'sexp
- :group 'filesets)
+ :set (function filesets-set-default)
+ :type 'sexp
+ :group 'filesets)
-(defcustom filesets-menu-before "File"
- "*The name of a menu before which this menu should be added.
+ (defcustom filesets-menu-before "File"
+ "*The name of a menu before which this menu should be added.
XEmacs specific; see `add-submenu' for documentation."
- :set (function filesets-set-default)
- :type 'sexp
- :group 'filesets)
+ :set (function filesets-set-default)
+ :type 'sexp
+ :group 'filesets)
-(defcustom filesets-menu-in-menu nil
- "*Use that instead of `current-menubar' as the menu to change.
+ (defcustom filesets-menu-in-menu nil
+ "*Use that instead of `current-menubar' as the menu to change.
XEmacs specific; see `add-submenu' for documentation."
- :set (function filesets-set-default)
- :type 'sexp
- :group 'filesets)
+ :set (function filesets-set-default)
+ :type 'sexp
+ :group 'filesets))
+ (defvar filesets-menu-path nil)
+ (defvar filesets-menu-before nil)
+ (defvar filesets-menu-in-menu nil))
(defcustom filesets-menu-shortcuts-flag t
"*Non-nil means to prepend menus with hopefully unique shortcuts."
(if filesets-running-xemacs
"~/.xemacs/filesets-cache.el"
"~/.filesets-cache.el")
- "*File to be used for saving the filesets menu between (X)Emacs
-sessions. Set this to \"\", to disable caching of menus.
+ "*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'."
:set (function filesets-set-default)
:type 'file
:group 'filesets)
+(put 'filesets-menu-cache-file 'risky-local-variable t)
(defcustom filesets-menu-cache-contents
'(filesets-be-docile-flag
:group 'filesets)
(defcustom filesets-cache-hostname-flag nil
- "*Non-nil means cache the hostname. If the current name differs from
-the cached one, rebuild the menu and create a new cache file."
+ "*Non-nil means cache the hostname.
+If the current name differs from the cached one,
+rebuild the menu and create a new cache file."
:set (function filesets-set-default)
:type 'boolean
:group 'filesets)
:type 'integer
:group 'filesets)
-(defcustom filesets-browse-dir-fn 'dired
+(defcustom filesets-browse-dir-function 'dired
"*A function or command used for browsing directories.
When using an external command, \"%s\" will be replaced with the
directory's name.
:value nil))
:group 'filesets)
-(defcustom filesets-open-file-fn 'filesets-find-or-display-file
+(defcustom filesets-open-file-function 'filesets-find-or-display-file
"*The function used for opening files.
`filesets-find-or-display-file' ... Filesets' default function for
:value nil))
:group 'filesets)
-(defcustom filesets-save-buffer-fn 'save-buffer
+(defcustom filesets-save-buffer-function 'save-buffer
"*The function used to save a buffer.
Caveat: Changes will take effect after rebuilding the menu."
:set (function filesets-set-default)
(defcustom filesets-tree-max-level 3
"*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
+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
(function :tag "Function"
:value nil)))))
:group 'filesets)
+(put 'filesets-commands 'risky-local-variable t)
(defcustom filesets-external-viewers
(let
:constraintp FUNCTION ... use this viewer only if FUNCTION returns non-nil
-:constraint-flag SYMBOL ... use this viewer only if SYMBOL is 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
:value (:constraint-flag)
(const :format ""
:value :constraint-flag)
- (symbol :tag "Symbol"))
+ (sexp :tag "Symbol"))
(list :tag ":ignore-on-open-all"
:value (:ignore-on-open-all t)
(const :format ""
:value :capture-output)
(boolean :tag "Boolean"))))))
:group 'filesets)
-
+(put 'filesets-external-viewers 'risky-local-variable t)
(defcustom filesets-ingroup-patterns
'(("^.+\\.tex$" t
(const :format "" :value :preprocess)
(function :tag "Function")))))))
:group 'filesets)
+(put 'filesets-ingroup-patterns 'risky-local-variable t)
(defcustom filesets-data
nil
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-fn' is used.
+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'."
:value (:open)
(const :format "" :value :open)
(function :tag "Function")))))))
+(put 'filesets-data 'risky-local-variable t)
(defcustom filesets-query-user-limit 15
(lambda (a b)
(string< (upcase (funcall fni a))
(upcase (funcall fni b)))))))
- (sort (copy-list lst) fn))
+ (sort (copy-sequence lst) fn))
lst))
(defun filesets-directory-files (dir &optional
filename)))
(if (file-exists-p f)
f
- (some (lambda (dir)
- (let ((dir (file-name-as-directory dir))
- (files (if (file-exists-p dir)
- (filesets-directory-files dir nil ':files)
- nil)))
- (some (lambda (file)
- (if (equal filename (file-name-nondirectory file))
- (concat dir file)
- nil))
- files)))
- path-list))))
+ (filesets-some
+ (lambda (dir)
+ (let ((dir (file-name-as-directory dir))
+ (files (if (file-exists-p dir)
+ (filesets-directory-files dir nil ':files)
+ nil)))
+ (filesets-some (lambda (file)
+ (if (equal filename (file-name-nondirectory file))
+ (concat dir file)
+ nil))
+ files)))
+ path-list))))
(defun filesets-eviewer-get-props (entry)
(defun filesets-get-external-viewer (file)
"Find an external viewer for FILE."
(let ((filename (file-name-nondirectory file)))
- (some
+ (filesets-some
(lambda (entry)
(when (and (string-match (nth 0 entry) filename)
(filesets-eviewer-constraint-p entry))
(defun filesets-get-external-viewer-by-name (name)
"Get the external viewer definition called NAME."
(when name
- (some
+ (filesets-some
(lambda (entry)
(when (and (string-equal (nth 1 entry) name)
(filesets-eviewer-constraint-p entry))
(filesets-find-or-display-file nil (cadr (assoc viewer lst))))))
(defun filesets-browser-name ()
- "Get the directory browser's name as defined in `filesets-browse-dir-fn'."
+ "Get the directory browser's name as defined in `filesets-browse-dir-function'."
(cond
- ((listp filesets-browse-dir-fn)
- (car filesets-browse-dir-fn))
+ ((listp filesets-browse-dir-function)
+ (car filesets-browse-dir-function))
(t
- filesets-browse-dir-fn)))
+ filesets-browse-dir-function)))
(defun filesets-browse-dir (dir)
- "Browse DIR using `filesets-browse-dir-fn'."
- (if (functionp filesets-browse-dir-fn)
- (funcall filesets-browse-dir-fn dir)
- (let ((name (car filesets-browse-dir-fn))
- (args (format (cadr filesets-browse-dir-fn) (expand-file-name dir))))
+ "Browse DIR using `filesets-browse-dir-function'."
+ (if (functionp filesets-browse-dir-function)
+ (funcall filesets-browse-dir-function dir)
+ (let ((name (car filesets-browse-dir-function))
+ (args (format (cadr filesets-browse-dir-function) (expand-file-name dir))))
(with-temp-buffer
(start-process (concat "Filesets:" name)
"*Filesets external directory browser*"
"Return fileset ENTRY's mode: :files, :file, :tree, :pattern, or :ingroup.
See `filesets-data'."
(let ((data (filesets-data-get-data entry)))
- (some (lambda (x)
- (if (assoc x data)
- x))
- '(:files :tree :pattern :ingroup :file))))
+ (filesets-some
+ (lambda (x)
+ (if (assoc x data)
+ x))
+ '(:files :tree :pattern :ingroup :file))))
(defun filesets-entry-get-open-fn (fileset-name &optional fileset-entry)
"Get the open-function for FILESET-NAME.
Use FILESET-ENTRY for finding the open function, if provided."
(filesets-data-get (or fileset-entry
(filesets-get-fileset-from-name fileset-name))
- ':open filesets-open-file-fn t))
+ ':open filesets-open-file-function t))
(defun filesets-entry-get-save-fn (fileset-name &optional fileset-entry)
"Get the save-function for FILESET-NAME.
Use FILESET-ENTRY for finding the save function, if provided."
(filesets-data-get (or fileset-entry
(filesets-get-fileset-from-name fileset-name))
- ':save filesets-save-buffer-fn t))
+ ':save filesets-save-buffer-function t))
(defun filesets-entry-get-files (entry)
"Get the file list for fileset ENTRY."
(if entry
(let* ((files (filesets-entry-get-files entry))
(this (buffer-file-name buffer))
- (inlist (member* this files :test 'filesets-files-equalp)))
+ (inlist (filesets-member this files
+ :test 'filesets-files-equalp)))
(cond
(inlist
(message "Filesets: '%s' is already in '%s'" this name))
(if entry
(let* ((files (filesets-entry-get-files entry))
(this (buffer-file-name buffer))
- (inlist (member* this files :test 'filesets-files-equalp)))
+ (inlist (filesets-member this files
+ :test 'filesets-files-equalp)))
;;(message "%s %s %s" files this inlist)
(if (and files this inlist)
(let ((new (list (cons ':files (delete (car inlist) files)))))
(and (stringp a)
(stringp b)
(string-match a b))))))
- (some (lambda (x)
- (if (funcall fn (car x) masterfile)
- (nth pos x)
- nil))
- filesets-ingroup-patterns)))
+ (filesets-some (lambda (x)
+ (if (funcall fn (car x) masterfile)
+ (nth pos x)
+ nil))
+ filesets-ingroup-patterns)))
(defun filesets-ingroup-get-pattern (master)
"Access to `filesets-ingroup-patterns'. Extract patterns."
(when (and f
(not (member f flist))
(or (not remdupl-flag)
- (not (member*
+ (not (filesets-member
f filesets-ingroup-files
:test 'filesets-files-equalp))))
(let ((no-stub-flag
(provide 'filesets)
;;; Local Variables:
-;;; time-stamp-format:"%:y-%02m-%02d"
;;; sentence-end-double-space:t
;;; End: