diff lisp/efs/dired-help.el @ 22:8fc7fe29b841 r19-15b94

Import from CVS: tag r19-15b94
author cvs
date Mon, 13 Aug 2007 08:50:29 +0200
parents
children 7e54bd776075 9f59509498e1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/efs/dired-help.el	Mon Aug 13 08:50:29 2007 +0200
@@ -0,0 +1,398 @@
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;;
+;; File:          dired-help.el
+;; Dired Version: $Revision: 1.1 $
+;; RCS:
+;; Description:   Obtaining help for dired
+;; Modified:      Sun Nov 20 21:10:47 1994 by sandy on gandalf
+;;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;;; Requirements and provisions
+(provide 'dired-help)
+(require 'dired)
+(autoload 'reporter-submit-bug-report "reporter")
+(defvar reporter-version) ; For the byte-compiler.
+
+;;; Constants
+
+(defconst dired-bug-address "efs-bugs@cuckoo.hpl.hp.com")
+
+(defvar dired-documentation nil)
+
+;;; Functions
+
+(defun dired-documentation ()
+  (or dired-documentation
+      (let ((18-p (string-equal "18." (substring emacs-version 0 3)))
+	    (var-help-key (substitute-command-keys
+			   (if (featurep 'ehelp)
+			       "\\[electric-describe-variable]"
+			     "\\[describe-variable]")))
+	    (standard-output (get-buffer-create " dired-help-temp")))
+	(save-excursion
+	  (set-buffer standard-output)
+	  (unwind-protect
+	      (setq dired-documentation
+		    (substitute-command-keys
+		     (format "\\<dired-mode-map>The Directory Editor:
+
+For more detailed help, type \\[universal-argument] \\[dired-describe-mode] to start the info
+documentation browser.
+ 
+In dired, you can edit a list of the files in a directory \(and optionally
+its subdirectories in the `ls -lR' format\).
+
+Editing a directory means that you can visit, rename, copy, compress,
+load, byte-compile  files.  You can change files' attributes, run shell
+commands on files, or insert subdirectories into the edit buffer.  You can
+\"flag\" files for deletion or \"mark\" files for later commands, either one
+file at a time or by all files matching certain criteria \(e.g., files that
+match a certain regexp\).
+ 
+You move throughout the buffer using the usual cursor motion commands.
+Letters no longer insert themselves, but execute commands instead.  The
+digits (0-9) are prefix arguments.
+ 
+Most commands operate either on all marked files or on the current file if
+no files are marked.  Use a numeric prefix argument to operate on the next
+ARG files (or previous ARG if ARG < 0).  Use the prefix argument `1' to
+operate on the current file only.  Prefix arguments override marks. Commands
+which run a sub-process on a group of files will display a list of files
+for which the sub-process failed.  Typing \\[dired-why] will try to tell
+you what went wrong.
+ 
+When editing several directories in one buffer, each directory acts as a
+page, so \\[backward-page] and \\[forward-page] can be used to move between directories.
+
+Summary of commands:
+
+Motion Commands
+      move up to previous line                             \\[dired-next-line]
+      move down to next line                               \\[dired-previous-line]
+      move up to previous directory line                   \\[dired-prev-dirline]
+      move down to next directory line                     \\[dired-next-dirline]
+      move up to previous subdirectory                     \\[dired-advertised-prev-subdir]
+      move down to next subdirectory                       \\[dired-advertised-next-subdir]
+      move to parent directory                             \\[dired-up-directory]
+      move to first child subdirectory                     \\[dired-down-directory]
+
+Immediate Actions on Files
+      visit current file                                   \\[dired-advertised-find-file]
+      visit current file in other window                   \\[dired-find-file-other-window]
+      visit current file in other frame               %s
+      display current file                                 \\[universal-argument] \\[dired-find-file-other-window]
+      create a new subdirectory                            \\[dired-create-directory]      
+      recover file from auto-save                          \\[dired-recover-file]
+
+Marking & Unmarking Files
+      mark a file or subdirectory for later commands       \\[dired-mark]
+      unmark a file or all files of a subdirectory         \\[dired-unmark]
+      unmark all marked files in a buffer                  \\[dired-unmark-all-files]
+      count marks in buffer                                0 \\[dired-unmark-all-files]
+      mark all directories                                 \\[dired-mark-directories]
+      mark all executable files                            \\[dired-mark-executables]
+      mark file names matching a regular expression        \\[dired-mark-files-regexp]
+
+Commands on Files Marked or Specified by the Prefix
+      rename a file or move files to another directory     \\[dired-do-rename]
+      copy files                                           \\[dired-do-copy]
+      delete marked (as opposed to flagged) files          \\[dired-do-delete]
+      compress or uncompress files                         \\[dired-do-compress]
+      uuencode or uudecode files                           \\[dired-do-uucode]
+      grep files                                           \\[dired-do-grep]
+      search for regular expression                        \\[dired-do-tags-search]
+      query replace by regular expression                  \\[dired-do-tags-query-replace]
+      byte-compile files                                   \\[dired-do-byte-compile]
+      load files                                           \\[dired-do-load]
+      shell command on files                               \\[dired-do-shell-command]
+      operate shell command separately on each file        \\[universal-argument] \\[dired-do-shell-command]
+      do as above, but in each file's directory            \\[universal-argument] \\[universal-argument] \\[dired-do-shell-command]
+ 
+Flagging Files for Deletion (unmark commands remove delete flags)
+      flag file for deletion                               \\[dired-flag-file-deletion]
+      backup and remove deletion flag                      \\[dired-backup-unflag]
+      flag all backup files (file names ending in ~)       \\[dired-flag-backup-files]
+      flag all auto-save files                             \\[dired-flag-auto-save-files]
+      clean directory of numeric backups                   \\[dired-clean-directory]
+      execute the deletions requested (flagged files)      \\[dired-expunge-deletions]
+
+Modifying the Dired Buffer
+      insert a subdirectory in this buffer                 \\[dired-maybe-insert-subdir]
+      removing a subdir listing                            \\[dired-kill-subdir]
+      relist single file, marked files, or subdir          \\[dired-do-redisplay]
+      re-read all directories (retains all marks)          \\[revert-buffer]
+      toggle sorting of current subdir by name/date        \\[dired-sort-toggle-or-edit]
+      report on current ls switches                        0 \\[dired-sort-toggle-or-edit]
+      edit ls switches for current subdir                  1 \\[dired-sort-toggle-or-edit]
+      edit default ls switches for new subdirs             2 \\[dired-sort-toggle-or-edit]
+      sort all subdirs by name/date                        \\[universal-argument] \\[dired-sort-toggle-or-edit]
+      edit the ls switches for all subdirs                 \\[universal-argument] \\[universal-argument] \\[dired-sort-toggle-or-edit]
+
+Hiding File Lines
+      toggle file omission in current subdir               \\[dired-omit-toggle]
+      kill marked file lines                               \\[dired-do-kill-file-lines]
+
+Help on Dired
+      dired help (what you're reading)                     \\[dired-describe-mode]
+      dired summary (short help)                           \\[dired-summary]
+      dired info (full dired info manual)                  \\[universal-argument] \\[dired-describe-mode]
+      apropos for dired commands                           \\[dired-apropos]
+      apropos for dired variables                          \\[universal-argument] \\[dired-apropos]
+
+Regular Expression Commands
+      mark files with a regular expression                 \\[dired-mark-files-regexp]
+      copy marked files by regexp                          \\[dired-do-copy-regexp]
+      rename marked files by regexp                        \\[dired-do-rename-regexp]
+      omit files by regexp                                 \\[dired-omit-expunge]
+      downcase file names (rename to lowercase)            \\[dired-downcase]
+      upcase files names (rename to uppercase)             \\[dired-upcase]
+
+Comparing Files
+      diff file at point with file at mark                 \\[dired-diff]
+      diff file with its backup                            \\[dired-backup-diff]
+      merge file at point with file at mark                \\[dired-emerge]
+      same as above but use a common ancestor              \\[dired-emerge-with-ancestor]
+      ediff file at point with file at mark                \\[dired-ediff]
+      patch file at point                                  \\[dired-epatch]
+
+Mouse Commands
+%s
+
+Miscellaneous
+      quit dired                                           \\[dired-quit]
+      insert current directory in minibuffer               \\[dired-get-target-directory] 
+
+If the dired buffer gets confused, you can either type \\[revert-buffer] to read all
+directories again, type \\[dired-do-redisplay] to relist a single file, the marked
+files, or a subdirectory, or type \\[dired-build-subdir-alist] to parse 
+the directory tree in the buffer again.
+ 
+Customization Variables:
+Use %s to obtain more information.
+
+%s
+
+Hook Variables:
+Use %s to obtain more information.
+
+%s
+
+Keybindings:
+\\{dired-mode-map}"
+
+			     ;; arguments to format
+			     (if 18-p
+				 "Unavailable in Emacs 18"
+			       "     \\[dired-find-file-other-frame]")
+			     (if 18-p
+				 "      Unavailable in Emacs 18"
+			       "\
+      find file with mouse                                 \\[dired-mouse-find-file]
+      mark file at mouse                                   \\[dired-mouse-mark]
+      flag for deletion file at mouse                      \\[dired-mouse-flag]
+      menu of commands to visit a file                     \\[dired-visit-popup-menu]
+      menu of operations to do on a file                   \\[dired-do-popup-menu]
+      insert directory of mouse in minibuffer              \\[dired-mouse-get-target]
+")
+			     var-help-key
+			     (progn
+			       (erase-buffer)
+			       (dired-format-columns-of-files
+				(sort
+				 (all-completions
+				  "dired-" obarray
+				  (function
+				   (lambda (sym)
+				     (and (user-variable-p sym)
+					  (not (dired-hook-variable-p
+						sym))))))
+				 'string<) t)
+			       (buffer-string))
+			     var-help-key
+			     (progn
+			       (erase-buffer)
+			       (dired-format-columns-of-files
+				(sort
+				 (all-completions
+				  "dired-" obarray
+				  (function
+				   (lambda (sym)
+				     (dired-hook-variable-p sym))))
+				 'string<) t)
+			       (buffer-string)))))
+	    (kill-buffer " dired-help-temp"))))))
+
+;;; Commands
+
+(defun dired-describe-mode (&optional info)
+  "Detailed description of dired mode.
+With a prefix, runs the info documentation browser for dired."
+  (interactive "P")
+  ;; Getting dired documentation can be a bit slow.
+  (if info
+      (info "dired")
+    (message "Building dired help...")
+    (let* ((buff (get-buffer-create "*Help*"))
+	   (standard-output buff)
+	   (mess (dired-documentation)))
+      (message "Building dired help... done")
+      (if (featurep 'ehelp)
+	  (with-electric-help
+	   (function
+	    (lambda ()
+	      (princ mess)
+	      nil))) ; return nil so ehelp puts us at the top of the buffer.
+	(with-output-to-temp-buffer (buffer-name buff)
+	  (princ mess)
+	  (print-help-return-message))))))
+
+(defun dired-apropos (string &optional var-p)
+  "Does command apropos for dired commands.
+With prefix does apropos for dired variables."
+  (interactive
+   (list
+    (if current-prefix-arg
+	(read-string "Dired variable apropos (regexp): ")
+      (read-string "Dired command apropos (regexp): "))
+    current-prefix-arg))
+  (message "Doing dired %s apropos..." (if var-p "variable" "command"))
+  (if (featurep 'ehelp)
+      (with-electric-help
+       (function
+	(lambda ()
+	  (dired-apropos-internal string var-p)
+	  nil)))
+    (with-output-to-temp-buffer "*Help*"
+      (dired-apropos-internal string var-p)
+      (or (print-help-return-message)
+	  (message "Doing dired %s apropos...done"
+		   (if var-p "variable" "command"))))))
+
+(defun dired-apropos-internal (string &optional var-p)
+  (let ((case-fold-search t)
+	(names (sort (all-completions "dired-" obarray
+				      (if var-p
+					  'user-variable-p
+					'commandp))
+		     'string<))
+	doc)
+    (mapcar
+     (function
+      (lambda (x)
+	(and (if var-p (user-variable-p (intern x)) (commandp (intern x)))
+	     (progn
+	       (setq doc (if var-p
+			     (get (intern x) 'variable-documentation)
+			   (documentation (intern x))))
+	       (and doc (setq doc (substring doc 0 (string-match "\n" doc))))
+	       (or (string-match string x)
+		   (and doc (string-match string doc))))
+	     (progn
+	       (princ x)
+	       (if var-p (princ " <V>:")
+		 (princ " <F>:")
+		 (princ (make-string (max 2 (- 30 (length x))) ?\ ))
+		 (princ (dired-help-key-description (intern x))))
+	       (princ "\n ")
+	       (princ doc)
+	       (princ "\n")))))
+     names)))
+
+(defun dired-help-key-description (fun)
+  ;; Returns a help string of keys for fun.
+  (let ((res (mapconcat 'key-description
+			(where-is-internal fun dired-mode-map) ", ")))
+    (if (string-equal res "")
+	"\(not on any keys\)"
+      res)))
+
+(defun dired-summary ()
+  "Display summary of basic dired commands in the minibuffer."
+  (interactive)
+  (let ((del (where-is-internal 'dired-flag-file-deletion dired-mode-map))
+	(und (where-is-internal 'dired-unmark dired-mode-map))
+	(exp (where-is-internal 'dired-expunge-deletions dired-mode-map))
+	(fin (where-is-internal 'dired-advertised-find-file dired-mode-map))
+	(oth (where-is-internal 'dired-find-file-other-window dired-mode-map))
+	(ren (where-is-internal 'dired-do-rename dired-mode-map))
+	(cop (where-is-internal 'dired-do-copy dired-mode-map))
+	(hel (where-is-internal 'dired-describe-mode dired-mode-map)))
+    (if (member "d" del)
+	(setq del "d-elete")
+      (setq del (substitute-command-keys
+		 "\\<dired-mode-map>\\[dired-flag-file-deletion] delete")))
+    (if (member "u" und)
+	(setq und "u-ndelete")
+      (setq und (substitute-command-keys
+		 "\\<dired-mode-map>\\[dired-unmark] undelete")))
+    (if (member "x" exp)
+	(setq exp "x-punge")
+      (setq exp (substitute-command-keys
+		 "\\<dired-mode-map>\\[dired-expunge-deletions] expunge")))
+    (if (member "f" fin)
+	(setq fin "f-ind")
+      (setq fin (substitute-command-keys
+		 "\\<dired-mode-map>\\[dired-advertised-find-file] find")))
+    (if (member "o" oth)
+	(setq oth "o-ther window")
+      (setq oth
+	    (substitute-command-keys
+	     "\\<dired-mode-map>\\[dired-find-file-other-window] other window")
+	    ))
+    (if (member "R" ren)
+	(setq ren "R-ename")
+      (setq ren (substitute-command-keys
+		 "\\<dired-mode-map>\\[dired-do-rename] rename")))
+    (if (member "C" cop)
+	(setq cop "C-opy")
+      (setq cop (substitute-command-keys
+		 "\\<dired-mode-map>\\[dired-do-copy] copy")))
+    (if (member "h" hel)
+	(setq hel "h-elp")
+      (setq hel (substitute-command-keys
+		 "\\<dired-mode-map>\\[describe-mode] help")))
+    (message "%s, %s, %s, %s. %s, %s, %s, %s"
+	     del und exp fin oth ren cop hel)))
+
+(defun dired-hook-variable-p (sym)
+  ;; Returns t if SYM is a hook variable.  Just looks at its name.
+  (let ((name (symbol-name sym)))
+    (and (>= (length name) 6)
+	 (or (string-equal (substring name -5) "-hook")
+	     (string-equal (substring name -6) "-hooks")))))
+
+;;; Submitting bug reports.
+
+(defun dired-report-bug ()
+  "Submit a bug report for dired."
+  (interactive)
+  (let ((reporter-prompt-for-summary-p t))
+    (or (boundp 'reporter-version)
+	(setq reporter-version
+	      "Your version of reporter is obsolete.  Please upgrade."))
+    (reporter-submit-bug-report
+     dired-bug-address "Dired"
+     (cons
+      'dired-version
+      (nconc
+       (mapcar
+	'intern
+	(sort
+	 (let (completion-ignore-case)
+	   (all-completions "dired-" obarray 'user-variable-p))
+	 'string-lessp))
+       (list 'reporter-version)))
+     (function
+      (lambda ()
+	(save-excursion
+	  (mail-position-on-field "subject")
+	  (beginning-of-line)
+	  (skip-chars-forward "^:\n")
+	  (if (looking-at ": Dired;")
+	      (progn
+		(goto-char (match-end 0))
+		(delete-char -1)
+		(insert " " dired-version " bug:")))))))))
+
+;;; end of dired-help.el