unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Jarek Czekalski <jarekczek@poczta.onet.pl>
To: 15461@debbugs.gnu.org
Subject: bug#15461: 24.3; [PATCH] exec-path on ms windows should contain current directory
Date: Thu, 26 Dec 2013 00:14:47 +0100	[thread overview]
Message-ID: <52BB66E7.2060302@poczta.onet.pl> (raw)
In-Reply-To: <5242E42A.4050109@poczta.onet.pl>

[-- Attachment #1: Type: text/plain, Size: 2041 bytes --]

I am attaching a patch to fix this thing. The change is very small, but 
when documenting it, I discovered some inconsistencies in the manual 
regarding shell completion options. I did my best to fix them. Now the 
documentation changes are bigger than the functional change.

Below I pointed several things that may need attention:

- Whether such broad changes in manual may be done together with a lisp 
change (new variable)
- Whether an unnumbered subsubsection Shell Mode Completion Options in 
Shell Mode Options is a good idea
- Whether anchors can be used, because our info viewer does not follow 
them correctly
- Whether this new variable may be introduced despite the feature freeze
- Whether a new position in concept index (shell completion) is fine

Suggested commit message:

Introduce a variable shell-completion-cur-dir and document it.
Document a related detail in exec-path variable.

Add some consistency in the documentation of completion in the manual:
- add a link from Completion section to Shell Mode,
- move documentation of shell-completion-fignore from Shell Mode to Shell
   Mode Options,
- group Shell Mode Completion Options into a new unnumbered subsubsection.

FIXME: anchors used in this commit currently do not work correctly in Emacs
info viewer, however work correctly in Linux info viewer, so this must be
a bug in our info viewer.

     * lisp/shell.el (shell-completion-cur-dir): New variable to allow shell
     completion to use filenames from current directory.
     (shell--command-completion-data): Use it.
     * src/callproc.c (Vexec_path): Documentation of the library path in it.
     * doc/mini.texi (Completion Options): Add a link to Shell Mode 
Completion
     Options.
     * doc/misc.texi (Shell Mode): Document new variable
     shell-completion-cur-dir.
     Move documentation of shell-completion-fignore from Shell Mode to Shell
     Mode Options.
     Add an unnumbered subsubsection to group completion options. This also
     required to move pushd paragraph above this group.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: complete_cur_dir_1_0.diff --]
[-- Type: text/x-diff; name="complete_cur_dir_1_0.diff", Size: 11080 bytes --]

=== modified file 'doc/emacs/ChangeLog'
*** doc/emacs/ChangeLog	2013-12-25 02:18:43 +0000
--- doc/emacs/ChangeLog	2013-12-25 22:39:00 +0000
***************
*** 1,3 ****
--- 1,15 ----
+ 2013-12-25  Jarek Czekalski  <jarekczek@poczta.onet.pl>
+ 
+ 	* mini.texi (Completion Options): Add a link to Shell Mode Completion
+ 	Options.
+ 	* misc.texi (Shell Mode): Document new variable
+ 	shell-completion-cur-dir.
+ 	Move documentation of shell-completion-fignore from Shell Mode to Shell
+ 	Mode Options.
+ 	Add an unnumbered subsubsection to group completion options. This also
+ 	required to move pushd paragraph above this group.
+ 
+ 
  2013-12-25  Xue Fuqiao  <xfq.free@gmail.com>
  
  	* files.texi (Diff Mode): Add an index.

=== modified file 'doc/emacs/mini.texi'
*** doc/emacs/mini.texi	2013-01-01 09:11:05 +0000
--- doc/emacs/mini.texi	2013-12-25 22:35:50 +0000
*************** previous example, @samp{foo.e} completes
*** 550,555 ****
--- 550,558 ----
  disregards @code{completion-ignored-extensions} when showing
  completion alternatives in the completion list.
  
+   Shell completion is an extended version of filename completion,
+ @xref{Shell Mode Completion Options}.
+ 
  @vindex completion-auto-help
    If @code{completion-auto-help} is set to @code{nil}, the completion
  commands never display the completion list buffer; you must type

=== modified file 'doc/emacs/misc.texi'
*** doc/emacs/misc.texi	2013-12-23 13:01:25 +0000
--- doc/emacs/misc.texi	2013-12-25 22:36:30 +0000
*************** in the shell buffer to submit the curren
*** 677,696 ****
  @item @key{TAB}
  @kindex TAB @r{(Shell mode)}
  @findex completion-at-point
  Complete the command name or file name before point in the shell
  buffer (@code{completion-at-point}).  This uses the usual Emacs
  completion rules (@pxref{Completion}), with the completion
  alternatives being file names, environment variable names, the shell
  command history, and history references (@pxref{History References}).
! 
! @vindex shell-completion-fignore
! @vindex comint-completion-fignore
! The variable @code{shell-completion-fignore} specifies a list of file
! name extensions to ignore in Shell mode completion.  The default
! setting is @code{nil}, but some users prefer @code{("~" "#" "%")} to
! ignore file names ending in @samp{~}, @samp{#} or @samp{%}.  Other
! related Comint modes use the variable @code{comint-completion-fignore}
! instead.
  
  @item M-?
  @kindex M-? @r{(Shell mode)}
--- 677,689 ----
  @item @key{TAB}
  @kindex TAB @r{(Shell mode)}
  @findex completion-at-point
+ @cindex shell completion
  Complete the command name or file name before point in the shell
  buffer (@code{completion-at-point}).  This uses the usual Emacs
  completion rules (@pxref{Completion}), with the completion
  alternatives being file names, environment variable names, the shell
  command history, and history references (@pxref{History References}).
! Also @xref{Shell Mode Completion Options}.
  
  @item M-?
  @kindex M-? @r{(Shell mode)}
*************** value means to omit an input that is the
*** 1161,1169 ****
--- 1154,1176 ----
  The default is @code{nil}, which means to store each input even if it is
  equal to the previous input.
  
+ @findex shell-pushd-tohome
+ @findex shell-pushd-dextract
+ @findex shell-pushd-dunique
+   You can configure the behavior of @samp{pushd}.  Variables control
+ whether @samp{pushd} behaves like @samp{cd} if no argument is given
+ (@code{shell-pushd-tohome}), pop rather than rotate with a numeric
+ argument (@code{shell-pushd-dextract}), and only add directories to the
+ directory stack if they are not already on it
+ (@code{shell-pushd-dunique}).  The values you choose should match the
+ underlying shell, of course.
+ 
+ @unnumberedsubsubsec Shell Mode Completion Options
+ @anchor{Shell Mode Completion Options}
  @vindex comint-completion-addsuffix
  @vindex comint-completion-recexact
  @vindex comint-completion-autolist
+ @cindex shell completion
    Three variables customize file name completion.  The variable
  @code{comint-completion-addsuffix} controls whether completion inserts a
  space or a slash to indicate a fully completed file or directory name
*************** the possible completions whenever comple
*** 1179,1194 ****
  If you set @code{shell-completion-execonly} to @code{nil},
  it considers nonexecutable files as well.
  
! @findex shell-pushd-tohome
! @findex shell-pushd-dextract
! @findex shell-pushd-dunique
!   You can configure the behavior of @samp{pushd}.  Variables control
! whether @samp{pushd} behaves like @samp{cd} if no argument is given
! (@code{shell-pushd-tohome}), pop rather than rotate with a numeric
! argument (@code{shell-pushd-dextract}), and only add directories to the
! directory stack if they are not already on it
! (@code{shell-pushd-dunique}).  The values you choose should match the
! underlying shell, of course.
  
  @node Terminal emulator
  @subsection Emacs Terminal Emulator
--- 1186,1208 ----
  If you set @code{shell-completion-execonly} to @code{nil},
  it considers nonexecutable files as well.
  
! @vindex shell-completion-fignore
! @vindex comint-completion-fignore
! The variable @code{shell-completion-fignore} specifies a list of file
! name extensions to ignore in Shell mode completion.  The default
! setting is @code{nil}, but some users prefer @code{("~" "#" "%")} to
! ignore file names ending in @samp{~}, @samp{#} or @samp{%}.  Other
! related Comint modes use the variable @code{comint-completion-fignore}
! instead.
! 
! @vindex shell-completion-cur-dir
!   The variable @code{shell-completion-cur-dir} controls whether filenames from
! the current buffer's directory will also be used as potential commands.
! 
! @findex shell-dynamic-complete-command
! Some implementation details of the shell command completion may also be found
! in the lisp documentation of the @code{shell-dynamic-complete-command}
! function.
  
  @node Terminal emulator
  @subsection Emacs Terminal Emulator

=== modified file 'etc/NEWS'
*** etc/NEWS	2013-12-25 03:05:11 +0000
--- etc/NEWS	2013-12-25 23:09:58 +0000
*************** the variable `explicit-shell-file-name'
*** 2943,2948 ****
--- 2943,2954 ----
  *** TAB is now bound to the standard `completion-at-point' command,
  which now implements the pcomplete rules for shell command completion.
  
+ ---
+ *** New customizable variable shell-completion-cur-dir, which controls
+ whether filenames from current directory will be found by
+ completion. Initialized to t on systems on which this is default
+ behavior.
+ 
  ** SMTPmail
  
  *** SMTPmail now uses encrypted connections (via STARTTLS) by default

=== modified file 'lisp/ChangeLog'
*** lisp/ChangeLog	2013-12-24 19:48:40 +0000
--- lisp/ChangeLog	2013-12-25 21:17:16 +0000
***************
*** 1,3 ****
--- 1,9 ----
+ 2013-12-25  Jarek Czekalski  <jarekczek@poczta.onet.pl>
+ 
+ 	* shell.el (shell-completion-cur-dir): New variable to allow shell
+ 	completion to use filenames from current directory.
+ 	(shell--command-completion-data): Use it.
+ 
  2013-12-24  Fabián Ezequiel Gallina  <fgallina@gnu.org>
  
  	* progmodes/python.el (python-nav-beginning-of-statement): Speed

=== modified file 'lisp/shell.el'
*** lisp/shell.el	2013-09-12 05:40:50 +0000
--- lisp/shell.el	2013-12-25 22:54:47 +0000
*************** Detecting executability of files may slo
*** 211,216 ****
--- 211,223 ----
    :type 'boolean
    :group 'shell)
  
+ (defcustom shell-completion-cur-dir
+   (member system-type '(windows-nt ms-dos t))
+   "Non-nil if completion should match filenames from the current buffer's
+ directory. Initialized to t on systems in which this behavior is a default."
+   :type 'boolean
+   :group 'shell)
+ 
  (defcustom shell-popd-regexp "popd"
    "Regexp to match subshell commands equivalent to popd."
    :type 'regexp
*************** searches `exec-path' (minus the trailing
*** 1112,1119 ****
  candidates.  Note that this may not be the same as the shell's idea of the
  path.
  
! Completion is dependent on the value of `shell-completion-execonly', plus
! those that effect file completion.
  
  Returns t if successful."
    (interactive)
--- 1119,1127 ----
  candidates.  Note that this may not be the same as the shell's idea of the
  path.
  
! Completion is dependent on the value of `shell-completion-execonly',
! `shell-completion-fignore', `shell-completion-cur-dir', plus those that affect
! file completion. See Info node `Shell Mode Completion Options'.
  
  Returns t if successful."
    (interactive)
*************** Returns t if successful."
*** 1138,1144 ****
           (start (if (zerop (length filename)) (point) (match-beginning 0)))
           (end (if (zerop (length filename)) (point) (match-end 0)))
  	 (filenondir (file-name-nondirectory filename))
! 	 (path-dirs (cdr (reverse exec-path))) ;FIXME: Why `cdr'?
  	 (cwd (file-name-as-directory (expand-file-name default-directory)))
  	 (ignored-extensions
  	  (and comint-completion-fignore
--- 1146,1155 ----
           (start (if (zerop (length filename)) (point) (match-beginning 0)))
           (end (if (zerop (length filename)) (point) (match-end 0)))
  	 (filenondir (file-name-nondirectory filename))
!          ; why cdr? see `shell-dynamic-complete-command', however on Windows
!          ; we have 3 library directories and this does not fully work
! 	 (path-dirs (append (cdr (reverse exec-path))
!            (if shell-completion-cur-dir '("."))))
  	 (cwd (file-name-as-directory (expand-file-name default-directory)))
  	 (ignored-extensions
  	  (and comint-completion-fignore

=== modified file 'src/ChangeLog'
*** src/ChangeLog	2013-12-24 17:21:06 +0000
--- src/ChangeLog	2013-12-25 22:44:31 +0000
***************
*** 1,3 ****
--- 1,7 ----
+ 2013-12-25  Jarek Czekalski  <jarekczek@poczta.onet.pl>
+ 
+ 	* callproc.c (Vexec_path): Documentation of the library path in it.
+ 
  2013-12-24  Eli Zaretskii  <eliz@gnu.org>
  
  	* w32fns.c (Fw32_shell_execute): Ensure DOCUMENT is an absolute

=== modified file 'src/callproc.c'
*** src/callproc.c	2013-12-18 20:36:50 +0000
--- src/callproc.c	2013-12-25 08:45:33 +0000
*************** default if SHELL is not set.  */);
*** 1686,1692 ****
  
    DEFVAR_LISP ("exec-path", Vexec_path,
  	       doc: /* List of directories to search programs to run in subprocesses.
! Each element is a string (directory name) or nil (try default directory).  */);
  
    DEFVAR_LISP ("exec-suffixes", Vexec_suffixes,
  	       doc: /* List of suffixes to try to find executable file names.
--- 1686,1696 ----
  
    DEFVAR_LISP ("exec-path", Vexec_path,
  	       doc: /* List of directories to search programs to run in subprocesses.
! Each element is a string (directory name) or nil (try default directory).
! 
! By default the last element of this list is Emacs library path. The
! last element is not always used, for example in shell completion
! (`shell-dynamic-complete-command').  */);
  
    DEFVAR_LISP ("exec-suffixes", Vexec_suffixes,
  	       doc: /* List of suffixes to try to find executable file names.


  parent reply	other threads:[~2013-12-25 23:14 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-25 13:24 bug#15461: 24.3; exec-path on ms windows should contain current directory Jarek Czekalski
2013-09-25 15:48 ` Eli Zaretskii
2013-09-26 17:23 ` bug#15461: why do I need it Jarek Czekalski
2013-09-26 17:59   ` Eli Zaretskii
2013-09-26 20:39     ` Stefan Monnier
2013-09-26 20:40 ` bug#15461: answer Jarek Czekalski
2013-12-15 20:32 ` bug#15461: 24.3; exec-path on ms windows should contain current directory Jarek Czekalski
2013-12-15 21:16   ` Eli Zaretskii
2013-12-16  8:06 ` Jarek Czekalski
2013-12-16 16:45   ` Eli Zaretskii
2013-12-18  8:15     ` Jarek Czekalski
2013-12-25 23:14 ` Jarek Czekalski [this message]
2013-12-26 16:23   ` bug#15461: 24.3; [PATCH] " Eli Zaretskii
2013-12-26 22:27     ` Jarek Czekalski
2013-12-26 23:22       ` Juanma Barranquero
2013-12-27  8:19       ` Eli Zaretskii
2013-12-27 21:02         ` Jarek Czekalski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52BB66E7.2060302@poczta.onet.pl \
    --to=jarekczek@poczta.onet.pl \
    --cc=15461@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).