;ELC   
;;; Compiled by buildd@akateko.buildd on Fri Oct 25 13:50:12 2013
;;; from file /build/buildd/emacs23-23.4+1/debian/build-x/lisp/eshell/em-dirs.el
;;; in Emacs version 23.4.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.

;;; This file does not contain utf-8 non-ASCII characters,
;;; and so can be loaded in Emacs versions earlier than 23.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(byte-code "\300\301!\210\300\302!\210\300\303!\210\304\305\306\307\310\311\312\313&\207" [require eshell ring esh-opt custom-declare-group eshell-dirs nil "Directory navigation involves changing directories, examining the\ncurrent directory, maintaining a directory stack, and also keeping\ntrack of a history of the last directory locations the user was in.\nEmacs does provide standard Lisp definitions of `pwd' and `cd', but\nthey lack somewhat in feel from the typical shell equivalents." :tag "Directory navigation" :group eshell-module] 8)
#@53 *A hook that gets run when `eshell-dirs' is loaded.
(custom-declare-variable 'eshell-dirs-load-hook ''(eshell-dirs-initialize) '(#$ . -1092) :type 'hook :group 'eshell-dirs)
#@222 *The function used to normalize the value of Eshell's `pwd'.
The value returned by `pwd' is also used when recording the
last-visited directory in the last-dir-ring, so it will affect the
form of the list used by 'cd ='.
(custom-declare-variable 'eshell-pwd-convert-function '(if (eshell-under-windows-p) 'expand-file-name 'identity) '(#$ . -1273) :type '(radio (function-item file-truename) (function-item expand-file-name) (function-item identity) (function :tag "Other")) :group 'eshell-dirs)
#@457 *Determine if the last-dir-ring should be automatically saved.
The last-dir-ring is always preserved when exiting an Eshell buffer.
However, when Emacs is being shut down, this variable determines
whether to prompt the user, or just save the ring.
If set to nil, it means never ask whether to save the last-dir-ring.
If set to t, always ask if any Eshell buffers are open at exit time.
If set to `always', the list-dir-ring will always be saved, silently.
(custom-declare-variable 'eshell-ask-to-save-last-dir ''always '(#$ . -1776) :type '(choice (const :tag "Never" nil) (const :tag "Ask" t) (const :tag "Always save" always)) :group 'eshell-dirs)
#@66 *If non-nil, using `cd' will report the directory it changes to.
(custom-declare-variable 'eshell-cd-shows-directory 'nil '(#$ . -2432) :type 'boolean :group 'eshell-dirs)
#@61 *If non-nil, do a cd if a directory is in command position.
(custom-declare-variable 'eshell-cd-on-directory 't '(#$ . -2610) :type 'boolean :group 'eshell-dirs)
#@52 *A hook to run when the current directory changes.
(custom-declare-variable 'eshell-directory-change-hook 'nil '(#$ . -2778) :type 'hook :group 'eshell-dirs)
#@252 *If non-nil, call "ls" with any remaining args after doing a cd.
This is provided for convenience, since the same effect is easily
achieved by adding a function to `eshell-directory-change-hook' that
calls "ls" and references `eshell-last-arguments'.
(custom-declare-variable 'eshell-list-files-after-cd 'nil '(#$ . -2943) :type 'boolean :group 'eshell-dirs)
#@114 *If non-nil, make pushd with no arg behave as 'pushd ~' (like `cd').
This mirrors the optional behavior of tcsh.
(custom-declare-variable 'eshell-pushd-tohome 'nil '(#$ . -3309) :type 'boolean :group 'eshell-dirs)
#@108 *If non-nil, make "pushd +n" pop the nth dir to the stack top.
This mirrors the optional behavior of tcsh.
(custom-declare-variable 'eshell-pushd-dextract 'nil '(#$ . -3530) :type 'boolean :group 'eshell-dirs)
#@111 *If non-nil, make pushd only add unique directories to the stack.
This mirrors the optional behavior of tcsh.
(custom-declare-variable 'eshell-pushd-dunique 'nil '(#$ . -3747) :type 'boolean :group 'eshell-dirs)
#@124 *If non-nil, show the directory stack following directory change.
This is effective only if directory tracking is enabled.
(custom-declare-variable 'eshell-dirtrack-verbose 't '(#$ . -3966) :type 'boolean :group 'eshell-dirs)
#@196 *If non-nil, name of the file to read/write the last-dir-ring.
See also `eshell-read-last-dir-ring' and `eshell-write-last-dir-ring'.
If it is nil, the last-dir-ring will not be written to disk.
(custom-declare-variable 'eshell-last-dir-ring-file-name '(expand-file-name "lastdir" eshell-directory-name) '(#$ . -4199) :type 'file :group 'eshell-dirs)
#@897 *If non-nil, the size of the directory history ring.
This ring is added to every time `cd' or `pushd' is used.  It simply
stores the most recent directory locations Eshell has been in.  To
return to the most recent entry, use 'cd -' (equivalent to 'cd -0').
To return to an older entry, use 'cd -N', where N is an integer less
than `eshell-last-dir-ring-size'.  To return to the last directory
matching a particular regexp, use 'cd =REGEXP'.  To display the
directory history list, use 'cd ='.

This mechanism is very similar to that provided by `pushd', except
it's far more automatic.  `pushd' allows the user to decide which
directories gets pushed, and its size is unlimited.

`eshell-last-dir-ring' is meant for users who don't use `pushd'
explicity very much, but every once in a while would like to return to
a previously visited directory without having to type in the whole
thing again.
(custom-declare-variable 'eshell-last-dir-ring-size '32 '(#$ . -4557) :type 'integer :group 'eshell-dirs)
#@67 *If non-nil, `eshell-last-dir-ring' contains only unique entries.
(custom-declare-variable 'eshell-last-dir-unique 't '(#$ . -5565) :type 'boolean :group 'eshell-dirs)
#@109 List of directories saved by pushd in the Eshell buffer.
Thus, this does not include the current directory.
(defvar eshell-dirstack nil (#$ . 5740))
#@40 The last directory that Eshell was in.
(defvar eshell-last-dir-ring nil (#$ . 5895))
#@46 Initialize the builtin functions for Eshell.
(defalias 'eshell-dirs-initialize #[nil "\306\300!\210\307\310\"	\203 \306\302!\210\311\312B\nB\313\314\315\316\317$\210\320>\203+ \313\314\321\316\317$\210\322\211>)\203; \313\323\324\316\317$\210\306\325!\210\306\326!\210\203K \327 \210\204V \330!\313\331\332\316\317$\210\313\333\334\"\207" [eshell-variable-aliases-list eshell-cd-on-directory eshell-interpreter-alist system-type module eshell-modules-list make-local-variable append (("-" (lambda (indices) (if (not indices) (unless (ring-empty-p eshell-last-dir-ring) (expand-file-name (ring-ref eshell-last-dir-ring 0))) (expand-file-name (eshell-apply-indices eshell-last-dir-ring indices))))) ("+" "PWD") ("PWD" (lambda (indices) (expand-file-name (eshell/pwd))) t) ("OLDPWD" (lambda (indices) (unless (ring-empty-p eshell-last-dir-ring) (expand-file-name (ring-ref eshell-last-dir-ring 0)))) t)) eshell-lone-directory-p eshell-dirs-substitute-cd add-hook eshell-parse-argument-hook eshell-parse-user-reference nil t (ms-dos windows-nt) eshell-parse-drive-letter eshell-cmpl pcomplete-try-first-hook eshell-complete-user-reference eshell-dirstack eshell-last-dir-ring eshell-read-last-dir-ring make-ring eshell-exit-hook eshell-write-last-dir-ring kill-emacs-hook eshell-save-some-last-dir eshell-last-dir-ring-file-name eshell-last-dir-ring-size] 6 (#$ . 5986)])
#@53 Save the list-dir-ring for any open Eshell buffers.
(defalias 'eshell-save-some-last-dir #[nil "\304 \211\205: @\305	!\2031 r	q\210\n\2030 \2030 \306=\204- \307\310\311\312	!\"!\2030 \313 \210))A\211\204 \314)\207" [list-iter buf eshell-mode eshell-ask-to-save-last-dir buffer-list buffer-live-p always y-or-n-p format "Save last dir ring for Eshell buffer `%s'? " buffer-name eshell-write-last-dir-ring nil] 6 (#$ . 7375)])
#@69 Test whether FILE is just a directory name, and not a command name.
(defalias 'eshell-lone-directory-p #[(file) "\301!\205 \302!\206 \303!?\207" [file file-directory-p file-name-directory eshell-search-path] 2 (#$ . 7814)])
#@63 Substitute the given command for a call to `cd' on that name.
(defalias 'eshell-dirs-substitute-cd #[(&rest args) "G\301V\203 \302\303@\"\207\304\305\306\307\310!\"\"\207" [args 1 error "%s: command not found" throw eshell-replace-command eshell-parse-command "cd" eshell-flatten-list] 6 (#$ . 8049)])
#@60 An argument beginning with ~ is a filename to be expanded.
(defalias 'eshell-parse-user-reference #[nil "?\205 \301f\302=\205 \303\304\305\"\210\301u\210\306`Sf!\207" [eshell-current-argument nil 126 add-to-list eshell-current-modifiers expand-file-name char-to-string] 3 (#$ . 8361)])
#@64 An argument beginning with X:[^/] is a drive letter reference.
(defalias 'eshell-parse-drive-letter #[nil "?\205# \304\305!\205# \306\225b\210\307\306!\310	P\311\n!\211\206  	\312P+\207" [eshell-current-argument letter regexp path looking-at "\\([A-Za-z]:\\)\\([^/\\\\]\\|\\'\\)" 1 match-string "\\`" eshell-find-previous-directory "/"] 3 (#$ . 8656)])
#@44 If there is a user reference, complete it.
(defalias 'eshell-complete-user-reference #[nil "\304 \305\306\"\205 \307\310O\311\312\313\314 \210\315\316\317\"!\")\207" [arg pcomplete-stub pcomplete-last-completion-raw eshell-user-names pcomplete-actual-arg string-match "\\`~[a-z]*\\'" 1 nil t throw pcomplete-completions eshell-read-user-names pcomplete-uniqify-list mapcar #[(user) "\301A!\207" [user file-name-as-directory] 2]] 6 (#$ . 9019)])
#@41 Change output from `pwd` to be cleaner.
(defalias 'eshell/pwd #[(&rest args) "\211G\211\305V\203( 	\nSH\306=\203( \307>\203! \310\311	\"\204( 	\312	GSO\f\2032 \f	!\2023 	*\207" [default-directory path len system-type eshell-pwd-convert-function 1 47 (ms-dos windows-nt) string-match "\\`[A-Za-z]:[\\\\/]\\'" 0] 4 (#$ . 9478)])
#@386 Convert '...' to '../..', '....' to '../../..', etc..

With the following piece of advice, you can make this functionality
available in most of Emacs, with the exception of filename completion
in the minibuffer:

  (defadvice expand-file-name
    (before translate-multiple-dots
	    (filename &optional directory) activate)
    (setq filename (eshell-expand-multiple-dots filename)))
(defalias 'eshell-expand-multiple-dots #[(path) "\304\305\"\203. \306\307\"\211G\310\n\311V\203\" \312P\nS\211\202 \313\314\211\307%+\202  \207" [path extra-dots len replace-text string-match "\\(?:^\\|/\\)\\.\\.\\(\\.+\\)\\(?:$\\|/\\)" match-string 1 nil 0 "/.." replace-match t] 7 (#$ . 9817)])
#@48 Find the most recent last-dir matching REGEXP.
(defalias 'eshell-find-previous-directory #[(regexp) "\305\306!\307\fG\305V\2030 \nW\2030 \310\"\311\f	\"\203' \n\211\202 \307T\211\202 	+\207" [eshell-last-dir-ring oldpath len index regexp 0 ring-length nil ring-ref string-match] 4 (#$ . 10518)])
#@39 Alias to extend the behavior of `cd'.
(defalias 'eshell/cd #[(&rest args) "\306!\211@A@	\307>\310\211\247\203 \311!\f\247\203# \311\f!\f\203G \312 )\313)\"\203> \314\f\310\211)$\202C \315\316\"\210)\202\324 \203n \313\317\"\203n \320\321\"*\322+*\203g \323*!\202h \324\")\202\324 \203\314 \313\325\"\203\314 \326\320\321\"!\211,\203\213 ,\202\310 \327+!\324*\211-\324U\203\236 \315\330!\210\331 \210*-W\203\302 \332\311*!\333\334+*\"\335R!\210*T\211*\202\243 \336 \210\337*)\202\324 \203\324 \340!\n?\205'\206\336 \341.\312 \211).\232\204\360 \342)!\210\343.!/0\203/\21111\34412\"\210)\3351\34412\"\210*)\345\346!\2103\203%\347\350A\"\210)\310,\207" [args system-type handled case-fold-search subpath path eshell-flatten-list (ms-dos windows-nt) nil number-to-string eshell/pwd string-match replace-match error "Path substring '%s' not found" "^-\\([0-9]*\\)$" match-string 1 ring-remove string-to-number 0 "^=\\(.*\\)$" eshell-find-previous-directory ring-length "Directory ring empty" eshell-init-print-buffer eshell-buffered-print ": " ring-ref "\n" eshell-flush t eshell-expand-multiple-dots "~" eshell-add-to-dir-ring cd eshell-output-object run-hooks eshell-directory-change-hook eshell-plain-command "ls" curdir index eshell-last-dir-ring oldpath len dired-directory result eshell-cd-shows-directory object eshell-output-handle eshell-list-files-after-cd] 7 (#$ . 10834)])
(put 'eshell/cd 'eshell-no-numeric-conversions t)
#@47 Add PATH to the last-dir-ring, if applicable.
(defalias 'eshell-add-to-dir-ring #[(path) "\305!?\205 	\306\307\"\232?\205> \n\203: \307\310!\fW\2039 \306\f\"	\232\2032 \311\f\"\210\202 \fT\211\202 *\312	\"\207" [eshell-last-dir-ring path eshell-last-dir-unique len index ring-empty-p ring-ref 0 ring-length ring-remove ring-insert] 5 (#$ . 12337)])
#@34 Implementation of pushd in Lisp.
(defalias 'eshell/pushd #[(&rest args) "@\211\2042 \n\203 \306\307!\210\202\317 \203+ \310 \311@!\210\fAB\312\313!\210)\202\317 \314\315!\210\202\317 \316\317	\"\203\261 \320\321\322	\"!\211GV\203N \314\323!\210\202\317 	\324U\203[ \314\325!\210\202\317 \203{ 	S8\326	!\210\306\310 !\210\311!\210\312\313!\210)\202\317 \310 B\211G	\233	Z\327!\233\237\330\"\311@!\210A\312\313!\210-\202\317 \310  \311	!\210!\203\305  \235\204\312  B\312\313!\210))\331\207" [args path eshell-pushd-tohome eshell-dirstack old eshell-pushd-dextract eshell/pushd "~" eshell/pwd eshell/cd eshell/dirs t error "pushd: No other directory" string-match "^\\+\\([0-9]\\)" string-to-number match-string 1 "Directory stack not that deep" 0 "Couldn't cd" eshell/popd reverse append nil dir ds dslen front back new-ds old-wd eshell-pushd-dunique] 5 (#$ . 12705)])
(put 'eshell/pushd 'eshell-no-numeric-conversions t)
#@33 Implementation of popd in Lisp.
(defalias 'eshell/popd #[(&rest args) "@\206 \306\211;\203 \307\310	\"\204 \311\312	\"\210\313\314\315	\"!\211\316U\203< \n\204- \311\317!\210\320\n@!\210\nA\321\322!\210\202} \323	!\nGX\203y \324\nB	\316V\203T 	S\202X \nG	\\\233\211\211A@)\320!\210\f\211AA\241\210A\321\322!\210+\202} \311\325!\210)\324\207" [args ref eshell-dirstack ds cell x "+0" string-match "\\`\\([+-][0-9]+\\)\\'" error "popd: bad arg `%s'" string-to-number match-string 1 0 "popd: Directory stack empty" eshell/cd eshell/dirs t abs nil "Couldn't popd" dir] 5 (#$ . 13681)])
(put 'eshell/popd 'eshell-no-numeric-conversions t)
#@33 Implementation of dirs in Lisp.
(defalias 'eshell/dirs #[(&optional if-verbose) "\203 	\205M \306\307 B\310\311!\211G\f\203K \f@\211GY\203< \312O\230\203< \311\313OP\n\314!\315Q\fA)\202 \n,\207" [if-verbose eshell-dirtrack-verbose msg eshell-dirstack ds home "" eshell/pwd expand-file-name "~/" 0 nil directory-file-name " " homelen dir] 5 (#$ . 14338)])
#@62 Set the buffer's `eshell-last-dir-ring' from a history file.
(defalias 'eshell-read-last-dir-ring #[nil "\211\203 	\306\232\204 \307	!\204 \310\202k \311\312\f!\313\314!rq\210\315\216\316	!\210db\210\n\fW\203M \317\320\310\321#\203M \322\323\324!\"\210\nT\211\2022 \325!\204e \326\311\"\327 \232\203e \330\311\"\210\202M +\211+)\207" [eshell-last-dir-ring-file-name file count eshell-last-dir-ring-size size ring "" file-readable-p nil 0 make-ring generate-new-buffer " *temp*" ((byte-code "\301!\203\n \302!\210\301\207" [#1=#:temp-buffer buffer-name kill-buffer] 2)) insert-file-contents re-search-backward "^\\([^\n].*\\)$" t ring-insert-at-beginning match-string 1 ring-empty-p ring-ref eshell/pwd ring-remove #1# eshell-last-dir-ring] 5 (#$ . 14727)])
#@62 Write the buffer's `eshell-last-dir-ring' to a history file.
(defalias 'eshell-write-last-dir-ring #[nil "\211\203 	\306\232\204 \n\203 \307\n!\203 \310\202d \311	!\204' \312\313	\"\202d \n\314!\315\316!rq\210\317\216\f\320V\203K \fS\321\f\"\322\261\210\2027 \323 \322\261\210\324 \325\326!\210\327\216\330ed	\310\331%.)\207" [eshell-last-dir-ring-file-name file eshell-last-dir-ring ring index #1=#:temp-buffer "" ring-empty-p nil file-writable-p message "Cannot write last-dir-ring file %s" ring-length generate-new-buffer " *temp*" ((byte-code "\301!\203\n \302!\210\301\207" [#1# buffer-name kill-buffer] 2)) 0 ring-ref 10 eshell/pwd default-file-modes set-default-file-modes 384 ((set-default-file-modes modes)) write-region no-message modes] 7 (#$ . 15513)])
(provide 'em-dirs)
