aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Monnier2009-11-30 13:49:13 +0000
committerStefan Monnier2009-11-30 13:49:13 +0000
commit20565545f2e2094d4ff811223213d7c8b537ee80 (patch)
tree834ecc892170ce1090583ef80d64efb5c17ae455
parent7a9547ca154a37fdb68e953adecbd87b4953b65c (diff)
downloademacs-20565545f2e2094d4ff811223213d7c8b537ee80.tar.gz
emacs-20565545f2e2094d4ff811223213d7c8b537ee80.zip
Minor cleanup and simplification.
* filecache.el (file-cache-add-directory, file-cache-add-directory-recursively) (file-cache-add-from-file-cache-buffer) (file-cache-delete-file-regexp, file-cache-delete-directory) (file-cache-files-matching-internal, file-cache-display): Use dolist. (file-cache-temp-minibuffer-message): Delete function. (file-cache-minibuffer-complete): Use minibuffer-message instead.
-rw-r--r--lisp/ChangeLog9
-rw-r--r--lisp/filecache.el164
2 files changed, 62 insertions, 111 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index e35cdf99fa2..f53049dc538 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,14 @@
12009-11-30 Stefan Monnier <monnier@iro.umontreal.ca> 12009-11-30 Stefan Monnier <monnier@iro.umontreal.ca>
2 2
3 Minor cleanup and simplification.
4 * filecache.el (file-cache-add-directory)
5 (file-cache-add-directory-recursively)
6 (file-cache-add-from-file-cache-buffer)
7 (file-cache-delete-file-regexp, file-cache-delete-directory)
8 (file-cache-files-matching-internal, file-cache-display): Use dolist.
9 (file-cache-temp-minibuffer-message): Delete function.
10 (file-cache-minibuffer-complete): Use minibuffer-message instead.
11
3 * progmodes/perl-mode.el (perl-font-lock-special-syntactic-constructs): 12 * progmodes/perl-mode.el (perl-font-lock-special-syntactic-constructs):
4 Don't signal an error when bumping into EOB in tr, s, or y. 13 Don't signal an error when bumping into EOB in tr, s, or y.
5 14
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 6f550a4b5ec..46269178f9b 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -155,6 +155,8 @@
155 155
156;; User-modifiable variables 156;; User-modifiable variables
157(defcustom file-cache-filter-regexps 157(defcustom file-cache-filter-regexps
158 ;; These are also used in buffers containing lines of file names,
159 ;; so the end-of-name is matched with $ rather than \\'.
158 (list "~$" "\\.o$" "\\.exe$" "\\.a$" "\\.elc$" ",v$" "\\.output$" 160 (list "~$" "\\.o$" "\\.exe$" "\\.a$" "\\.elc$" ",v$" "\\.output$"
159 "\\.$" "#$" "\\.class$") 161 "\\.$" "#$" "\\.class$")
160 "List of regular expressions used as filters by the file cache. 162 "List of regular expressions used as filters by the file cache.
@@ -210,9 +212,8 @@ should be t."
210 completion-ignore-case) 212 completion-ignore-case)
211 "If non-nil, file-cache completion should ignore case. 213 "If non-nil, file-cache completion should ignore case.
212Defaults to the value of `completion-ignore-case'." 214Defaults to the value of `completion-ignore-case'."
213 :type 'sexp 215 :type 'boolean
214 :group 'file-cache 216 :group 'file-cache)
215 )
216 217
217(defcustom file-cache-case-fold-search 218(defcustom file-cache-case-fold-search
218 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) 219 (if (memq system-type (list 'ms-dos 'windows-nt 'cygwin))
@@ -220,17 +221,15 @@ Defaults to the value of `completion-ignore-case'."
220 case-fold-search) 221 case-fold-search)
221 "If non-nil, file-cache completion should ignore case. 222 "If non-nil, file-cache completion should ignore case.
222Defaults to the value of `case-fold-search'." 223Defaults to the value of `case-fold-search'."
223 :type 'sexp 224 :type 'boolean
224 :group 'file-cache 225 :group 'file-cache)
225 )
226 226
227(defcustom file-cache-ignore-case 227(defcustom file-cache-ignore-case
228 (memq system-type (list 'ms-dos 'windows-nt 'cygwin)) 228 (memq system-type (list 'ms-dos 'windows-nt 'cygwin))
229 "Non-nil means ignore case when checking completions in the file cache. 229 "Non-nil means ignore case when checking completions in the file cache.
230Defaults to nil on DOS and Windows, and t on other systems." 230Defaults to nil on DOS and Windows, and t on other systems."
231 :type 'sexp 231 :type 'boolean
232 :group 'file-cache 232 :group 'file-cache)
233 )
234 233
235(defvar file-cache-multiple-directory-message nil) 234(defvar file-cache-multiple-directory-message nil)
236 235
@@ -283,19 +282,14 @@ be added to the cache."
283 (if (not (file-accessible-directory-p directory)) 282 (if (not (file-accessible-directory-p directory))
284 (message "Directory %s does not exist" directory) 283 (message "Directory %s does not exist" directory)
285 (let* ((dir (expand-file-name directory)) 284 (let* ((dir (expand-file-name directory))
286 (dir-files (directory-files dir t regexp)) 285 (dir-files (directory-files dir t regexp)))
287 )
288 ;; Filter out files we don't want to see 286 ;; Filter out files we don't want to see
289 (mapc 287 (dolist (file dir-files)
290 '(lambda (file) 288 (if (file-directory-p file)
291 (if (file-directory-p file) 289 (setq dir-files (delq file dir-files))
292 (setq dir-files (delq file dir-files)) 290 (dolist (regexp file-cache-filter-regexps)
293 (mapc 291 (if (string-match regexp file)
294 '(lambda (regexp) 292 (setq dir-files (delq file dir-files))))))
295 (if (string-match regexp file)
296 (setq dir-files (delq file dir-files))))
297 file-cache-filter-regexps)))
298 dir-files)
299 (file-cache-add-file-list dir-files)))) 293 (file-cache-add-file-list dir-files))))
300 294
301;;;###autoload 295;;;###autoload
@@ -306,7 +300,7 @@ will be added to the cache. Note that the REGEXP is applied to the files
306in each directory, not to the directory list itself." 300in each directory, not to the directory list itself."
307 (interactive "XAdd files from directory list: ") 301 (interactive "XAdd files from directory list: ")
308 (mapcar 302 (mapcar
309 '(lambda (dir) (file-cache-add-directory dir regexp)) 303 (lambda (dir) (file-cache-add-directory dir regexp))
310 directory-list)) 304 directory-list))
311 305
312(defun file-cache-add-file-list (file-list) 306(defun file-cache-add-file-list (file-list)
@@ -326,8 +320,7 @@ in each directory, not to the directory list itself."
326 (dir-name (file-name-directory file)) 320 (dir-name (file-name-directory file))
327 (the-entry (assoc-string 321 (the-entry (assoc-string
328 file-name file-cache-alist 322 file-name file-cache-alist
329 file-cache-ignore-case)) 323 file-cache-ignore-case)))
330 )
331 ;; Does the entry exist already? 324 ;; Does the entry exist already?
332 (if the-entry 325 (if the-entry
333 (if (or (and (stringp (cdr the-entry)) 326 (if (or (and (stringp (cdr the-entry))
@@ -385,17 +378,13 @@ in each directory, not to the directory list itself."
385 (require 'find-lisp) 378 (require 'find-lisp)
386 (mapcar 379 (mapcar
387 (function 380 (function
388 (lambda(file) 381 (lambda (file)
389 (or (file-directory-p file) 382 (or (file-directory-p file)
390 (let (filtered) 383 (let (filtered)
391 (mapc 384 (dolist (regexp file-cache-filter-regexps)
392 (function 385 (and (string-match regexp file)
393 (lambda(regexp) 386 (setq filtered t)))
394 (and (string-match regexp file) 387 filtered)
395 (setq filtered t))
396 ))
397 file-cache-filter-regexps)
398 filtered)
399 (file-cache-add-file file)))) 388 (file-cache-add-file file))))
400 (find-lisp-find-files dir (if regexp regexp "^")))) 389 (find-lisp-find-files dir (if regexp regexp "^"))))
401 390
@@ -404,11 +393,9 @@ in each directory, not to the directory list itself."
404Each entry matches the regular expression `file-cache-buffer-default-regexp' 393Each entry matches the regular expression `file-cache-buffer-default-regexp'
405or the optional REGEXP argument." 394or the optional REGEXP argument."
406 (set-buffer file-cache-buffer) 395 (set-buffer file-cache-buffer)
407 (mapc 396 (dolist (elt file-cache-filter-regexps)
408 (function (lambda (elt) 397 (goto-char (point-min))
409 (goto-char (point-min)) 398 (delete-matching-lines elt))
410 (delete-matching-lines elt)))
411 file-cache-filter-regexps)
412 (goto-char (point-min)) 399 (goto-char (point-min))
413 (let ((full-filename)) 400 (let ((full-filename))
414 (while (re-search-forward 401 (while (re-search-forward
@@ -445,10 +432,9 @@ or the optional REGEXP argument."
445 "Delete files matching REGEXP from the file cache." 432 "Delete files matching REGEXP from the file cache."
446 (interactive "sRegexp: ") 433 (interactive "sRegexp: ")
447 (let ((delete-list)) 434 (let ((delete-list))
448 (mapc (lambda (elt) 435 (dolist (elt file-cache-alist)
449 (and (string-match regexp (car elt)) 436 (and (string-match regexp (car elt))
450 (push (car elt) delete-list))) 437 (push (car elt) delete-list)))
451 file-cache-alist)
452 (file-cache-delete-file-list delete-list) 438 (file-cache-delete-file-list delete-list)
453 (message "Filecache: deleted %d files from file cache" 439 (message "Filecache: deleted %d files from file cache"
454 (length delete-list)))) 440 (length delete-list))))
@@ -458,26 +444,21 @@ or the optional REGEXP argument."
458 (interactive "DDelete directory from file cache: ") 444 (interactive "DDelete directory from file cache: ")
459 (let ((dir (expand-file-name directory)) 445 (let ((dir (expand-file-name directory))
460 (result 0)) 446 (result 0))
461 (mapc 447 (dolist (entry file-cache-alist)
462 (lambda (entry) 448 (if (file-cache-do-delete-directory dir entry)
463 (if (file-cache-do-delete-directory dir entry) 449 (setq result (1+ result))))
464 (setq result (1+ result))))
465 file-cache-alist)
466 (if (zerop result) 450 (if (zerop result)
467 (error "Filecache: no entries containing %s found in cache" directory) 451 (error "Filecache: no entries containing %s found in cache" directory)
468 (message "Filecache: deleted %d entries" result)))) 452 (message "Filecache: deleted %d entries" result))))
469 453
470(defun file-cache-do-delete-directory (dir entry) 454(defun file-cache-do-delete-directory (dir entry)
471 (let ((directory-list (cdr entry)) 455 (let ((directory-list (cdr entry))
472 (directory (file-cache-canonical-directory dir)) 456 (directory (file-cache-canonical-directory dir)))
473 )
474 (and (member directory directory-list) 457 (and (member directory directory-list)
475 (if (equal 1 (length directory-list)) 458 (if (equal 1 (length directory-list))
476 (setq file-cache-alist 459 (setq file-cache-alist
477 (delq entry file-cache-alist)) 460 (delq entry file-cache-alist))
478 (setcdr entry (delete directory directory-list))) 461 (setcdr entry (delete directory directory-list))))))
479 )
480 ))
481 462
482(defun file-cache-delete-directory-list (directory-list) 463(defun file-cache-delete-directory-list (directory-list)
483 "Delete DIRECTORY-LIST (a list of directories) from the file cache." 464 "Delete DIRECTORY-LIST (a list of directories) from the file cache."
@@ -495,8 +476,7 @@ or the optional REGEXP argument."
495 file-cache-ignore-case))) 476 file-cache-ignore-case)))
496 (len (length directory-list)) 477 (len (length directory-list))
497 (directory) 478 (directory)
498 (num) 479 (num))
499 )
500 (if (not (listp directory-list)) 480 (if (not (listp directory-list))
501 (error "Filecache: unknown type in file-cache-alist for key %s" file)) 481 (error "Filecache: unknown type in file-cache-alist for key %s" file))
502 (cond 482 (cond
@@ -509,8 +489,7 @@ or the optional REGEXP argument."
509 ;; Multiple elements 489 ;; Multiple elements
510 (t 490 (t
511 (let* ((minibuffer-dir (file-name-directory (minibuffer-contents))) 491 (let* ((minibuffer-dir (file-name-directory (minibuffer-contents)))
512 (dir-list (member minibuffer-dir directory-list)) 492 (dir-list (member minibuffer-dir directory-list)))
513 )
514 (setq directory 493 (setq directory
515 ;; If the directory is in the list, return the next element 494 ;; If the directory is in the list, return the next element
516 ;; Otherwise, return the first element 495 ;; Otherwise, return the first element
@@ -518,10 +497,7 @@ or the optional REGEXP argument."
518 (or (elt directory-list 497 (or (elt directory-list
519 (setq num (1+ (- len (length dir-list))))) 498 (setq num (1+ (- len (length dir-list)))))
520 (elt directory-list (setq num 0))) 499 (elt directory-list (setq num 0)))
521 (elt directory-list (setq num 0)))) 500 (elt directory-list (setq num 0)))))))
522 )
523 )
524 )
525 ;; If there were multiple directories, set up a minibuffer message 501 ;; If there were multiple directories, set up a minibuffer message
526 (setq file-cache-multiple-directory-message 502 (setq file-cache-multiple-directory-message
527 (and num (format " [%d of %d]" (1+ num) len))) 503 (and num (format " [%d of %d]" (1+ num) len)))
@@ -569,20 +545,17 @@ the name is considered already unique; only the second substitution
569 (completion-string (try-completion string file-cache-alist)) 545 (completion-string (try-completion string file-cache-alist))
570 (completion-list) 546 (completion-list)
571 (len) 547 (len)
572 (file-cache-string) 548 (file-cache-string))
573 )
574 (cond 549 (cond
575 ;; If it's the only match, replace the original contents 550 ;; If it's the only match, replace the original contents
576 ((or arg (eq completion-string t)) 551 ((or arg (eq completion-string t))
577 (setq file-cache-string (file-cache-file-name string)) 552 (setq file-cache-string (file-cache-file-name string))
578 (if (string= file-cache-string (minibuffer-contents)) 553 (if (string= file-cache-string (minibuffer-contents))
579 (file-cache-temp-minibuffer-message file-cache-sole-match-message) 554 (minibuffer-message file-cache-sole-match-message)
580 (delete-minibuffer-contents) 555 (delete-minibuffer-contents)
581 (insert file-cache-string) 556 (insert file-cache-string)
582 (if file-cache-multiple-directory-message 557 (if file-cache-multiple-directory-message
583 (file-cache-temp-minibuffer-message 558 (minibuffer-message file-cache-multiple-directory-message))))
584 file-cache-multiple-directory-message))
585 ))
586 559
587 ;; If it's the longest match, insert it 560 ;; If it's the longest match, insert it
588 ((stringp completion-string) 561 ((stringp completion-string)
@@ -596,11 +569,9 @@ the name is considered already unique; only the second substitution
596 (progn 569 (progn
597 (delete-minibuffer-contents) 570 (delete-minibuffer-contents)
598 (insert (file-cache-file-name completion-string)) 571 (insert (file-cache-file-name completion-string))
599 (setq file-cache-last-completion nil) 572 (setq file-cache-last-completion nil))
600 ) 573 (minibuffer-message file-cache-non-unique-message)
601 (file-cache-temp-minibuffer-message file-cache-non-unique-message) 574 (setq file-cache-last-completion string))
602 (setq file-cache-last-completion string)
603 )
604 (setq file-cache-last-completion string) 575 (setq file-cache-last-completion string)
605 (setq completion-list (all-completions string file-cache-alist) 576 (setq completion-list (all-completions string file-cache-alist)
606 len (length completion-list)) 577 len (length completion-list))
@@ -617,34 +588,16 @@ the name is considered already unique; only the second substitution
617 (display-completion-list completion-list string)))) 588 (display-completion-list completion-list string))))
618 (setq file-cache-string (file-cache-file-name completion-string)) 589 (setq file-cache-string (file-cache-file-name completion-string))
619 (if (string= file-cache-string (minibuffer-contents)) 590 (if (string= file-cache-string (minibuffer-contents))
620 (file-cache-temp-minibuffer-message 591 (minibuffer-message file-cache-sole-match-message)
621 file-cache-sole-match-message)
622 (delete-minibuffer-contents) 592 (delete-minibuffer-contents)
623 (insert file-cache-string) 593 (insert file-cache-string)
624 (if file-cache-multiple-directory-message 594 (if file-cache-multiple-directory-message
625 (file-cache-temp-minibuffer-message 595 (minibuffer-message file-cache-multiple-directory-message)))
626 file-cache-multiple-directory-message)))
627 ))) 596 )))
628 597
629 ;; No match 598 ;; No match
630 ((eq completion-string nil) 599 ((eq completion-string nil)
631 (file-cache-temp-minibuffer-message file-cache-no-match-message)) 600 (minibuffer-message file-cache-no-match-message)))))
632 )
633))
634
635;; Lifted from "complete.el"
636(defun file-cache-temp-minibuffer-message (msg)
637 "A Lisp version of `temp_minibuffer_message' from minibuf.c."
638 (let ((savemax (point-max)))
639 (save-excursion
640 (goto-char (point-max))
641 (insert msg))
642 (let ((inhibit-quit t))
643 (sit-for 2)
644 (delete-region savemax (point-max))
645 (if quit-flag
646 (setq quit-flag nil
647 unread-command-events (list 7))))))
648 601
649;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
650;; Completion functions 603;; Completion functions
@@ -682,16 +635,10 @@ the name is considered already unique; only the second substitution
682 "Output a list of files whose names (not including directories) 635 "Output a list of files whose names (not including directories)
683match REGEXP." 636match REGEXP."
684 (let ((results)) 637 (let ((results))
685 (mapc 638 (dolist (cache-element file-cache-alist)
686 (function 639 (and (string-match regexp (elt cache-element 0))
687 (lambda(cache-element) 640 (push (elt cache-element 0) results)))
688 (and (string-match regexp 641 (nreverse results)))
689 (elt cache-element 0))
690 (if results
691 (nconc results (list (elt cache-element 0)))
692 (setq results (list (elt cache-element 0)))))))
693 file-cache-alist)
694 results))
695 642
696(defun file-cache-files-matching (regexp) 643(defun file-cache-files-matching (regexp)
697 "Output a list of files whose names (not including directories) 644 "Output a list of files whose names (not including directories)
@@ -721,8 +668,7 @@ match REGEXP."
721 (interactive 668 (interactive
722 (list (completing-read "File Cache: " file-cache-alist))) 669 (list (completing-read "File Cache: " file-cache-alist)))
723 (message "%s" (assoc-string file file-cache-alist 670 (message "%s" (assoc-string file file-cache-alist
724 file-cache-ignore-case)) 671 file-cache-ignore-case)))
725 )
726 672
727(defun file-cache-display () 673(defun file-cache-display ()
728 "Display the file cache." 674 "Display the file cache."
@@ -731,13 +677,9 @@ match REGEXP."
731 (with-current-buffer 677 (with-current-buffer
732 (get-buffer-create buf) 678 (get-buffer-create buf)
733 (erase-buffer) 679 (erase-buffer)
734 (mapc 680 (dolist (item file-cache-alist)
735 (function 681 (insert (nth 1 item) (nth 0 item) "\n"))
736 (lambda(item) 682 (pop-to-buffer buf))))
737 (insert (nth 1 item) (nth 0 item) "\n")))
738 file-cache-alist)
739 (pop-to-buffer buf)
740 )))
741 683
742;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 684;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
743;; Keybindings 685;; Keybindings