From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#25082: [PATCH] Add support to emacsclient for command-lline options in ALTERNATE_EDITOR/--alternate-editor Date: Tue, 29 Aug 2017 18:43:48 +0300 Message-ID: <83val62xcb.fsf@gnu.org> References: <83val93vrk.fsf@gnu.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: blaine.gmane.org X-Trace: blaine.gmane.org 1504021521 8770 195.159.176.226 (29 Aug 2017 15:45:21 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Tue, 29 Aug 2017 15:45:21 +0000 (UTC) Cc: 25082@debbugs.gnu.org To: Reuben Thomas Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Aug 29 17:45:13 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dmihQ-0001c5-Jp for geb-bug-gnu-emacs@m.gmane.org; Tue, 29 Aug 2017 17:45:08 +0200 Original-Received: from localhost ([::1]:45595 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dmihW-0004OI-4o for geb-bug-gnu-emacs@m.gmane.org; Tue, 29 Aug 2017 11:45:14 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52199) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dmihQ-0004MO-Gu for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2017 11:45:09 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dmihL-0003Qd-SK for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2017 11:45:08 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:52184) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dmihL-0003QQ-Ob for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2017 11:45:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1dmihL-0000s3-E8 for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2017 11:45:03 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Aug 2017 15:45:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 25082 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 25082-submit@debbugs.gnu.org id=B25082.15040214503268 (code B ref 25082); Tue, 29 Aug 2017 15:45:02 +0000 Original-Received: (at 25082) by debbugs.gnu.org; 29 Aug 2017 15:44:10 +0000 Original-Received: from localhost ([127.0.0.1]:60865 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dmigT-0000qe-TG for submit@debbugs.gnu.org; Tue, 29 Aug 2017 11:44:10 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:60919) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dmigR-0000qR-RQ for 25082@debbugs.gnu.org; Tue, 29 Aug 2017 11:44:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dmigI-0002JN-2U for 25082@debbugs.gnu.org; Tue, 29 Aug 2017 11:44:02 -0400 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:42429) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dmigH-0002JF-Ut; Tue, 29 Aug 2017 11:43:57 -0400 Original-Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:4907 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1dmigG-00027t-GO; Tue, 29 Aug 2017 11:43:57 -0400 In-reply-to: (message from Reuben Thomas on Mon, 28 Aug 2017 11:15:55 +0100) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.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" Xref: news.gmane.org gmane.emacs.bugs:136322 Archived-At: > From: Reuben Thomas > Date: Mon, 28 Aug 2017 11:15:55 +0100 > Cc: Glenn Morris , 25082@debbugs.gnu.org > > >> Is this sufficient? > > > > It could be, but I'm not sure I understand clearly what is supported > > and what isn't. Could you please add this information to the NEWS > > entry and in more detail to the user manual? I think having these > > details in the manual is important regardless. > > I've added detail to NEWS. I am wary of adding more detail to the > manual, because it could prevent future improvements (for example, > implementation of quote escaping): we don't want users to rely on the > lack of quote escaping. We don't want them to rely on the lack of the escaping, but we also want to tell them what is supported and how. > @table @samp > @item -a @var{command} > @itemx --alternate-editor=@var{command} > Specify a command to run if @code{emacsclient} fails to contact Emacs. > This is useful when running @code{emacsclient} in a script. > > Note that this does not document the current situation precisely (a > user could be forgiven for thinking that "emacs -Q -nw" would already > work. Only if we say "shell command", not just "command". > +Arguments may be quoted, so that for example an absolute path > +containing a space may be specified; quote escaping is not supported. I would say `quoted "like this"', since otherwise it isn't clear what kind of quoting is supported. And I think something similar needs to be said in the manual. > + /* Unpack alternate_editor's space-separated tokens into new_argv. */ > + for (char *tok = s; tok != NULL && *tok != '\0';) > + { > + /* Allocate new token. */ > + ++toks; > + new_argv = xrealloc (new_argv, new_argv_size + toks * sizeof (char *)); > + > + /* Skip leading delimiters, and set separator, skipping any > + opening quote. */ > + size_t skip = strspn (tok, " \""); > + tok += skip; > + char sep = (skip > 0 && tok[-1] == '"') ? '"' : ' '; > + > + /* Record start of token. */ > + new_argv[toks - 1] = tok; > + > + /* Find end of token and overwrite it with NUL. */ > + tok = strchr (tok, sep); > + if (tok != NULL) > + *tok++ = '\0'; > + } > + > + /* Append main_argv arguments to new_argv. */ > + memcpy (&new_argv[toks], main_argv + optind, extra_args_size); > > - execvp (alternate_editor, main_argv + i); > + execvp (*new_argv, new_argv); This won't work on Windows, btw, if the arguments include whitespace. But that can be fixed by followup changes. Thanks.