]> code.delx.au - gnu-emacs/blobdiff - lisp/dired-x.el
Merge from gnus--rel--5.10
[gnu-emacs] / lisp / dired-x.el
index 1c14101827a4f367bd5c40c260007a129d02b2ec..b06ca1b09080fe95407500e974dc8d0c9bfee856 100644 (file)
@@ -2,18 +2,19 @@
 
 ;; Author: Sebastian Kremer <sk@thp.uni-koeln.de>
 ;;     Lawrence R. Dodd <dodd@roebling.poly.edu>
-;; Maintainer: nobody (want to volunteer?)
+;; Maintainer: Romain Francoise <rfrancoise@gnu.org>
 ;; Version: 2.37+
 ;; Date: 1994/08/18 19:27:42
 ;; Keywords: dired extensions files
 
-;; Copyright (C) 1993, 1994, 1997, 2001, 2003, 2004 Free Software Foundation, Inc.
+;; Copyright (C) 1993, 1994, 1997, 2001, 2002, 2003, 2004,
+;;   2005, 2006, 2007 Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
 ;; GNU Emacs is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
 ;; any later version.
 
 ;; GNU Emacs is distributed in the hope that it will be useful,
 
 (require 'dired-aux)
 
+(defvar vm-folder-directory)
+(eval-when-compile (require 'man))
+
 ;;; User-defined variables.
 
 (defgroup dired-x nil
@@ -157,7 +161,7 @@ Read-only folders only work in VM 5, not in VM 4."
 (define-minor-mode dired-omit-mode
   "Toggle Dired-Omit mode.
 With numeric ARG, enable Dired-Omit mode if ARG is positive, disable
-otherwise. Enabling and disabling is buffer-local.
+otherwise.  Enabling and disabling is buffer-local.
 If enabled, \"uninteresting\" files are not listed.
 Uninteresting files are those whose filenames match regexp `dired-omit-files',
 plus those ending with extensions in `dired-omit-extensions'."
@@ -185,7 +189,7 @@ files and lock files."
 If nil, Dired finds the directory as a subdirectory in some other buffer
 if it is present as one.
 
-If there are several Dired buffers for a directory, the most recently
+If there are several dired buffers for a directory, the most recently
 used is chosen.
 
 Dired avoids switching to the current buffer, so that if you have
@@ -201,7 +205,7 @@ If nil, there is no maximum size."
   :group 'dired-x)
 
 (defcustom dired-enable-local-variables t
-  "*Control use of local-variables lists in dired.
+  "*Control use of local-variables lists in Dired.
 The value can be t, nil or something else.
 A value of t means local-variables lists are obeyed;
 nil means they are ignored; anything else means query.
@@ -211,7 +215,9 @@ a directory.  See also `dired-local-variables-file'."
   :type 'boolean
   :group 'dired-x)
 
-(defcustom dired-guess-shell-gnutar nil
+(defcustom dired-guess-shell-gnutar (when (or (eq system-type 'gnu)
+                                             (eq system-type 'gnu/linux))
+                                     "tar")
   "*If non-nil, name of GNU tar executable.
 \(E.g., \"tar\" or \"gtar\").  The `z' switch will be used with it for
 compressed or gzip'ed tar files.  If you don't have GNU tar, set this
@@ -232,7 +238,7 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used."
   :group 'dired-x)
 
 (defcustom dired-clean-up-buffers-too t
-  "*Non-nil means offer to kill buffers visiting files and dirs deleted in dired."
+  "*Non-nil means offer to kill buffers visiting files and dirs deleted in Dired."
   :type 'boolean
   :group 'dired-x)
 
@@ -245,7 +251,6 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used."
 (define-key dired-mode-map "*." 'dired-mark-extension)
 (define-key dired-mode-map "\M-!" 'dired-smart-shell-command)
 (define-key dired-mode-map "w" 'dired-copy-filename-as-kill)
-(define-key dired-mode-map "\M-g" 'dired-goto-file)
 (define-key dired-mode-map "\M-G" 'dired-goto-subdir)
 (define-key dired-mode-map "F" 'dired-do-find-marked-files)
 (define-key dired-mode-map "Y"  'dired-do-relsymlink)
@@ -258,6 +263,72 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used."
 (if dired-bind-info
     (define-key dired-mode-map "I" 'dired-info))
 
+;;; MENU BINDINGS
+
+(let ((menu-bar (lookup-key dired-mode-map [menu-bar])))
+  (let ((menu (lookup-key menu-bar [operate])))
+    (define-key-after
+      menu
+      [find-files]
+      '(menu-item
+        "Find files"
+        dired-do-find-marked-files
+        :help "Find current or marked files")
+      'delete)
+    (define-key-after
+      menu
+      [relsymlink]
+      '(menu-item
+        "Relative symlink to..."
+        dired-do-relsymlink
+        :visible (fboundp 'make-symbolic-link)
+        :help "Make relative symbolic links for current or marked files")
+      'symlink))
+  (let ((menu (lookup-key menu-bar [mark])))
+    (define-key-after
+      menu
+      [flag-extension]
+      '(menu-item
+        "Flag extension..."
+        dired-flag-extension
+        :help "Flag files with a certain extension for deletion")
+      'garbage-files)
+    (define-key-after
+      menu
+      [mark-extension]
+      '(menu-item
+        "Mark extension..."
+        dired-mark-extension
+        :help "Mark files with a certain extension")
+      'symlinks)
+    (define-key-after
+      menu
+      [mark-omitted]
+      '(menu-item
+        "Mark omitted"
+        dired-mark-omitted
+        :help "Mark files matching `dired-omit-files' and `dired-omit-extensions'")
+      'mark-extension))
+  (let ((menu (lookup-key menu-bar [regexp])))
+    (define-key-after
+      menu
+      [relsymlink-regexp]
+      '(menu-item
+        "Relative symlink..."
+        dired-do-relsymlink-regexp
+        :visible (fboundp 'make-symbolic-link)
+        :help "Make relative symbolic links for files matching regexp")
+      'symlink))
+  (let ((menu (lookup-key menu-bar [immediate])))
+    (define-key-after
+      menu
+      [omit-mode]
+      '(menu-item
+        "Omit mode" dired-omit-mode
+        :button (:toggle . dired-omit-mode)
+        :help "Enable or disable omitting \"uninteresting\" files")
+      'dashes)))
+
 ;;; GLOBAL BINDING.
 (if dired-bind-jump
     (progn
@@ -271,7 +342,7 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used."
 (add-hook 'dired-after-readin-hook 'dired-omit-expunge)
 
 (defun dired-extra-startup ()
-  "Automatically put on `dired-mode-hook' to get extra dired features:
+  "Automatically put on `dired-mode-hook' to get extra Dired features:
 \\<dired-mode-map>
   \\[dired-do-run-mail]\t-- run mail on folder (see `dired-bind-vm')
   \\[dired-info]\t-- run info on file
@@ -279,8 +350,8 @@ to nil: a pipe using `zcat' or `gunzip -c' will be used."
   \\[dired-do-find-marked-files]\t-- visit all marked files simultaneously
   \\[dired-omit-mode]\t-- toggle omitting of files
   \\[dired-mark-sexp]\t-- mark by Lisp expression
-  \\[dired-copy-filename-as-kill]\t-- copy the file or subdir names into the kill ring.
-  \t   You can feed it to other commands using \\[yank].
+  \\[dired-copy-filename-as-kill]\t-- copy the file or subdir names into the kill ring;
+  \t   you can feed it to other commands using \\[yank]
 
 For more features, see variables
 
@@ -357,7 +428,7 @@ Remove expanded subdir of deleted dir, if any."
 ;;; Mark files with some extension.
 (defun dired-mark-extension (extension &optional marker-char)
   "Mark all files with a certain EXTENSION for use in later commands.
-A `.' is not automatically prepended to the string entered."
+A `.' is *not* automatically prepended to the string entered."
   ;; EXTENSION may also be a list of extensions instead of a single one.
   ;; Optional MARKER-CHAR is marker to use.
   (interactive "sMarking extension: \nP")
@@ -434,7 +505,7 @@ See variables `dired-texinfo-unclean-extensions',
 (defun dired-jump (&optional other-window)
   "Jump to dired buffer corresponding to current buffer.
 If in a file, dired the current directory and move to file's line.
-If in dired already, pop up a level and goto old directory's line.
+If in Dired already, pop up a level and goto old directory's line.
 In case the proper dired file line cannot be found, refresh the dired
 buffer and try again."
   (interactive "P")
@@ -465,7 +536,7 @@ buffer and try again."
                    (dired-goto-file file))))))))
 
 (defun dired-jump-other-window ()
-  "Like \\[dired-jump] (dired-jump) but in other window."
+  "Like \\[dired-jump] (`dired-jump') but in other window."
   (interactive)
   (dired-jump t))
 \f
@@ -478,13 +549,13 @@ buffer and try again."
 ;; sk 28-Aug-1991 09:37
 (defvar dired-omit-localp 'no-dir
   "The LOCALP argument `dired-omit-expunge' passes to `dired-get-filename'.
-If it is 'no-dir, omitting is much faster, but you can only match
+If it is `no-dir', omitting is much faster, but you can only match
 against the non-directory part of the file name.  Set it to nil if you
 need to match the entire file name.")
 
 ;; \017=^O for Omit - other packages can chose other control characters.
 (defvar dired-omit-marker-char ?\017
-  "Temporary marker used by by dired-omit.
+  "Temporary marker used by dired-omit.
 Should never be used as marker by the user or other packages.")
 
 (defun dired-omit-startup ()
@@ -569,9 +640,9 @@ This functions works by temporarily binding `dired-marker-char' to
 REGEXP is matched against the entire file name.
 Does not re-mark files which already have a mark.
 With prefix argument, unflag all those files.
-Second optional argument LOCALP is as in `dired-get-filename'."
+Optional fourth argument LOCALP is as in `dired-get-filename'."
   (interactive "P")
-  (let ((dired-marker-char (if unflag-p ?\  dired-marker-char)))
+  (let ((dired-marker-char (if unflag-p ?\s dired-marker-char)))
     (dired-mark-if
      (and
       ;; not already marked
@@ -621,7 +692,7 @@ Second optional argument LOCALP is as in `dired-get-filename'."
 
 ;;; For browsing `ls -lR' listings in a dired-like fashion.
 
-(fset 'virtual-dired 'dired-virtual)
+(defalias 'virtual-dired 'dired-virtual)
 (defun dired-virtual (dirname &optional switches)
   "Put this buffer into Virtual Dired mode.
 
@@ -638,10 +709,10 @@ buffer.
 If you have save a Dired buffer in a file you can use \\[dired-virtual] to
 resume it in a later session.
 
-Type \\<dired-mode-map>\\[revert-buffer] in the
-Virtual Dired buffer and answer `y' to convert the virtual to a real
-dired buffer again.  You don't have to do this, though: you can relist
-single subdirs using \\[dired-do-redisplay]."
+Type \\<dired-mode-map>\\[revert-buffer] \
+in the Virtual Dired buffer and answer `y' to convert
+the virtual to a real dired buffer again.  You don't have to do this, though:
+you can relist single subdirs using \\[dired-do-redisplay]."
 
   ;; DIRNAME is the top level directory of the buffer.  It will become
   ;; its `default-directory'.  If nil, the old value of
@@ -675,7 +746,9 @@ single subdirs using \\[dired-do-redisplay]."
   ;; decent subdir headerline:
   (goto-char (point-min))
   (or (looking-at dired-subdir-regexp)
-      (dired-insert-headerline default-directory))
+      (insert "  " 
+             (directory-file-name (file-name-directory default-directory))
+             ":\n"))
   (dired-mode dirname (or switches dired-listing-switches))
   (setq mode-name "Virtual Dired"
         revert-buffer-function 'dired-virtual-revert)
@@ -721,21 +794,18 @@ nil."
     (revert-buffer)))
 
 ;; A zero-arg version of dired-virtual.
-;; You need my modified version of set-auto-mode for the
-;; `buffer-contents-mode-alist'.
-;; Or you use infer-mode.el and infer-mode-alist, same syntax.
 (defun dired-virtual-mode ()
-  "Put current buffer into virtual dired mode (see `dired-virtual').
-Useful on `buffer-contents-mode-alist' (which see) with the regexp
+  "Put current buffer into Virtual Dired mode (see `dired-virtual').
+Useful on `magic-mode-alist' with the regexp
 
-    \"^  \\(/[^ /]+\\)/?+:$\"
+  \"^  \\\\(/[^ /]+\\\\)+/?:$\"
 
-to put saved dired buffers automatically into virtual dired mode.
+to put saved dired buffers automatically into Virtual Dired mode.
 
-Also useful for `auto-mode-alist' (which see) like this:
+Also useful for `auto-mode-alist' like this:
 
-  \(setq auto-mode-alist (cons '(\"[^/]\\.dired\\'\" . dired-virtual-mode)
-                              auto-mode-alist)\)"
+  (add-to-list 'auto-mode-alist
+               '(\"[^/]\\\\.dired\\\\'\" . dired-virtual-mode))"
   (interactive)
   (dired-virtual (dired-virtual-guess-dir)))
 
@@ -768,7 +838,7 @@ Knows about the special cases in variable `default-directory-alist'."
       default-directory))
 
 (defun dired-smart-shell-command (cmd &optional insert)
-  "Like function `shell-command', but in the current Tree Dired directory."
+  "Like function `shell-command', but in the current Virtual Dired directory."
   (interactive (list (read-from-minibuffer "Shell command: "
                                           nil nil nil 'shell-command-history)
                     current-prefix-arg))
@@ -800,8 +870,9 @@ Knows about the special cases in variable `default-directory-alist'."
 (defvar dired-local-variables-file (convert-standard-filename ".dired")
   "Filename, as string, containing local dired buffer variables to be hacked.
 If this file found in current directory, then it will be inserted into dired
-buffer and `hack-local-variables' will be run.  See Emacs Info pages for more
-information on local variables.  See also `dired-enable-local-variables'.")
+buffer and `hack-local-variables' will be run.  See Info node
+`(emacs)File Variables' for more information on local variables.
+See also `dired-enable-local-variables'.")
 
 (defun dired-hack-local-variables ()
   "Evaluate local variables in `dired-local-variables-file' for dired buffer."
@@ -828,7 +899,7 @@ information on local variables.  See also `dired-enable-local-variables'.")
 
 (defun dired-omit-here-always ()
   "Create `dired-local-variables-file' for omitting and reverts directory.
-Sets dired-omit-file-p to t in a local variables file that is readable by
+Sets `dired-omit-mode' to t in a local variables file that is readable by
 dired."
   (interactive)
   (if (file-exists-p dired-local-variables-file)
@@ -884,119 +955,132 @@ dired."
 (defvar dired-guess-shell-alist-default
   (list
    (list "\\.tar$"
-         '(if dired-guess-shell-gnutar
-              (concat dired-guess-shell-gnutar " xvf")
-            "tar xvf")
-         ;; Extract files into a separate subdirectory
-         '(if dired-guess-shell-gnutar
-              (concat "mkdir " (file-name-sans-extension file)
-                      "; " dired-guess-shell-gnutar " -C "
-                      (file-name-sans-extension file) " -xvf")
-            (concat "mkdir " (file-name-sans-extension file)
-                    "; tar -C " (file-name-sans-extension file) " -xvf")))
+        '(if dired-guess-shell-gnutar
+             (concat dired-guess-shell-gnutar " xvf")
+           "tar xvf")
+        ;; Extract files into a separate subdirectory
+        '(if dired-guess-shell-gnutar
+             (concat "mkdir " (file-name-sans-extension file)
+                     "; " dired-guess-shell-gnutar " -C "
+                     (file-name-sans-extension file) " -xvf")
+           (concat "mkdir " (file-name-sans-extension file)
+                   "; tar -C " (file-name-sans-extension file) " -xvf"))
+        ;; List archive contents.
+        '(if dired-guess-shell-gnutar
+             (concat dired-guess-shell-gnutar " tvf")
+           "tar tvf"))
 
    ;; REGEXPS for compressed archives must come before the .Z rule to
    ;; be recognized:
    (list "\\.tar\\.Z$"
-         ;; Untar it.
-         '(if dired-guess-shell-gnutar
-              (concat dired-guess-shell-gnutar " zxvf")
-            (concat "zcat * | tar xvf -"))
-         ;; Optional conversion to gzip format.
-         '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
-                  " " dired-guess-shell-znew-switches))
+        ;; Untar it.
+        '(if dired-guess-shell-gnutar
+             (concat dired-guess-shell-gnutar " zxvf")
+           (concat "zcat * | tar xvf -"))
+        ;; Optional conversion to gzip format.
+        '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
+                 " " dired-guess-shell-znew-switches))
 
    ;; gzip'ed archives
    (list "\\.t\\(ar\\.\\)?gz$"
-         '(if dired-guess-shell-gnutar
-              (concat dired-guess-shell-gnutar " zxvf")
-            (concat "gunzip -qc * | tar xvf -"))
-         ;; Extract files into a separate subdirectory
-         '(if dired-guess-shell-gnutar
-              (concat "mkdir " (file-name-sans-extension file)
-                      "; " dired-guess-shell-gnutar " -C "
-                      (file-name-sans-extension file) " -zxvf")
-            (concat "mkdir " (file-name-sans-extension file)
-                    "; gunzip -qc * | tar -C "
-                    (file-name-sans-extension file) " -xvf -"))
-         ;; Optional decompression.
-         '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q" "")))
+        '(if dired-guess-shell-gnutar
+             (concat dired-guess-shell-gnutar " zxvf")
+           (concat "gunzip -qc * | tar xvf -"))
+        ;; Extract files into a separate subdirectory
+        '(if dired-guess-shell-gnutar
+             (concat "mkdir " (file-name-sans-extension file)
+                     "; " dired-guess-shell-gnutar " -C "
+                     (file-name-sans-extension file) " -zxvf")
+           (concat "mkdir " (file-name-sans-extension file)
+                   "; gunzip -qc * | tar -C "
+                   (file-name-sans-extension file) " -xvf -"))
+        ;; Optional decompression.
+        '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q" ""))
+        ;; List archive contents.
+        '(if dired-guess-shell-gnutar
+             (concat dired-guess-shell-gnutar " ztvf")
+           (concat "gunzip -qc * | tar tvf -")))
 
    ;; bzip2'ed archives
    (list "\\.t\\(ar\\.bz2\\|bz\\)$"
         "bunzip2 -c * | tar xvf -"
-         ;; Extract files into a separate subdirectory
-         '(concat "mkdir " (file-name-sans-extension file)
-                  "; bunzip2 -c * | tar -C "
-                  (file-name-sans-extension file) " -xvf -")
+        ;; Extract files into a separate subdirectory
+        '(concat "mkdir " (file-name-sans-extension file)
+                 "; bunzip2 -c * | tar -C "
+                 (file-name-sans-extension file) " -xvf -")
         ;; Optional decompression.
-         "bunzip2")
+        "bunzip2")
 
    '("\\.shar\\.Z$" "zcat * | unshar")
    '("\\.shar\\.g?z$" "gunzip -qc * | unshar")
 
    '("\\.e?ps$" "ghostview" "xloadimage" "lpr")
    (list "\\.e?ps\\.g?z$" "gunzip -qc * | ghostview -"
-         ;; Optional decompression.
-         '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q")))
+        ;; Optional decompression.
+        '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q")))
    (list "\\.e?ps\\.Z$" "zcat * | ghostview -"
-         ;; Optional conversion to gzip format.
-         '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
-                  " " dired-guess-shell-znew-switches))
+        ;; Optional conversion to gzip format.
+        '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
+                 " " dired-guess-shell-znew-switches))
 
    '("\\.patch$" "cat * | patch")
    (list "\\.patch\\.g?z$" "gunzip -qc * | patch"
-         ;; Optional decompression.
-         '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q")))
+        ;; Optional decompression.
+        '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q")))
    (list "\\.patch\\.Z$" "zcat * | patch"
-         ;; Optional conversion to gzip format.
-         '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
-                  " " dired-guess-shell-znew-switches))
+        ;; Optional conversion to gzip format.
+        '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
+                 " " dired-guess-shell-znew-switches))
 
    ;; The following four extensions are useful with dired-man ("N" key)
-   (list "\\.[0-9]$" '(progn (require 'man)
-                             (if (Man-support-local-filenames)
-                                 "man -l"
-                               "cat * | tbl | nroff -man -h")))
-   (list "\\.[0-9]\\.g?z$" '(progn (require 'man)
-                                   (if (Man-support-local-filenames)
-                                       "man -l"
-                                     "gunzip -qc * | tbl | nroff -man -h"))
-         ;; Optional decompression.
-         '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q")))
+   (list "\\.\\(?:[0-9]\\|man\\)$" '(progn (require 'man)
+                                          (if (Man-support-local-filenames)
+                                              "man -l"
+                                            "cat * | tbl | nroff -man -h")))
+   (list "\\.\\(?:[0-9]\\|man\\)\\.g?z$" '(progn (require 'man)
+                                                (if (Man-support-local-filenames)
+                                                    "man -l"
+                                                  "gunzip -qc * | tbl | nroff -man -h"))
+        ;; Optional decompression.
+        '(concat "gunzip" (if dired-guess-shell-gzip-quiet " -q")))
    (list "\\.[0-9]\\.Z$" '(progn (require 'man)
-                                 (if (Man-support-local-filenames)
-                                     "man -l"
-                                   "zcat * | tbl | nroff -man -h"))
-         ;; Optional conversion to gzip format.
-         '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
-                  " " dired-guess-shell-znew-switches))
+                                (if (Man-support-local-filenames)
+                                    "man -l"
+                                  "zcat * | tbl | nroff -man -h"))
+        ;; Optional conversion to gzip format.
+        '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
+                 " " dired-guess-shell-znew-switches))
    '("\\.pod$" "perldoc" "pod2man * | nroff -man")
 
-   '("\\.dvi$" "xdvi" "dvips")          ; preview and printing
-   '("\\.au$" "play")                   ; play Sun audiofiles
-   '("\\.mpg$" "mpeg_play")
-   '("\\.uu$" "uudecode")               ; for uudecoded files
+   '("\\.dvi$" "xdvi" "dvips")         ; preview and printing
+   '("\\.au$" "play")                  ; play Sun audiofiles
+   '("\\.mpe?g$\\|\\.avi$" "xine -p")
+   '("\\.wav$" "play")
+   '("\\.uu$" "uudecode")              ; for uudecoded files
    '("\\.hqx$" "mcvert")
-   '("\\.sh$" "sh")                     ; execute shell scripts
-   '("\\.xbm$" "bitmap")                ; view X11 bitmaps
+   '("\\.sh$" "sh")                    ; execute shell scripts
+   '("\\.xbm$" "bitmap")               ; view X11 bitmaps
    '("\\.gp$" "gnuplot")
    '("\\.p[bgpn]m$" "xloadimage")
-   '("\\.gif$" "xloadimage")                    ; view gif pictures
+   '("\\.gif$" "xloadimage")           ; view gif pictures
    '("\\.tif$" "xloadimage")
    '("\\.png$" "display")              ; xloadimage 4.1 doesn't grok PNG
    '("\\.jpe?g$" "xloadimage")
-   '("\\.fig$" "xfig")                  ; edit fig pictures
-   '("\\.out$" "xgraph")                ; for plotting purposes.
+   '("\\.fig$" "xfig")                 ; edit fig pictures
+   '("\\.out$" "xgraph")               ; for plotting purposes.
    '("\\.tex$" "latex" "tex")
    '("\\.texi\\(nfo\\)?$" "makeinfo" "texi2dvi")
-   '("\\.pdf$" "xpdf")              ; edit PDF files
+   '("\\.pdf$" "xpdf")
+   '("\\.doc$" "antiword" "strings")
+   '("\\.rpm$" "rpm -qilp" "rpm -ivh")
+   '("\\.dia$" "dia")
+   '("\\.mgp$" "mgp")
 
    ;; Some other popular archivers.
-   (list "\\.zip$" "unzip"
-         ;; Extract files into a separate subdirectory
-         '(concat "unzip" (if dired-guess-shell-gzip-quiet " -q")
-                  " -d " (file-name-sans-extension file)))
+   (list "\\.zip$" "unzip" "unzip -l"
+        ;; Extract files into a separate subdirectory
+        '(concat "unzip" (if dired-guess-shell-gzip-quiet " -q")
+                 " -d " (file-name-sans-extension file)))
    '("\\.zoo$" "zoo x//")
    '("\\.lzh$" "lharc x")
    '("\\.arc$" "arc x")
@@ -1007,10 +1091,11 @@ dired."
    (list "\\.dz$" "dictunzip")
    (list "\\.bz2$" "bunzip2")
    (list "\\.Z$" "uncompress"
-         ;; Optional conversion to gzip format.
-         '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
-                  " " dired-guess-shell-znew-switches))
-   )
+        ;; Optional conversion to gzip format.
+        '(concat "znew" (if dired-guess-shell-gzip-quiet " -q")
+                 " " dired-guess-shell-znew-switches))
+
+   '("\\.sign?$" "gpg --verify"))
 
   "Default alist used for shell command guessing.
 See `dired-guess-shell-alist-user'.")
@@ -1024,7 +1109,7 @@ Each element of this list looks like
 
     \(REGEXP COMMAND...\)
 
-where each COMMAND can either be a string or a lisp expression that evaluates
+where each COMMAND can either be a string or a Lisp expression that evaluates
 to a string.  If several COMMANDs are given, the first one will be the default
 and the rest will be added temporarily to the history and can be retrieved
 with \\[previous-history-element] (M-p) .
@@ -1209,6 +1294,7 @@ results in
                                         ; (trailing slash!)
      name2 ok-if-already-exists)))
 
+;;;###autoload
 (defun dired-do-relsymlink (&optional arg)
    "Relative symlink all marked (or next ARG) files into a directory.
 Otherwise make a relative symbolic link to the current file.
@@ -1218,7 +1304,9 @@ This creates relative symbolic links like
 
 not absolute ones like
 
-    foo -> /ugly/file/name/that/may/change/any/day/bar/foo"
+    foo -> /ugly/file/name/that/may/change/any/day/bar/foo
+
+For absolute symlinks, use \\[dired-do-symlink]."
   (interactive "P")
   (dired-do-create-files 'relsymlink (function dired-make-relative-symlink)
                            "RelSymLink" arg dired-keep-marker-relsymlink))
@@ -1321,7 +1409,7 @@ NOSELECT the files are merely found but not selected."
 
 (defun dired-man ()
   "Run man on this file.  Display old buffer if buffer name matches filename.
-Uses ../lisp/man.el of \\[manual-entry] fame."
+Uses `man.el' of \\[manual-entry] fame."
   (interactive)
   (require 'man)
   (let* ((file (dired-get-filename))
@@ -1339,9 +1427,11 @@ Uses ../lisp/man.el of \\[manual-entry] fame."
 
 ;;; Run mail on mail folders.
 
-;;; (and (not (fboundp 'vm-visit-folder))
-;;;      (defun vm-visit-folder (file &optional arg)
-;;;        nil))
+;; Avoid compiler warning.
+(eval-when-compile
+  (when (not (fboundp 'vm-visit-folder))
+    (defun vm-visit-folder (file &optional arg)
+      nil)))
 
 (defun dired-vm (&optional read-only)
   "Run VM on this file.
@@ -1441,7 +1531,7 @@ See also variable `dired-vm-read-only-folders'."
 (defun dired-initial-position (dirname)
   "Where point should go in a new listing of DIRNAME.
 Point assumed at beginning of new subdir line.
-You may redefine this function as you wish, e.g. like in dired-x.el."
+You may redefine this function as you wish, e.g. like in `dired-x.el'."
   (end-of-line)
   (if dired-find-subdir (dired-goto-subdir dirname)) ; new
   (if dired-trivial-filenames (dired-goto-next-nontrivial-file)))
@@ -1513,7 +1603,7 @@ to mark all zero length files."
               ;; Karsten Wenger <kw@cis.uni-muenchen.de> fixed uid.
               (setq uid (buffer-substring (+ (point) 1)
                                          (progn (forward-word 1) (point))))
-              (re-search-forward dired-move-to-filename-regexp)
+              (re-search-forward directory-listing-before-filename-regexp)
               (goto-char (match-beginning 1))
               (forward-char -1)
               (setq size (string-to-number (buffer-substring (save-excursion
@@ -1550,7 +1640,7 @@ to mark all zero length files."
 (defvar dired-x-hands-off-my-keys t
   "*Non-nil means don't bind `dired-x-find-file' over `find-file' on keyboard.
 Similarly for `dired-x-find-file-other-window' over `find-file-other-window'.
-If you change this variable after dired-x.el is loaded then do
+If you change this variable after `dired-x.el' is loaded then do
 \\[dired-x-bind-find-file].")
 
 ;;; Bind `dired-x-find-file{-other-window}' over wherever
@@ -1559,7 +1649,7 @@ If you change this variable after dired-x.el is loaded then do
   "Bind `dired-x-find-file' in place of `find-file' \(or reverse\).
 Similarly for `dired-x-find-file-other-window' and `find-file-other-window'.
 Binding direction based on `dired-x-hands-off-my-keys'.
-This function part of `after-init-hook'."
+This function is part of `after-init-hook'."
   (interactive)
   (if (interactive-p)
       (setq dired-x-hands-off-my-keys
@@ -1592,9 +1682,9 @@ May create a new window, or reuse an existing one.
 See the function `display-buffer'.
 
 Identical to `find-file' except when called interactively, with a prefix arg
-\(e.g., \\[universal-argument]\), in which case it guesses filename near
-point.  Useful for editing file mentioned in buffer you are viewing, or to
-test if that file exists.  Use minibuffer after snatching filename."
+\(e.g., \\[universal-argument]\), in which case it guesses filename near point.
+Useful for editing file mentioned in buffer you are viewing,
+or to test if that file exists.  Use minibuffer after snatching filename."
   (interactive (list (read-filename-at-point "Find file: ")))
   (find-file (expand-file-name filename)))
 
@@ -1604,9 +1694,9 @@ May create a new window, or reuse an existing one.
 See the function `display-buffer'.
 
 Identical to `find-file-other-window' except when called interactively, with a
-prefix arg \(e.g., \\[universal-argument]\), in which case it guesses filename
-near point.  Useful for editing file mentioned in buffer you are viewing, or
-to test if that file exists.  Use minibuffer after snatching filename."
+prefix arg \(e.g., \\[universal-argument]\), in which case it guesses filename near point.
+Useful for editing file mentioned in buffer you are viewing,
+or to test if that file exists.  Use minibuffer after snatching filename."
   (interactive (list (read-filename-at-point "Find file: ")))
   (find-file-other-window (expand-file-name filename)))
 
@@ -1695,7 +1785,7 @@ If `current-prefix-arg' is non-nil, uses name at point as guess."
   "List of variables to be appended to reports sent by `dired-x-submit-report'.")
 
 (defun dired-x-submit-report ()
-  "Submit via reporter.el a bug report on program.
+  "Submit via `reporter.el' a bug report on program.
 Send report on `dired-x-file' version `dired-x-version,' to
 `dired-x-maintainer' at address `dired-x-help-address' listing
 variables `dired-x-variable-list' in the message."
@@ -1712,5 +1802,5 @@ variables `dired-x-variable-list' in the message."
 ;; As Barry Warsaw would say: "This might be useful..."
 (provide 'dired-x)
 
-;;; arch-tag: 71a43ba2-7a00-4793-a028-0613dd7765ae
+;; arch-tag: 71a43ba2-7a00-4793-a028-0613dd7765ae
 ;;; dired-x.el ends here