84 |
|
|
85 |
;;; Some variables |
;;; Some variables |
86 |
(eval-and-compile |
(eval-and-compile |
87 |
(unless (boundp 'filesets-running-xemacs) |
(defvar filesets-running-xemacs (string-match "XEmacs\\|Lucid" emacs-version) |
88 |
(defvar filesets-running-xemacs (string-match "XEmacs\\|Lucid" emacs-version) |
"Non-nil means we are running XEmacs.")) |
|
"Non-nil means we are running XEmacs."))) |
|
89 |
|
|
90 |
(defvar filesets-menu-cache nil |
(defvar filesets-menu-cache nil |
91 |
"The whole filesets menu.") |
"The whole filesets menu.") |
96 |
|
|
97 |
(defvar filesets-ingroup-cache nil |
(defvar filesets-ingroup-cache nil |
98 |
"A plist containing files and their ingroup data.") |
"A plist containing files and their ingroup data.") |
99 |
(defvar filesets-ingroup-paths nil |
(defvar filesets-ingroup-files nil |
100 |
"A temporary list of path already processed when searching for |
"List of files already processed when searching for included files.") |
|
included files.") |
|
101 |
|
|
102 |
(defvar filesets-has-changed-flag t |
(defvar filesets-has-changed-flag t |
103 |
"Non-nil means some fileset definition has changed.") |
"Non-nil means some fileset definition has changed.") |
1016 |
:group 'filesets) |
:group 'filesets) |
1017 |
|
|
1018 |
|
|
|
(defun filesets-error (class &rest args) |
|
|
"`error' wrapper." |
|
|
(error (apply 'concat |
|
|
(mapcar (lambda (x) (format "%s " x)) |
|
|
args)))) |
|
|
|
|
1019 |
;;; Emacs compatibility |
;;; Emacs compatibility |
1020 |
(eval-and-compile |
(eval-and-compile |
1021 |
(if filesets-running-xemacs |
(if filesets-running-xemacs |
1022 |
(progn |
(progn |
1023 |
|
(fset 'filesets-error 'error) |
1024 |
(fset 'filesets-add-submenu 'add-submenu)) |
(fset 'filesets-add-submenu 'add-submenu)) |
|
|
|
|
(progn |
|
1025 |
|
|
1026 |
(require 'easymenu) |
(require 'easymenu) |
1027 |
|
|
1028 |
;; This should work for 21.1 Emacs |
(defun filesets-error (class &rest args) |
1029 |
(defun filesets-add-submenu (menu-path submenu &optional |
"`error' wrapper." |
1030 |
before in-menu) |
(error (mapconcat 'identity args " "))) |
1031 |
"`easy-menu-define' wrapper." |
|
1032 |
(easy-menu-define |
;; This should work for 21.1 Emacs |
1033 |
filesets-submenu global-map "Filesets menu" submenu)) |
(defun filesets-add-submenu (menu-path submenu &optional |
1034 |
))) |
before in-menu) |
1035 |
|
"`easy-menu-define' wrapper." |
1036 |
;;; helper |
(easy-menu-define |
1037 |
;(defmacro filesets-testing (feature messagep &rest body) |
filesets-submenu global-map "Filesets menu" submenu)) |
1038 |
; (cond |
)) |
|
; ((equal filesets-version "testing") |
|
|
; `(progn ,@body)) |
|
|
; (messagep |
|
|
; (message "Filestats: feature `%s' is disabled." feature) |
|
|
; nil) |
|
|
; (t |
|
|
; nil))) |
|
|
|
|
|
;(defun filesets-not-yet-implemented (feature) |
|
|
; (message "Filestats: `%s' is not yet implemented." feature)) |
|
1039 |
|
|
1040 |
(defun filesets-filter-dir-names (lst &optional negative) |
(defun filesets-filter-dir-names (lst &optional negative) |
1041 |
"Remove non-directory names from a list of strings. If NEGATIVE is |
"Remove non-directory names from a list of strings. If NEGATIVE is |
1333 |
(filesets-spawn-external-viewer file external-viewer-def) |
(filesets-spawn-external-viewer file external-viewer-def) |
1334 |
(filesets-find-file file)))) |
(filesets-find-file file)))) |
1335 |
|
|
1336 |
(defun fsfind-file-using () |
(defun filesets-find-file-using () |
1337 |
"Select a viewer and call `filesets-find-or-display-file'." |
"Select a viewer and call `filesets-find-or-display-file'." |
1338 |
(interactive) |
(interactive) |
1339 |
(let* ((lst (mapcar (lambda (this) |
(let* ((lst (mapcar (lambda (this) |
2021 |
(not (member f flist)) |
(not (member f flist)) |
2022 |
(or (not remdupl-flag) |
(or (not remdupl-flag) |
2023 |
(not (member* |
(not (member* |
2024 |
f filesets-ingroup-paths |
f filesets-ingroup-files |
2025 |
:test 'filesets-files-equalp)))) |
:test 'filesets-files-equalp)))) |
2026 |
(let ((no-stub-flag |
(let ((no-stub-flag |
2027 |
(and (not this-stub-flag) |
(and (not this-stub-flag) |
2030 |
t)))) |
t)))) |
2031 |
(setq count (+ count 1)) |
(setq count (+ count 1)) |
2032 |
(setq flist (cons f flist)) |
(setq flist (cons f flist)) |
2033 |
(setq filesets-ingroup-paths |
(setq filesets-ingroup-files |
2034 |
(cons f filesets-ingroup-paths)) |
(cons f filesets-ingroup-files)) |
2035 |
(when no-stub-flag |
(when no-stub-flag |
2036 |
(filesets-ingroup-cache-put master f)) |
(filesets-ingroup-cache-put master f)) |
2037 |
(setq lst (append lst (list f)))))))) |
(setq lst (append lst (list f)))))))) |
2102 |
"Build a :ingroup submenu for file MASTER." |
"Build a :ingroup submenu for file MASTER." |
2103 |
(if (file-readable-p master) |
(if (file-readable-p master) |
2104 |
(let ((remdupl-flag (filesets-ingroup-get-remdupl-p master))) |
(let ((remdupl-flag (filesets-ingroup-get-remdupl-p master))) |
2105 |
(setq filesets-ingroup-paths (list master)) |
(setq filesets-ingroup-files (list master)) |
2106 |
(filesets-ingroup-collect lookup-name remdupl-flag master)) |
(filesets-ingroup-collect lookup-name remdupl-flag master)) |
2107 |
(if filesets-be-docile-flag |
(if filesets-be-docile-flag |
2108 |
(progn |
(progn |