Mercurial > emacs
comparison lisp/dired.el @ 17206:30a9faea2a54
(dired-glob-regexp): New function.
(dired-buffers-for-dir): New arg FILE; if non-nil,
check that it matches the wildcard pattern.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sat, 22 Mar 1997 03:40:55 +0000 |
parents | 471ce207330c |
children | cc5b0995866f |
comparison
equal
deleted
inserted
replaced
17205:a886f419a946 | 17206:30a9faea2a54 |
---|---|
1 ;;; dired.el --- directory-browsing commands | 1 ;;; dired.el --- directory-browsing commands |
2 | 2 |
3 ;; Copyright (C) 1985, 86, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. | 3 ;; Copyright (C) 1985, 86, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. |
4 | 4 |
5 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de> | 5 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de> |
6 ;; Maintainer: FSF | 6 ;; Maintainer: FSF |
7 | 7 |
8 ;; This file is part of GNU Emacs. | 8 ;; This file is part of GNU Emacs. |
1389 ;; Enlarged by dired-advertise | 1389 ;; Enlarged by dired-advertise |
1390 ;; Queried by function dired-buffers-for-dir. When this detects a | 1390 ;; Queried by function dired-buffers-for-dir. When this detects a |
1391 ;; killed buffer, it is removed from this list. | 1391 ;; killed buffer, it is removed from this list. |
1392 "Alist of expanded directories and their associated dired buffers.") | 1392 "Alist of expanded directories and their associated dired buffers.") |
1393 | 1393 |
1394 (defun dired-buffers-for-dir (dir) | 1394 (defun dired-buffers-for-dir (dir &optional file) |
1395 ;; Return a list of buffers that dired DIR (top level or in-situ subdir). | 1395 ;; Return a list of buffers that dired DIR (top level or in-situ subdir). |
1396 ;; If FILE is non-nil, include only those whose wildcard pattern (if any) | |
1397 ;; matches FILE. | |
1396 ;; The list is in reverse order of buffer creation, most recent last. | 1398 ;; The list is in reverse order of buffer creation, most recent last. |
1397 ;; As a side effect, killed dired buffers for DIR are removed from | 1399 ;; As a side effect, killed dired buffers for DIR are removed from |
1398 ;; dired-buffers. | 1400 ;; dired-buffers. |
1399 (setq dir (file-name-as-directory dir)) | 1401 (setq dir (file-name-as-directory dir)) |
1400 (let ((alist dired-buffers) result elt buf) | 1402 (let ((alist dired-buffers) result elt buf pattern) |
1401 (while alist | 1403 (while alist |
1402 (setq elt (car alist) | 1404 (setq elt (car alist) |
1403 buf (cdr elt)) | 1405 buf (cdr elt)) |
1404 (if (buffer-name buf) | 1406 (if (buffer-name buf) |
1405 (if (dired-in-this-tree dir (car elt)) | 1407 (if (dired-in-this-tree dir (car elt)) |
1406 (if (assoc dir (save-excursion | 1408 (with-current-buffer buf |
1407 (set-buffer buf) | 1409 (and (assoc dir dired-subdir-alist) |
1408 dired-subdir-alist)) | 1410 (or (null file) |
1409 (setq result (cons buf result)))) | 1411 (let ((wildcards |
1412 (file-name-nondirectory dired-directory))) | |
1413 (or (= 0 (length wildcards)) | |
1414 (string-match (dired-glob-regexp wildcards) | |
1415 file)))) | |
1416 (setq result (cons buf result))))) | |
1410 ;; else buffer is killed - clean up: | 1417 ;; else buffer is killed - clean up: |
1411 (setq dired-buffers (delq elt dired-buffers))) | 1418 (setq dired-buffers (delq elt dired-buffers))) |
1412 (setq alist (cdr alist))) | 1419 (setq alist (cdr alist))) |
1413 result)) | 1420 result)) |
1421 | |
1422 (defun dired-glob-regexp (pattern) | |
1423 "Convert glob-pattern PATTERN to a regular expression." | |
1424 (let ((matched-in-pattern 0) ;; How many chars of PATTERN we've handled. | |
1425 regexp) | |
1426 (while (string-match "[[?*]" pattern matched-in-pattern) | |
1427 (let ((op-end (match-end 0)) | |
1428 (next-op (aref pattern (match-beginning 0)))) | |
1429 (setq regexp (concat regexp | |
1430 (regexp-quote | |
1431 (substring pattern matched-in-pattern | |
1432 (match-beginning 0))))) | |
1433 (cond ((= next-op ??) | |
1434 (setq regexp (concat regexp ".")) | |
1435 (setq matched-in-pattern op-end)) | |
1436 ((= next-op ?\[) | |
1437 ;; Fails to handle ^ yet ???? | |
1438 (let* ((set-start (match-beginning 0)) | |
1439 (set-cont | |
1440 (if (= (aref pattern (1+ set-start)) ?^) | |
1441 (+ 3 set-start) | |
1442 (+ 2 set-start))) | |
1443 (set-end (string-match "]" pattern set-cont)) | |
1444 (set (substring pattern set-start (1+ set-end)))) | |
1445 (setq regexp (concat regexp set)) | |
1446 (setq matched-in-pattern (1+ set-end)))) | |
1447 ((= next-op ?*) | |
1448 (setq regexp (concat regexp ".*")) | |
1449 (setq matched-in-pattern op-end))))) | |
1450 (concat "\\`" | |
1451 regexp | |
1452 (regexp-quote | |
1453 (substring pattern matched-in-pattern)) | |
1454 "\\'"))) | |
1455 | |
1456 | |
1414 | 1457 |
1415 (defun dired-advertise () | 1458 (defun dired-advertise () |
1416 ;;"Advertise in variable `dired-buffers' that we dired `default-directory'." | 1459 ;;"Advertise in variable `dired-buffers' that we dired `default-directory'." |
1417 ;; With wildcards we actually advertise too much. | 1460 ;; With wildcards we actually advertise too much. |
1418 (let ((expanded-default (expand-file-name default-directory))) | 1461 (let ((expanded-default (expand-file-name default-directory))) |