mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-25 19:11:56 +00:00
Add file-cache-add-directory-recursively function
Add file-cache-complete function Add file-cache-display function
This commit is contained in:
parent
af0ad939bd
commit
570896112a
@ -63,6 +63,9 @@
|
||||
;; * `file-cache-add-directory-using-locate': Uses the `locate' command to
|
||||
;; add files matching a pattern to the cache.
|
||||
;;
|
||||
;; * `file-cache-add-directory-recursively': Uses the find-lisp package to
|
||||
;; add all files matching a pattern to the cache.
|
||||
;;
|
||||
;; Use the function `file-cache-clear-cache' to remove all items from the
|
||||
;; cache. There are a number of `file-cache-delete' functions provided
|
||||
;; as well, but in general it is probably better to not worry too much
|
||||
@ -138,6 +141,9 @@
|
||||
|
||||
;;; Code:
|
||||
|
||||
(eval-when-compile
|
||||
(require 'find-lisp))
|
||||
|
||||
(defgroup file-cache nil
|
||||
"Find files using a pre-loaded cache."
|
||||
:group 'files
|
||||
@ -338,6 +344,30 @@ STRING is passed as an argument to the locate command."
|
||||
string)
|
||||
(file-cache-add-from-file-cache-buffer))
|
||||
|
||||
(defun file-cache-add-directory-recursively (dir &optional regexp)
|
||||
"Adds DIR and any subdirectories to the file-cache.
|
||||
This function does not use any external programs
|
||||
If the optional REGEXP argument is non-nil, only files which match it
|
||||
will be added to the cache. Note that the REGEXP is applied to the files
|
||||
in each directory, not to the directory list itself."
|
||||
(interactive "DAdd directory: ")
|
||||
(require 'find-lisp)
|
||||
(mapcar
|
||||
(function
|
||||
(lambda(file)
|
||||
(or (file-directory-p file)
|
||||
(let (filtered)
|
||||
(mapcar
|
||||
(function
|
||||
(lambda(regexp)
|
||||
(and (string-match regexp file)
|
||||
(setq filtered t))
|
||||
))
|
||||
file-cache-filter-regexps)
|
||||
filtered)
|
||||
(file-cache-add-file file))))
|
||||
(find-lisp-find-files dir (if regexp regexp "^"))))
|
||||
|
||||
(defun file-cache-add-from-file-cache-buffer (&optional regexp)
|
||||
"Add any entries found in the file cache buffer.
|
||||
Each entry matches the regular expression `file-cache-buffer-default-regexp'
|
||||
@ -625,6 +655,30 @@ the name is considered already unique; only the second substitution
|
||||
)
|
||||
)
|
||||
|
||||
(defun file-cache-complete ()
|
||||
"Complete the word at point, using the filecache."
|
||||
(interactive)
|
||||
(let (start pattern completion all)
|
||||
(save-excursion
|
||||
(skip-syntax-backward "^\"")
|
||||
(setq start (point)))
|
||||
(setq pattern (buffer-substring-no-properties start (point)))
|
||||
(setq completion (try-completion pattern file-cache-alist))
|
||||
(setq all (all-completions pattern file-cache-alist nil))
|
||||
(cond ((eq completion t))
|
||||
((null completion)
|
||||
(message "Can't find completion for \"%s\"" pattern)
|
||||
(ding))
|
||||
((not (string= pattern completion))
|
||||
(delete-region start (point))
|
||||
(insert completion)
|
||||
)
|
||||
(t
|
||||
(with-output-to-temp-buffer "*Completions*"
|
||||
(display-completion-list all))
|
||||
))
|
||||
))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Show parts of the cache
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -674,6 +728,21 @@ match REGEXP."
|
||||
(message "%s" (funcall file-cache-assoc-function file file-cache-alist))
|
||||
)
|
||||
|
||||
(defun file-cache-display ()
|
||||
"Display the file cache."
|
||||
(interactive)
|
||||
(let ((buf "*File Cache Contents*"))
|
||||
(with-current-buffer
|
||||
(get-buffer-create buf)
|
||||
(erase-buffer)
|
||||
(mapcar
|
||||
(function
|
||||
(lambda(item)
|
||||
(insert (nth 1 item) (nth 0 item) "\n")))
|
||||
file-cache-alist)
|
||||
(pop-to-buffer buf)
|
||||
)))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; Keybindings
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
Loading…
Reference in New Issue
Block a user