Mercurial > hg > xemacs-beta
diff lisp/efs/dired-mob.el @ 98:0d2f883870bc r20-1b1
Import from CVS: tag r20-1b1
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:13:56 +0200 |
parents | 8fc7fe29b841 |
children | 7e54bd776075 9f59509498e1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/efs/dired-mob.el Mon Aug 13 09:13:56 2007 +0200 @@ -0,0 +1,122 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; File: dired-mob.el +;; RCS: +;; Dired Version: $Revision: 1.1 $ +;; Description: Commands for marking files from another buffer. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;; Requirements and provisions +(provide 'dired-mob) +(require 'dired) +(autoload 'compilation-buffer-p "compile") +(autoload 'compile-reinitialize-errors "compile") + +;; For the byte-compiler +(defvar compilation-error-list) + +;;; Utilities + +(defun dired-mark-these-files (file-list from) + ;; Mark the files in FILE-LIST. Relative filenames are taken to be + ;; in the current dired directory. + ;; FROM is a string (used for logging) describing where FILE-LIST + ;; came from. + ;; Logs files that were not found and displays a success or failure + ;; message. + (message "Marking files %s..." from) + (let ((total (length file-list)) + (cur-dir (dired-current-directory)) + file failures) + (while file-list + (setq file (expand-file-name (car file-list) cur-dir) + file-list (cdr file-list)) + ;;(message "Marking file `%s'" file) + (save-excursion + (if (dired-goto-file file) + (dired-mark 1) ; supplying a prefix keeps it from checking + ; for a subdir. + (setq failures (cons (dired-make-relative file) failures)) + (dired-log (buffer-name (current-buffer)) + "Cannot mark this file (not found): %s\n" file)))) + (dired-update-mode-line-modified t) + (if failures + (dired-log-summary + (buffer-name (current-buffer)) + (format "Failed to mark %d of %d files %s %s" + (length failures) total from failures) failures) + (message "Marked %d file%s %s." total (dired-plural-s total) from)))) + +;;; User commands + +(defun dired-mark-files-from-other-dired-buffer (buf) + "Mark files that are marked in the other Dired buffer. +I.e, mark those files in this Dired buffer that have the same +non-directory part as the marked files in the Dired buffer in the other +window." + (interactive (list (window-buffer (next-window)))) + (if (eq (get-buffer buf) (current-buffer)) + (error "Other dired buffer is the same")) + (or (stringp buf) (setq buf (buffer-name buf))) + (let ((other-files (save-excursion + (set-buffer buf) + (or (eq major-mode 'dired-mode) + (error "%s is not a dired buffer" buf)) + (dired-get-marked-files 'no-dir)))) + (dired-mark-these-files other-files (concat "from buffer " buf)))) + +(defun dired-mark-files-compilation-buffer (&optional buf) + "Mark the files mentioned in the `*compilation*' buffer. +With a prefix, you may specify the other buffer." + (interactive + (list + (let ((buff (let ((owin (selected-window)) + found) + (unwind-protect + (progn + (other-window 1) + (while (null (or found (eq (selected-window) owin))) + (if (compilation-buffer-p + (window-buffer (selected-window))) + (setq found (current-buffer))) + (other-window 1))) + (select-window owin)) + found))) + (if (or current-prefix-arg (null buff)) + (let ((minibuffer-history + (delq nil + (mapcar + (function + (lambda (b) + (and (compilation-buffer-p b) (buffer-name b)))) + (buffer-list))))) + (read-buffer "Use buffer: " + (or buff (car minibuffer-history)))) + buff)))) + (let ((dired-dir (directory-file-name default-directory)) + files) + (save-window-excursion + (set-buffer buf) + (compile-reinitialize-errors nil (point-max)) + (let ((alist compilation-error-list) + f d elt) + (while alist + (setq elt (car alist) + alist (cdr alist)) + (and (consp (setq elt (car (cdr elt)))) + (stringp (setq d (car elt))) + (stringp (setq f (cdr elt))) + (progn + (setq d (expand-file-name d)) + (dired-in-this-tree d dired-dir)) + (progn + (setq f (expand-file-name f d)) + (not (member f files))) + (setq files (cons f files)))))) + (dired-mark-these-files + files + (concat "From compilation buffer " + (if (stringp buf) buf (buffer-name buf)))))) + +;;; end of dired-mob.el