/[emacs]/emacs/lisp/dired.el
ViewVC logotype

Diff of /emacs/lisp/dired.el

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.231 by rms, Wed Jun 26 08:18:33 2002 UTC revision 1.232 by rms, Wed Jun 26 08:40:22 2002 UTC
# Line 72  some of the `ls' switches are not suppor Line 72  some of the `ls' switches are not suppor
72        "/etc/chown"))        "/etc/chown"))
73    "Name of chown command (usually `chown' or `/etc/chown').")    "Name of chown command (usually `chown' or `/etc/chown').")
74    
 (defvar dired-use-ls-dired (not (not (string-match "gnu" system-configuration)))  
   "Non-nil means Dired should use `ls --dired'.")  
   
75  (defvar dired-chmod-program "chmod"  (defvar dired-chmod-program "chmod"
76    "Name of chmod command (usually `chmod').")    "Name of chmod command (usually `chmod').")
77    
# Line 220  This is what the `do' commands look for Line 217  This is what the `do' commands look for
217  (defvar dired-file-version-alist)  (defvar dired-file-version-alist)
218    
219  (defvar dired-directory nil  (defvar dired-directory nil
220    "The directory name or wildcard spec that this Dired directory lists.    "The directory name or shell wildcard that was used as argument to `ls'.
221  Local to each dired buffer.  May be a list, in which case the car is the  Local to each dired buffer.  May be a list, in which case the car is the
222  directory name and the cdr is the list of files to include.  directory name and the cdr is the actual files to list.")
 The directory name must be absolute, but need not be fully expanded.")  
223    
224  (defvar dired-actual-switches nil  (defvar dired-actual-switches nil
225    "The value of `dired-listing-switches' used to make this buffer's text.")    "The value of `dired-listing-switches' used to make this buffer's text.")
# Line 424  Optional third argument FILTER, if non-n Line 420  Optional third argument FILTER, if non-n
420              (push file result)))              (push file result)))
421        result)))        result)))
422    
423    ;; Function dired-ls is redefinable for VMS, ange-ftp, Prospero or
424    ;; other special applications.
425    
426  ;; The dired command  ;; The dired command
427    
428  (defun dired-read-dir-and-switches (str)  (defun dired-read-dir-and-switches (str)
# Line 512  If DIRNAME is already in a dired buffer, Line 511  If DIRNAME is already in a dired buffer,
511    ;; like find-file does.    ;; like find-file does.
512    ;; Optional argument MODE is passed to dired-find-buffer-nocreate,    ;; Optional argument MODE is passed to dired-find-buffer-nocreate,
513    ;; see there.    ;; see there.
514    (let* (dirname    (let* ((dirname (if (consp dir-or-list) (car dir-or-list) dir-or-list))
515           buffer           ;; The following line used to use dir-or-list.
516             ;; That never found an existing buffer, in the case
517             ;; where it is a list.
518             (buffer (dired-find-buffer-nocreate dirname mode))
519           ;; note that buffer already is in dired-mode, if found           ;; note that buffer already is in dired-mode, if found
520           new-buffer-p           (new-buffer-p (not buffer))
521           (old-buf (current-buffer)))           (old-buf (current-buffer)))
     (if (consp dir-or-list)  
         (setq dirname (car dir-or-list))  
       (setq dirname dir-or-list))  
     ;; Look for an existing buffer.  
     (setq buffer (dired-find-buffer-nocreate dirname mode)  
           new-buffer-p (null buffer))  
522      (or buffer      (or buffer
523          (let ((default-major-mode 'fundamental-mode))          (let ((default-major-mode 'fundamental-mode))
524            ;; We don't want default-major-mode to run hooks and set auto-fill            ;; We don't want default-major-mode to run hooks and set auto-fill
# Line 533  If DIRNAME is already in a dired buffer, Line 529  If DIRNAME is already in a dired buffer,
529      (if (not new-buffer-p)     ; existing buffer ...      (if (not new-buffer-p)     ; existing buffer ...
530          (cond (switches        ; ... but new switches              (cond (switches        ; ... but new switches    
531                 ;; file list may have changed                 ;; file list may have changed
532                 (setq dired-directory dir-or-list)                 (if (consp dir-or-list)
533                       (setq dired-directory dir-or-list))
534                 ;; this calls dired-revert                 ;; this calls dired-revert
535                 (dired-sort-other switches))                   (dired-sort-other switches))  
536                ;; If directory has changed on disk, offer to revert.                ;; If directory has changed on disk, offer to revert.
# Line 556  If DIRNAME is already in a dired buffer, Line 553  If DIRNAME is already in a dired buffer,
553              (file-name-directory dirname))              (file-name-directory dirname))
554        (or switches (setq switches dired-listing-switches))        (or switches (setq switches dired-listing-switches))
555        (if mode (funcall mode)        (if mode (funcall mode)
556          (dired-mode dir-or-list switches))          (dired-mode dirname switches))
557        ;; default-directory and dired-actual-switches are set now        ;; default-directory and dired-actual-switches are set now
558        ;; (buffer-local), so we can call dired-readin:        ;; (buffer-local), so we can call dired-readin:
559        (let ((failed t))        (let ((failed t))
560          (unwind-protect          (unwind-protect
561              (progn (dired-readin)              (progn (dired-readin dir-or-list buffer)
562                     (setq failed nil))                     (setq failed nil))
563            ;; dired-readin can fail if parent directories are inaccessible.            ;; dired-readin can fail if parent directories are inaccessible.
564            ;; Don't leave an empty buffer around in that case.            ;; Don't leave an empty buffer around in that case.
565            (if failed (kill-buffer buffer))))            (if failed (kill-buffer buffer))))
566          ;; No need to narrow since the whole buffer contains just
567          ;; dired-readin's output, nothing else.  The hook can
568          ;; successfully use dired functions (e.g. dired-get-filename)
569          ;; as the subdir-alist has been built in dired-readin.
570          (run-hooks 'dired-after-readin-hook)
571        (goto-char (point-min))        (goto-char (point-min))
572        (dired-initial-position dirname))        (dired-initial-position dirname))
573      (set-buffer old-buf)      (set-buffer old-buf)
# Line 581  If DIRNAME is already in a dired buffer, Line 583  If DIRNAME is already in a dired buffer,
583    ;; This differs from dired-buffers-for-dir in that it does not consider    ;; This differs from dired-buffers-for-dir in that it does not consider
584    ;; subdirs of default-directory and searches for the first match only.    ;; subdirs of default-directory and searches for the first match only.
585    ;; Also, the major mode must be MODE.    ;; Also, the major mode must be MODE.
   (setq dirname (expand-file-name dirname))  
586    (let (found (blist dired-buffers))    ; was (buffer-list)    (let (found (blist dired-buffers))    ; was (buffer-list)
587      (or mode (setq mode 'dired-mode))      (or mode (setq mode 'dired-mode))
588      (while blist      (while blist
# Line 590  If DIRNAME is already in a dired buffer, Line 591  If DIRNAME is already in a dired buffer,
591          (save-excursion          (save-excursion
592            (set-buffer (cdr (car blist)))            (set-buffer (cdr (car blist)))
593            (if (and (eq major-mode mode)            (if (and (eq major-mode mode)
594                     (equal dirname                     (if (consp dired-directory)
595                            (expand-file-name                         (equal (car dired-directory) dirname)
596                             (if (consp dired-directory)                       (equal dired-directory dirname)))
                                (car dired-directory)  
                              dired-directory))))  
597                (setq found (cdr (car blist))                (setq found (cdr (car blist))
598                      blist nil)                      blist nil)
599              (setq blist (cdr blist))))))              (setq blist (cdr blist))))))
# Line 606  If DIRNAME is already in a dired buffer, Line 605  If DIRNAME is already in a dired buffer,
605  ;; dired-readin differs from dired-insert-subdir in that it accepts  ;; dired-readin differs from dired-insert-subdir in that it accepts
606  ;; wildcards, erases the buffer, and builds the subdir-alist anew  ;; wildcards, erases the buffer, and builds the subdir-alist anew
607  ;; (including making it buffer-local and clearing it first).  ;; (including making it buffer-local and clearing it first).
608  (defun dired-readin ()  (defun dired-readin (dir-or-list buffer)
609    ;; default-directory and dired-actual-switches must be buffer-local    ;; default-directory and dired-actual-switches must be buffer-local
610    ;; and initialized by now.    ;; and initialized by now.
611    (let (dirname)    ;; Thus we can test (equal default-directory dirname) instead of
612      (if (consp dired-directory)    ;; (file-directory-p dirname) and save a filesystem transaction.
613          (setq dirname (car dired-directory))    ;; Also, we can run this hook which may want to modify the switches
614        (setq dirname dired-directory))    ;; based on default-directory, e.g. with ange-ftp to a SysV host
615      ;; where ls won't understand -Al switches.
616      (let (dirname
617            (indent-tabs-mode nil))
618        (if (consp dir-or-list)
619            (setq dirname (car dir-or-list))
620          (setq dirname dir-or-list))
621      (setq dirname (expand-file-name dirname))      (setq dirname (expand-file-name dirname))
622        (if (consp dir-or-list)
623            (setq dir-or-list (cons dirname (cdr dir-or-list))))
624        (run-hooks 'dired-before-readin-hook)
625      (save-excursion      (save-excursion
       ;; This hook which may want to modify dired-actual-switches  
       ;; based on dired-directory, e.g. with ange-ftp to a SysV host  
       ;; where ls won't understand -Al switches.  
       (run-hooks 'dired-before-readin-hook)  
626        (message "Reading directory %s..." dirname)        (message "Reading directory %s..." dirname)
627        (if (consp buffer-undo-list)        (set-buffer buffer)
628            (setq buffer-undo-list nil))        (let (buffer-read-only (failed t))
       (let (buffer-read-only  
             ;; Don't make undo entries for readin.  
             (buffer-undo-list t))  
629          (widen)          (widen)
630          (erase-buffer)          (erase-buffer)
631          (dired-readin-insert))          (dired-readin-insert dir-or-list)
632            (indent-rigidly (point-min) (point-max) 2)
633            ;; We need this to make the root dir have a header line as all
634            ;; other subdirs have:
635            (goto-char (point-min))
636            (if (not (looking-at "^  /.*:$"))
637                (dired-insert-headerline default-directory))
638            ;; can't run dired-after-readin-hook here, it may depend on the subdir
639            ;; alist to be OK.
640            )
641        (message "Reading directory %s...done" dirname)        (message "Reading directory %s...done" dirname)
       (goto-char (point-min))  
642        ;; Must first make alist buffer local and set it to nil because        ;; Must first make alist buffer local and set it to nil because
643        ;; dired-build-subdir-alist will call dired-clear-alist first        ;; dired-build-subdir-alist will call dired-clear-alist first
644        (set (make-local-variable 'dired-subdir-alist) nil)        (set (make-local-variable 'dired-subdir-alist) nil)
# Line 637  If DIRNAME is already in a dired buffer, Line 646  If DIRNAME is already in a dired buffer,
646        (let ((attributes (file-attributes dirname)))        (let ((attributes (file-attributes dirname)))
647          (if (eq (car attributes) t)          (if (eq (car attributes) t)
648              (set-visited-file-modtime (nth 5 attributes))))              (set-visited-file-modtime (nth 5 attributes))))
649        (set-buffer-modified-p nil)        (if (consp buffer-undo-list)
650        ;; No need to narrow since the whole buffer contains just            (setq buffer-undo-list nil))
651        ;; dired-readin's output, nothing else.  The hook can        (set-buffer-modified-p nil))))
       ;; successfully use dired functions (e.g. dired-get-filename)  
       ;; as the subdir-alist has been built in dired-readin.  
       (run-hooks 'dired-after-readin-hook))))  
652    
653  ;; Subroutines of dired-readin  ;; Subroutines of dired-readin
654    
655  (defun dired-readin-insert ()  (defun dired-readin-insert (dir-or-list)
656    ;; Insert listing for the specified dir (and maybe file list)    ;; Just insert listing for the passed-in directory or
657    ;; already in dired-directory, assuming a clean buffer.    ;; directory-and-file list, assuming a clean buffer.
658    (let (dir file-list)    (let (dirname)
659      (if (consp dired-directory)      (if (consp dir-or-list)
660          (setq dir (car dired-directory)          (setq dirname (car dir-or-list))
661                file-list (cdr dired-directory))        (setq dirname dir-or-list))
662        (setq dir dired-directory      ;; Expand before comparing in case one or both have been abbreviated.
663              file-list nil))      (if (and (equal (expand-file-name default-directory)
664      (if (and (equal "" (file-name-nondirectory dir))                      (expand-file-name dirname))
665               (not file-list))               (not (consp dir-or-list)))
666          ;; If we are reading a whole single directory...          ;; If we are reading a whole single directory...
667          (dired-insert-directory dir dired-actual-switches nil nil t)          (dired-insert-directory dir-or-list dired-actual-switches nil t)
668        (if (not (file-readable-p        (if (not (file-readable-p
669                  (directory-file-name (file-name-directory dir))))                  (directory-file-name (file-name-directory dirname))))
670            (error "Directory %s inaccessible or nonexistent" dir)            (error "Directory %s inaccessible or nonexistent" dirname)
671          ;; Else treat it as a wildcard spec          ;; Else assume it contains wildcards,
672          ;; unless we have an explicit list of files.          ;; unless it is an explicit list of files.
673          (dired-insert-directory dir dired-actual-switches          (dired-insert-directory dir-or-list dired-actual-switches
674                                  file-list (not file-list) t)))))                                  (not (listp dir-or-list)))
675            (or (consp dir-or-list)
676  (defun dired-insert-directory (dir switches &optional file-list wildcard hdr)              (save-excursion     ;; insert wildcard instead of total line:
677    "Insert a directory listing of DIR, Dired style.                (goto-char (point-min))
678  Use SWITCHES to make the listings.                (insert "wildcard " (file-name-nondirectory dirname) "\n")))))))
679  If FILE-LIST is non-nil, list only those files.  
680  Otherwise, if WILDCARD is non-nil, expand wildcards;  (defun dired-insert-directory (dir-or-list switches &optional wildcard full-p)
681   in that case, DIR should be a file name that uses wildcards.    ;; Do the right thing whether dir-or-list is atomic or not.  If it is,
682  In other cases, DIR should be a directory name or a directory filename.    ;; inset all files listed in the cdr (the car is the passed-in directory
683  If HDR is non-nil, insert a header line with the directory name."    ;; list).
684    (let ((opoint (point))    (let ((opoint (point))
685          (process-environment (copy-sequence process-environment))          (process-environment (copy-sequence process-environment))
686          end)          end)
     (if dired-use-ls-dired  
         (setq switches (concat "--dired " switches)))  
687      ;; We used to specify the C locale here, to force English month names;      ;; We used to specify the C locale here, to force English month names;
688      ;; but this should not be necessary any more,      ;; but this should not be necessary any more,
689      ;; with the new value of dired-move-to-filename-regexp.      ;; with the new value of dired-move-to-filename-regexp.
690      (if file-list      (if (consp dir-or-list)
691          (dolist (f file-list)          ;; In this case, use the file names in the cdr
692            (insert-directory f switches nil nil))          ;; exactly as originally given to dired-noselect.
693        (insert-directory dir switches wildcard (not wildcard)))          (mapcar
694             (function (lambda (x) (insert-directory x switches wildcard full-p)))
695             (cdr dir-or-list))
696          ;; Expand the file name here because it may have been abbreviated
697          ;; in dired-noselect.
698          (insert-directory (expand-file-name dir-or-list) switches wildcard full-p))
699      ;; Quote certain characters, unless ls quoted them for us.      ;; Quote certain characters, unless ls quoted them for us.
700      (if (not (string-match "b" dired-actual-switches))      (if (not (string-match "b" dired-actual-switches))
701          (save-excursion          (save-excursion
# Line 698  If HDR is non-nil, insert a header line Line 707  If HDR is non-nil, insert a header line
707            (while (search-forward "\^m" end t)            (while (search-forward "\^m" end t)
708              (replace-match "\\015" nil t))              (replace-match "\\015" nil t))
709            (set-marker end nil)))            (set-marker end nil)))
710      (dired-insert-set-properties opoint (point))      (dired-insert-set-properties opoint (point)))
711      ;; If we used --dired and it worked, the lines are already indented.    (setq dired-directory dir-or-list))
     ;; Otherwise, indent them.  
     (unless (save-excursion  
               (forward-line -1)  
               (looking-at "  "))  
       (let ((indent-tabs-mode nil))  
         (indent-rigidly opoint (point) 2)))  
     ;; Insert text at the beginning to standardize things.  
     (save-excursion  
       (goto-char opoint)  
       (if (and (or hdr wildcard) (not (looking-at "^  /.*:$")))  
           ;; Note that dired-build-subdir-alist will replace the name  
           ;; by its expansion, so it does not matter whether what we insert  
           ;; here is fully expanded, but it should be absolute.  
           (insert "  " (directory-file-name (file-name-directory dir)) ":\n"))  
       (when wildcard  
         ;; Insert "wildcard" line where "total" line would be for a full dir.  
         (insert "  wildcard " (file-name-nondirectory dir) "\n")))))  
712    
713  ;; Make the file names highlight when the mouse is on them.  ;; Make the file names highlight when the mouse is on them.
714  (defun dired-insert-set-properties (beg end)  (defun dired-insert-set-properties (beg end)
# Line 734  If HDR is non-nil, insert a header line Line 726  If HDR is non-nil, insert a header line
726                   help-echo "mouse-2: visit this file in other window")))                   help-echo "mouse-2: visit this file in other window")))
727          (error nil))          (error nil))
728        (forward-line 1))))        (forward-line 1))))
729    
730    (defun dired-insert-headerline (dir);; also used by dired-insert-subdir
731      ;; Insert DIR's headerline with no trailing slash, exactly like ls
732      ;; would, and put cursor where dired-build-subdir-alist puts subdir
733      ;; boundaries.
734      (save-excursion (insert "  " (directory-file-name dir) ":\n")))
735    
736    
737  ;; Reverting a dired buffer  ;; Reverting a dired buffer
738    
# Line 756  If HDR is non-nil, insert a header line Line 755  If HDR is non-nil, insert a header line
755      ;; treat top level dir extra (it may contain wildcards)      ;; treat top level dir extra (it may contain wildcards)
756      (dired-uncache      (dired-uncache
757       (if (consp dired-directory) (car dired-directory) dired-directory))       (if (consp dired-directory) (car dired-directory) dired-directory))
758      (dired-readin)      (dired-readin dired-directory (current-buffer))
759      (let ((dired-after-readin-hook nil))      (let ((dired-after-readin-hook nil))
760        ;; don't run that hook for each subdir...        ;; don't run that hook for each subdir...
761        (dired-insert-old-subdirs old-subdir-alist))        (dired-insert-old-subdirs old-subdir-alist))
# Line 1576  regardless of the language.") Line 1575  regardless of the language.")
1575    ;; This is the UNIX version.    ;; This is the UNIX version.
1576    (or eol (setq eol (progn (end-of-line) (point))))    (or eol (setq eol (progn (end-of-line) (point))))
1577    (beginning-of-line)    (beginning-of-line)
1578    ;; First try assuming `ls --dired' was used.    (if (re-search-forward dired-move-to-filename-regexp eol t)
1579    (let ((change (next-single-property-change (point) 'dired-filename        (goto-char (match-end 0))
1580                                               nil eol)))      (if raise-error
1581      (if change (goto-char change)          (error "No file on this line"))))
       (if (re-search-forward dired-move-to-filename-regexp eol t)  
           (goto-char (match-end 0))  
         (if raise-error  
             (error "No file on this line"))))))  
1582    
1583  (defun dired-move-to-end-of-filename (&optional no-error)  (defun dired-move-to-end-of-filename (&optional no-error)
1584    ;; Assumes point is at beginning of filename,    ;; Assumes point is at beginning of filename,
# Line 1592  regardless of the language.") Line 1587  regardless of the language.")
1587    ;; (dired-move-to-filename t).    ;; (dired-move-to-filename t).
1588    ;; On failure, signals an error (with non-nil NO-ERROR just returns nil).    ;; On failure, signals an error (with non-nil NO-ERROR just returns nil).
1589    ;; This is the UNIX version.    ;; This is the UNIX version.
1590    (if (get-text-property (point) 'dired-filename)    (let (opoint file-type executable symlink hidden case-fold-search used-F eol)
1591        (goto-char (next-single-property-change (point) 'dired-filename))      ;; case-fold-search is nil now, so we can test for capital F:
1592      (let (opoint file-type executable symlink hidden case-fold-search used-F eol)      (setq used-F (string-match "F" dired-actual-switches)
1593        ;; case-fold-search is nil now, so we can test for capital F:            opoint (point)
1594        (setq used-F (string-match "F" dired-actual-switches)            eol (save-excursion (end-of-line) (point))
1595              opoint (point)            hidden (and selective-display
1596              eol (save-excursion (end-of-line) (point))                        (save-excursion (search-forward "\r" eol t))))
1597              hidden (and selective-display      (if hidden
1598                          (save-excursion (search-forward "\r" eol t))))          nil
1599        (if hidden        (save-excursion;; Find out what kind of file this is:
1600            nil          ;; Restrict perm bits to be non-blank,
1601          (save-excursion ;; Find out what kind of file this is:          ;; otherwise this matches one char to early (looking backward):
1602            ;; Restrict perm bits to be non-blank,          ;; "l---------" (some systems make symlinks that way)
1603            ;; otherwise this matches one char to early (looking backward):          ;; "----------" (plain file with zero perms)
1604            ;; "l---------" (some systems make symlinks that way)          (if (re-search-backward
1605            ;; "----------" (plain file with zero perms)               dired-permission-flags-regexp nil t)
1606            (if (re-search-backward              (setq file-type (char-after (match-beginning 1))
1607                 dired-permission-flags-regexp nil t)                    symlink (eq file-type ?l)
1608                (setq file-type (char-after (match-beginning 1))                    ;; Only with -F we need to know whether it's an executable
1609                      symlink (eq file-type ?l)                    executable (and
1610                      ;; Only with -F we need to know whether it's an executable                                used-F
1611                      executable (and                                (string-match
1612                                  used-F                                 "[xst]";; execute bit set anywhere?
1613                                  (string-match                                 (concat
1614                                   "[xst]" ;; execute bit set anywhere?                                  (buffer-substring (match-beginning 2)
1615                                   (concat                                                    (match-end 2))
1616                                    (buffer-substring (match-beginning 2)                                  (buffer-substring (match-beginning 3)
1617                                                      (match-end 2))                                                    (match-end 3))
1618                                    (buffer-substring (match-beginning 3)                                  (buffer-substring (match-beginning 4)
1619                                                      (match-end 3))                                                    (match-end 4))))))
1620                                    (buffer-substring (match-beginning 4)            (or no-error (error "No file on this line"))))
1621                                                      (match-end 4))))))        ;; Move point to end of name:
1622              (or no-error (error "No file on this line"))))        (if symlink
1623          ;; Move point to end of name:            (if (search-forward " ->" eol t)
1624          (if symlink                (progn
1625              (if (search-forward " ->" eol t)                  (forward-char -3)
1626                  (progn                  (and used-F
1627                    (forward-char -3)                       dired-ls-F-marks-symlinks
1628                    (and used-F                       (eq (preceding-char) ?@);; did ls really mark the link?
1629                         dired-ls-F-marks-symlinks                       (forward-char -1))))
1630                         (eq (preceding-char) ?@) ;; did ls really mark the link?          (goto-char eol);; else not a symbolic link
1631                         (forward-char -1))))          ;; ls -lF marks dirs, sockets and executables with exactly one
1632            (goto-char eol) ;; else not a symbolic link          ;; trailing character. (Executable bits on symlinks ain't mean
1633            ;; ls -lF marks dirs, sockets and executables with exactly one          ;; a thing, even to ls, but we know it's not a symlink.)
1634            ;; trailing character. (Executable bits on symlinks ain't mean          (and used-F
1635            ;; a thing, even to ls, but we know it's not a symlink.)               (or (memq file-type '(?d ?s))
1636            (and used-F                   executable)
1637                 (or (memq file-type '(?d ?s))               (forward-char -1))))
1638                     executable)      (or no-error
1639                 (forward-char -1))))          (not (eq opoint (point)))
1640        (or no-error          (error (if hidden
1641            (not (eq opoint (point)))                     (substitute-command-keys
1642            (error (if hidden                      "File line is hidden, type \\[dired-hide-subdir] to unhide")
1643                       (substitute-command-keys                   "No file on this line")))
1644                        "File line is hidden, type \\[dired-hide-subdir] to unhide")      (if (eq opoint (point))
1645                     "No file on this line")))          nil
1646        (if (eq opoint (point))        (point))))
           nil  
         (point)))))  
1647    
1648    
1649  ;;; COPY NAMES OF MARKED FILES INTO KILL-RING.  ;;; COPY NAMES OF MARKED FILES INTO KILL-RING.

Legend:
Removed from v.1.231  
changed lines
  Added in v.1.232

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26