X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/0d6459dfb52188481bfd6bb53f1b2f653ecd6a5d..875a5d0ead827d3da32ecbd30e739a29f07bbc87:/lisp/eshell/em-dirs.el diff --git a/lisp/eshell/em-dirs.el b/lisp/eshell/em-dirs.el index 1aa2c34c39..ac1616d504 100644 --- a/lisp/eshell/em-dirs.el +++ b/lisp/eshell/em-dirs.el @@ -1,6 +1,6 @@ -;;; em-dirs.el --- directory navigation commands +;;; em-dirs.el --- directory navigation commands -*- lexical-binding:t -*- -;; Copyright (C) 1999-2011 Free Software Foundation, Inc. +;; Copyright (C) 1999-2015 Free Software Foundation, Inc. ;; Author: John Wiegley @@ -47,14 +47,15 @@ (require 'esh-opt) ;;;###autoload -(eshell-defgroup eshell-dirs nil +(progn +(defgroup eshell-dirs nil "Directory navigation involves changing directories, examining the current directory, maintaining a directory stack, and also keeping track of a history of the last directory locations the user was in. Emacs does provide standard Lisp definitions of `pwd' and `cd', but they lack somewhat in feel from the typical shell equivalents." :tag "Directory navigation" - :group 'eshell-module) + :group 'eshell-module)) ;;; User Variables: @@ -70,7 +71,7 @@ they lack somewhat in feel from the typical shell equivalents." "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 ='." +form of the list used by `cd ='." :type '(radio (function-item file-truename) (function-item expand-file-name) (function-item identity) @@ -114,7 +115,7 @@ calls \"ls\" and references `eshell-last-arguments'." :group 'eshell-dirs) (defcustom eshell-pushd-tohome nil - "If non-nil, make pushd with no arg behave as 'pushd ~' (like `cd'). + "If non-nil, make pushd with no arg behave as `pushd ~' (like `cd'). This mirrors the optional behavior of tcsh." :type 'boolean :group 'eshell-dirs) @@ -149,18 +150,18 @@ If it is nil, the last-dir-ring will not be written to disk." "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 +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 ='. +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 +explicitly 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." :type 'integer @@ -206,7 +207,8 @@ Thus, this does not include the current directory.") (when eshell-cd-on-directory (make-local-variable 'eshell-interpreter-alist) (setq eshell-interpreter-alist - (cons (cons 'eshell-lone-directory-p + (cons (cons #'(lambda (file args) + (eshell-lone-directory-p file)) 'eshell-dirs-substitute-cd) eshell-interpreter-alist))) @@ -298,7 +300,7 @@ Thus, this does not include the current directory.") eshell-user-names))))))) (defun eshell/pwd (&rest args) - "Change output from `pwd` to be cleaner." + "Change output from ‘pwd’ to be cleaner." (let* ((path default-directory) (len (length path))) (if (and (> len 1) @@ -311,7 +313,7 @@ Thus, this does not include the current directory.") path))) (defun eshell-expand-multiple-dots (path) - "Convert '...' to '../..', '....' to '../../..', etc.. + "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 @@ -346,8 +348,6 @@ in the minibuffer: index (1+ index))))) oldpath)) -(defvar dired-directory) - (defun eshell/cd (&rest args) ; all but first ignored "Alias to extend the behavior of `cd'." (setq args (eshell-flatten-list args)) @@ -364,7 +364,7 @@ in the minibuffer: (let ((curdir (eshell/pwd))) (if (string-match path curdir) (setq path (replace-match subpath nil nil curdir)) - (error "Path substring '%s' not found" path)))) + (error "Path substring ‘%s’ not found" path)))) ((and path (string-match "^-\\([0-9]*\\)$" path)) (let ((index (match-string 1 path))) (setq path @@ -392,11 +392,11 @@ in the minibuffer: (path (setq path (eshell-expand-multiple-dots path)))) (unless handled - (setq dired-directory (or path "~")) - (let ((curdir (eshell/pwd))) - (unless (equal curdir dired-directory) + (let ((curdir (eshell/pwd)) + (newdir (or path "~"))) + (unless (equal curdir newdir) (eshell-add-to-dir-ring curdir)) - (let ((result (cd dired-directory))) + (let ((result (cd newdir))) (and eshell-cd-shows-directory (eshell-printn result))) (run-hooks 'eshell-directory-change-hook)