From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Jarek Czekalski Newsgroups: gmane.emacs.bugs Subject: bug#15461: 24.3; [PATCH] exec-path on ms windows should contain current directory Date: Thu, 26 Dec 2013 23:27:48 +0100 Message-ID: <52BCAD64.70500@poczta.onet.pl> References: <5242E42A.4050109@poczta.onet.pl> <52BB66E7.2060302@poczta.onet.pl> <834n5v60p4.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020707030308010309090907" X-Trace: ger.gmane.org 1388096833 25344 80.91.229.3 (26 Dec 2013 22:27:13 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 26 Dec 2013 22:27:13 +0000 (UTC) To: 15461@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Dec 26 23:27:19 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VwJOg-0003T5-7l for geb-bug-gnu-emacs@m.gmane.org; Thu, 26 Dec 2013 23:27:18 +0100 Original-Received: from localhost ([::1]:47090 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VwJOf-000828-Qy for geb-bug-gnu-emacs@m.gmane.org; Thu, 26 Dec 2013 17:27:17 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:37987) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VwJOW-00081q-Os for bug-gnu-emacs@gnu.org; Thu, 26 Dec 2013 17:27:13 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VwJOQ-0007jR-UR for bug-gnu-emacs@gnu.org; Thu, 26 Dec 2013 17:27:08 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:58886) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VwJOQ-0007jD-Lp for bug-gnu-emacs@gnu.org; Thu, 26 Dec 2013 17:27:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VwJOQ-00025T-AX for bug-gnu-emacs@gnu.org; Thu, 26 Dec 2013 17:27:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Jarek Czekalski Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 26 Dec 2013 22:27:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15461 X-GNU-PR-Package: emacs,w32 X-GNU-PR-Keywords: Original-Received: via spool by 15461-submit@debbugs.gnu.org id=B15461.13880968138006 (code B ref 15461); Thu, 26 Dec 2013 22:27:02 +0000 Original-Received: (at 15461) by debbugs.gnu.org; 26 Dec 2013 22:26:53 +0000 Original-Received: from localhost ([127.0.0.1]:44671 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VwJOG-000253-8d for submit@debbugs.gnu.org; Thu, 26 Dec 2013 17:26:53 -0500 Original-Received: from smtpo15.poczta.onet.pl ([213.180.142.146]:35308) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VwJOB-00024o-3R for 15461@debbugs.gnu.org; Thu, 26 Dec 2013 17:26:49 -0500 Original-Received: from [192.168.17.5] (cj.e-siemianowice.pl [95.215.234.30]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: jarekczek@poczta.onet.pl) by smtp.poczta.onet.pl (Onet) with ESMTPSA id 3dr5PK1zQgzZD4qQ for <15461@debbugs.gnu.org>; Thu, 26 Dec 2013 23:26:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=poczta.onet.pl; s=2011; t=1388096805; bh=flnehMZo0M5z58OmMzbDhBjcgZ1ZIbeB2kbcvZoebQ8=; h=Message-ID:Date:From:MIME-Version:To:Subject:References: In-Reply-To:Content-Type; b=Yz++Xpgm5RrFT8nb1Xz0S8nScDogDiOulr3m5h0tNb1vHoPRiD6H/EQZilFxxKPMe YQhHjgok8b0va8KOBEXzSoSDPgezTOQIAIM4vDkTn8bKR51kfoI6hGsztQRw09zs8A OBgAkg0ekNTxbsvupY9myMwd4wsPb2nRtF92Zlrg= User-Agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 In-Reply-To: <834n5v60p4.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:82631 Archived-At: This is a multi-part message in MIME format. --------------020707030308010309090907 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Eli This was a thorough review of the patch and exhausting answers. Thank you. I no longer have any justification for creating a variable shell-completion-cur-dir. After removing this variable the patch, the code and the manual are better and cleaner. "shell completion" concept index now points only to paragraph in Shell Mode node. Only a few things require an answer from me. Those omitted are the ones I completely agree with and took a lesson from them. > >- Whether an unnumbered subsubsection Shell Mode Completion Options in > >Shell Mode Options is a good idea > It's not a catastrophe, but a @node is preferable. Except that in > this case, I don't think even a node is justified, as you only added a > single variable to a node that was not very large anyway. Half of this node regards shell completion options. It would be good to group these options in some way. I just wanted to give them a heading and separate from others. But after your remark I removed the node and the anchor. The grouping may be done later. > + (defcustom shell-completion-cur-dir > + (member system-type '(windows-nt ms-dos t)) > Why 'member' and not 'memq'? And why did you put t at the end of the > list? > The t was a mistake, I thought it will make it return t. Member and memq have identical docstrings, so I actually don't know why this one. Changed to memq. > ! ; 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 '(".")))) > The remark about Windows is no longer true on the trunk, and I think > comments should explain better than that. In any case, this is a > completely separate issue, for which I will start a new thread. The remark about cdr is valid at the moment and answers the question that was here before, so I don't remove it. However if the remark about windows was missed, I cut it. Actually I discovered it some time ago and not verified lately. If you still want to strip the patch from some of the changes, please do. Attached the modified patch, the commit message could be: Shell completion for filenames from current directory, related docs. * doc/emacs/mini.texi (Completion Options): Add a link to Shell Options. * doc/emacs/misc.texi (Shell Mode): Move documentation of shell-completion-fignore from Shell Mode to Shell Options. * lisp/shell.el Shell completion now matches executable filenames from the current buffer's directory, on systems in which this behaviour is the default (windows-nt, ms-dos). * src/callproc.c (Vexec_path): Documentation of the library path in it. Jarek --------------020707030308010309090907 Content-Type: text/x-diff; name="complete_cur_dir_2_0.diff" Content-Transfer-Encoding: 8bit Content-Disposition: attachment; filename="complete_cur_dir_2_0.diff" === modified file 'doc/emacs/ChangeLog' *** doc/emacs/ChangeLog 2013-12-25 02:18:43 +0000 --- doc/emacs/ChangeLog 2013-12-26 21:30:14 +0000 *************** *** 1,3 **** --- 1,10 ---- + 2013-12-25 Jarek Czekalski + + * mini.texi (Completion Options): Add a link to Shell Options. + * misc.texi (Shell Mode): Move documentation of + shell-completion-fignore from Shell Mode to Shell Options. + + 2013-12-25 Xue Fuqiao * 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-26 22:21:42 +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, + @pxref{Shell 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-26 22:16:37 +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}). ! For options controlling the completion, @pxref{Shell Options}. @item M-? @kindex M-? @r{(Shell mode)} *************** the possible completions whenever comple *** 1179,1184 **** --- 1172,1191 ---- 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. + + @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. + @findex shell-pushd-tohome @findex shell-pushd-dextract @findex shell-pushd-dunique === modified file 'lisp/ChangeLog' *** lisp/ChangeLog 2013-12-24 19:48:40 +0000 --- lisp/ChangeLog 2013-12-26 22:08:26 +0000 *************** *** 1,3 **** --- 1,10 ---- + 2013-12-25 Jarek Czekalski + + * shell.el Shell completion now matches executable filenames from + the current buffer's directory, on systems in which this behaviour + is the default (windows-nt, ms-dos). + + 2013-12-24 Fabián Ezequiel Gallina * 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-26 22:24:11 +0000 *************** 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) --- 1112,1120 ---- 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', plus those that affect file completion. See Info ! node `Shell 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 --- 1139,1147 ---- (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' ! (path-dirs (append (cdr (reverse exec-path)) ! (if (memq system-type '(windows-nt ms-dos)) '(".")))) (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-26 21:25:24 +0000 *************** *** 1,3 **** --- 1,7 ---- + 2013-12-25 Jarek Czekalski + + * callproc.c (Vexec_path): Documentation of the library path in it. + 2013-12-24 Eli Zaretskii * 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. --------------020707030308010309090907--