From unknown Thu Aug 14 12:25:12 2025 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.509 (Entity 5.509) Content-Type: text/plain; charset=utf-8 From: bug#26894 <26894@debbugs.gnu.org> To: bug#26894 <26894@debbugs.gnu.org> Subject: Status: 25.1, 26.0.50; =?UTF-8?Q?=E2=80=98eshell/which=E2=80=99?= abuses =?UTF-8?Q?=E2=80=98describe-function=E2=80=99?= Reply-To: bug#26894 <26894@debbugs.gnu.org> Date: Thu, 14 Aug 2025 19:25:12 +0000 retitle 26894 25.1, 26.0.50; =E2=80=98eshell/which=E2=80=99 abuses =E2=80= =98describe-function=E2=80=99 reassign 26894 emacs submitter 26894 Dmitry Alexandrov <321942@gmail.com> severity 26894 minor tag 26894 fixed patch thanks From debbugs-submit-bounces@debbugs.gnu.org Thu May 11 22:19:10 2017 Received: (at submit) by debbugs.gnu.org; 12 May 2017 02:19:10 +0000 Received: from localhost ([127.0.0.1]:39500 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d90Ag-0008R2-Jo for submit@debbugs.gnu.org; Thu, 11 May 2017 22:19:10 -0400 Received: from eggs.gnu.org ([208.118.235.92]:43418) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d90Ae-0008Qm-Ks for submit@debbugs.gnu.org; Thu, 11 May 2017 22:19:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d90AY-0000zX-BO for submit@debbugs.gnu.org; Thu, 11 May 2017 22:19:03 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=0.8 required=5.0 tests=BAYES_50,FREEMAIL_FROM, T_DKIM_INVALID autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:37078) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d90AY-0000zO-8h for submit@debbugs.gnu.org; Thu, 11 May 2017 22:19:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34382) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d90AX-0000TY-07 for bug-gnu-emacs@gnu.org; Thu, 11 May 2017 22:19:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d90AT-0000xo-1m for bug-gnu-emacs@gnu.org; Thu, 11 May 2017 22:19:00 -0400 Received: from forward11h.cmail.yandex.net ([87.250.230.153]:39917) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1d90AS-0000wh-OH for bug-gnu-emacs@gnu.org; Thu, 11 May 2017 22:18:56 -0400 Received: from smtp3p.mail.yandex.net (smtp3p.mail.yandex.net [77.88.29.86]) by forward11h.cmail.yandex.net (Yandex) with ESMTP id 00A4A223E3 for ; Fri, 12 May 2017 05:18:54 +0300 (MSK) Received: from smtp3p.mail.yandex.net (localhost.localdomain [127.0.0.1]) by smtp3p.mail.yandex.net (Yandex) with ESMTP id DF7BD132009B for ; Fri, 12 May 2017 05:18:53 +0300 (MSK) Received: by smtp3p.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id H4Kgcxe0II-IrgKi78f; Fri, 12 May 2017 05:18:53 +0300 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client certificate not present) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ya.ru; s=mail; t=1494555533; bh=35MPTsu+KnL9IdQFE5tNuFzM8vHejCK+7VJdbHnfHVo=; h=From:To:Subject:Date:Message-ID; b=OFIc+b5ERn4nYJHrA3b2NI99R7ikkUlioU9v0mq5rRWEbCj6VMMYqTtGSF8dP0BJw EVPZdhcdOQuJyY/JWzRa/XQIA6mzoO+VrC7MK6j3unm9/NA42tvqKWXXpNeyuILGfh v/bjtd3HpyBj07JxrtRK3QuPMdiyBXmvMlZ86Lis= Authentication-Results: smtp3p.mail.yandex.net; dkim=pass header.i=@ya.ru X-Yandex-Suid-Status: 1 0 From: Dmitry Alexandrov <321942@gmail.com> To: bug-gnu-emacs@gnu.org Subject: 25.1, 26.0.50; =?utf-8?Q?=E2=80=98eshell=2Fwhich=E2=80=99?= abuses =?utf-8?Q?=E2=80=98describe-function=E2=80=99?= User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) Mail-Copies-To: always Date: Fri, 12 May 2017 05:18:52 +0300 Message-ID: <87d1belsvn.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-Spam-Score: -3.8 (---) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.8 (---) =E2=80=98eshell/which=E2=80=99 in its part, that locates built-in command= s (=E2=80=98$ which which=E2=80=99 for example) and elisp functions in ge= neral, looks like a dirty hack [0]: it calls interactive =E2=80=98describ= e-function=E2=80=99 command and parses *Help* buffer. I encounered two user-visible consequences of this, which perceived as bu= gs by me: =E2=80=94 When =E2=80=98*Help*=E2=80=99 buffer is configured to be shown = in a dedicated frame (e. g. (setq pop-up-frames t)), every =E2=80=98$ wh= ich =E2=80=99 generates a new frame and do not close it= . - When =E2=80=98*Help*=E2=80=98 buffer is already opened, =E2=80=98$ whic= h =E2=80=99: (1) raises the frame where it=E2=80=99s op= ened; (2) kills it, losing its history ([back] / [forward]). [0] http://git.sv.gnu.org/gitweb/?p=3Demacs.git;a=3Dblob;f=3Dlisp/eshell/= esh-cmd.el;hb=3Dcee4128#l1151 From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 03 22:49:30 2017 Received: (at 26894) by debbugs.gnu.org; 4 Jun 2017 02:49:30 +0000 Received: from localhost ([127.0.0.1]:54436 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dHLbd-0002BQ-Vq for submit@debbugs.gnu.org; Sat, 03 Jun 2017 22:49:30 -0400 Received: from mail-it0-f48.google.com ([209.85.214.48]:35699) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dHLbb-0002B4-Bj; Sat, 03 Jun 2017 22:49:27 -0400 Received: by mail-it0-f48.google.com with SMTP id m62so36419203itc.0; Sat, 03 Jun 2017 19:49:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=rWt39OzVwJqVWdWqOPhoMJk6QuRS6gAnupl/jeLkk6I=; b=QJ2swFBwigc3w8ZVa45YRVSwwlqMz0mFQGASLN7d9QSxtLG0DNmWaA7yhDw3Jcdi20 g1PGN7y2cGACcQMk/BoPMkzyuG4wOTRelb81+A/LazeaPYvZIl+ZFqNhWaEVZedOauBM qGAZkV4aHY/0N8sIBm70+h3lvwTsrZ16BK094Jc9UtHIyKe3bvnSJhEDyOJXJ/eUB2jZ mZEneuWY4AhhwexKuGTecTluGltK5/wEXEmDvwUMg8v75OE8UVvbDyH2Mqcz0EUbp/Bu //EWftYN4k6++iCXVvg1cSUulqijTZepzVMr4Wf2keeqlJYU8sIJtubmXJr9WqzwZbSf 5hOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=rWt39OzVwJqVWdWqOPhoMJk6QuRS6gAnupl/jeLkk6I=; b=fhJitnQHVOjkFFMmP/z93SPZixRJBQ3inyh4b0Vk4jxqKj0HysEPqJ5aD63L/PSSKR pZK5eZ/BHYLZQuKhw8Jfc7jpV8XhHgTc0QH01/w+M8CTUuMiqt2z4vpRv5j2zJLK5mj0 fyI7S/EkizS4bg212OIJPS4qvw/685DC2iuDwsCGilYFgIkEGOlt6OK5yBzcuAHH0eAR eg0HKA0ofRfr/DxeY4AKcLcwxbhjZ6BOrLlM7UPylTkpf0d7e7rwBxghuKuNxcvz7oIp dGCR8+nhCqRh8VACxAkgJFSjTUR2nS3GZ2kiesqZYSTszW1K6xr6EDBA6Elie/Ehv+xE uxaw== X-Gm-Message-State: AODbwcBU4W3ydpwg6/GyaAlTrGY29IXRD7i2JJMu54Hqt4QF+pemhgLf nNZys88qFBUlyZ3t X-Received: by 10.36.57.137 with SMTP id l131mr6584047ita.61.1496544561604; Sat, 03 Jun 2017 19:49:21 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id z191sm12131232iod.59.2017.06.03.19.49.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 03 Jun 2017 19:49:20 -0700 (PDT) From: npostavs@users.sourceforge.net To: Dmitry Alexandrov <321942@gmail.com> Subject: Re: bug#26894: 25.1, 26.0.50; =?utf-8?Q?=E2=80=98eshell=2Fwhich?= =?utf-8?Q?=E2=80=99?= abuses =?utf-8?Q?=E2=80=98describe-function?= =?utf-8?Q?=E2=80=99?= References: <87d1belsvn.fsf@gmail.com> Date: Sat, 03 Jun 2017 22:50:58 -0400 In-Reply-To: <87d1belsvn.fsf@gmail.com> (Dmitry Alexandrov's message of "Fri, 12 May 2017 05:18:52 +0300") Message-ID: <871sr01n59.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 26894 Cc: 26894@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.7 (/) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable tags 26894 patch quit Dmitry Alexandrov <321942@gmail.com> writes: > =E2=80=98eshell/which=E2=80=99 in its part, that locates built-in command= s (=E2=80=98$ which > which=E2=80=99 for example) and elisp functions in general, looks like a = dirty > hack [0]: it calls interactive =E2=80=98describe-function=E2=80=99 comman= d and parses > *Help* buffer. Yeah, that's not great. Here's a patch. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=v1-0001-Don-t-read-eshell-which-output-from-Help-buffer-B.patch Content-Description: patch >From d4e1da8e3384c67a91c0466a0a5b60f543195b81 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sat, 3 Jun 2017 22:15:19 -0400 Subject: [PATCH v1] Don't read eshell/which output from *Help* buffer (Bug#26894) * lisp/help-fns.el (help-fns--analyse-function) (describe-function-header): New functions, extracted from describe-function-1. (describe-function-1): Use them. * lisp/eshell/esh-cmd.el (eshell/which): Use `describe-function-header' instead of `describe-function-1'. --- lisp/eshell/esh-cmd.el | 31 ++++++--------- lisp/help-fns.el | 103 +++++++++++++++++++++++++++---------------------- 2 files changed, 69 insertions(+), 65 deletions(-) diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 86e7b83c28..91e41b7224 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1148,6 +1148,8 @@ (defun eshell-do-eval (form &optional synchronous-p) ;; command invocation +(declare-function describe-function-header "help-fns") + (defun eshell/which (command &rest names) "Identify the COMMAND, and where it is located." (dolist (name (cons command names)) @@ -1164,25 +1166,16 @@ (defun eshell/which (command &rest names) (concat name " is an alias, defined as \"" (cadr alias) "\""))) (unless program - (setq program (eshell-search-path name)) - (let* ((esym (eshell-find-alias-function name)) - (sym (or esym (intern-soft name)))) - (if (and (or esym (and sym (fboundp sym))) - (or eshell-prefer-lisp-functions (not direct))) - (let ((desc (let ((inhibit-redisplay t)) - (save-window-excursion - (prog1 - (describe-function sym) - (message nil)))))) - (setq desc (if desc (substring desc 0 - (1- (or (string-match "\n" desc) - (length desc)))) - ;; This should not happen. - (format "%s is defined, \ -but no documentation was found" name))) - (if (buffer-live-p (get-buffer "*Help*")) - (kill-buffer "*Help*")) - (setq program (or desc name)))))) + (setq program + (let* ((esym (eshell-find-alias-function name)) + (sym (or esym (intern-soft name)))) + (if (and (or esym (and sym (fboundp sym))) + (or eshell-prefer-lisp-functions (not direct))) + (require 'help-fns) + (or (with-output-to-string + (describe-function-header sym)) + name) + (eshell-search-path name))))) (if (not program) (eshell-error (format "which: no %s in (%s)\n" name (getenv "PATH"))) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 2c635ffa50..fd1dec19bf 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -560,8 +560,9 @@ (defun help-fns-short-filename (filename) (setq short rel)))) short)) -;;;###autoload -(defun describe-function-1 (function) +(defun help-fns--analyse-function (function) + "Return information about FUNCTION. +Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (let* ((advised (and (symbolp function) (featurep 'nadvice) (advice--p (advice--symbol-function function)))) @@ -594,22 +595,24 @@ (defun describe-function-1 (function) (setq f (symbol-function f))) f)) ((subrp def) (intern (subr-name def))) - (t def))) - (sig-key (if (subrp def) - (indirect-function real-def) - real-def)) - (file-name (find-lisp-object-file-name function (if aliased 'defun - def))) - (pt1 (with-current-buffer (help-buffer) (point))) - (beg (if (and (or (byte-code-function-p def) - (keymapp def) - (memq (car-safe def) '(macro lambda closure))) - (stringp file-name) - (help-fns--autoloaded-p function file-name)) - (if (commandp def) - "an interactive autoloaded " - "an autoloaded ") - (if (commandp def) "an interactive " "a ")))) + (t def)))) + (list real-function def aliased real-def))) + +(defun describe-function-header (function) + "Print a line describing FUNCTION to `standard-output'." + (pcase-let* ((`(,_real-function ,def ,aliased ,real-def) + (help-fns--analyse-function function)) + (file-name (find-lisp-object-file-name function (if aliased 'defun + def))) + (beg (if (and (or (byte-code-function-p def) + (keymapp def) + (memq (car-safe def) '(macro lambda closure))) + (stringp file-name) + (help-fns--autoloaded-p function file-name)) + (if (commandp def) + "an interactive autoloaded " + "an autoloaded ") + (if (commandp def) "an interactive " "a ")))) ;; Print what kind of function-like object FUNCTION is. (princ (cond ((or (stringp def) (vectorp def)) @@ -676,34 +679,42 @@ (defun describe-function-1 (function) (re-search-backward (substitute-command-keys "`\\([^`']+\\)'") nil t) (help-xref-button 1 'help-function-def function file-name)))) - (princ ".") - (with-current-buffer (help-buffer) - (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) - (point))) - (terpri)(terpri) - - (let ((doc-raw (documentation function t)) - (key-bindings-buffer (current-buffer))) - - ;; If the function is autoloaded, and its docstring has - ;; key substitution constructs, load the library. - (and (autoloadp real-def) doc-raw - help-enable-auto-load - (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]" doc-raw) - (autoload-do-load real-def)) - - (help-fns--key-bindings function) - (with-current-buffer standard-output - (let ((doc (help-fns--signature function doc-raw sig-key - real-function key-bindings-buffer))) - (run-hook-with-args 'help-fns-describe-function-functions function) - (insert "\n" - (or doc "Not documented.")) - ;; Avoid asking the user annoying questions if she decides - ;; to save the help buffer, when her locale's codeset - ;; isn't UTF-8. - (unless (memq text-quoting-style '(straight grave)) - (set-buffer-file-coding-system 'utf-8)))))))) + (princ ".")))) + +;;;###autoload +(defun describe-function-1 (function) + (let ((pt1 (with-current-buffer (help-buffer) (point)))) + (describe-function-header function) + (with-current-buffer (help-buffer) + (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) + (point)))) + (terpri)(terpri) + + (let ((doc-raw (documentation function t)) + (key-bindings-buffer (current-buffer))) + + ;; If the function is autoloaded, and its docstring has + ;; key substitution constructs, load the library. + (and (autoloadp real-def) doc-raw + help-enable-auto-load + (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]" doc-raw) + (autoload-do-load real-def)) + + (help-fns--key-bindings function) + (with-current-buffer standard-output + (pcase-let* ((`(,real-function ,def ,_aliased ,real-def) + (help-fns--analyse-function function)) + (doc (help-fns--signature + function doc-raw + (if (subrp def) (indirect-function real-def) real-def) + real-function key-bindings-buffer))) + (run-hook-with-args 'help-fns-describe-function-functions function) + (insert "\n" (or doc "Not documented."))) + ;; Avoid asking the user annoying questions if she decides + ;; to save the help buffer, when her locale's codeset + ;; isn't UTF-8. + (unless (memq text-quoting-style '(straight grave)) + (set-buffer-file-coding-system 'utf-8))))) ;; Add defaults to `help-fns-describe-function-functions'. (add-hook 'help-fns-describe-function-functions #'help-fns--obsolete) -- 2.11.1 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 03 23:46:20 2017 Received: (at 26894) by debbugs.gnu.org; 4 Jun 2017 03:46:21 +0000 Received: from localhost ([127.0.0.1]:54484 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dHMUe-0005Tf-Ih for submit@debbugs.gnu.org; Sat, 03 Jun 2017 23:46:20 -0400 Received: from mail-it0-f51.google.com ([209.85.214.51]:38103) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dHMUd-0005TR-1o for 26894@debbugs.gnu.org; Sat, 03 Jun 2017 23:46:19 -0400 Received: by mail-it0-f51.google.com with SMTP id r63so50349803itc.1 for <26894@debbugs.gnu.org>; Sat, 03 Jun 2017 20:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=JyMoj7Nzh56RFU763RGaNMxBXQOnNXq3sEHWGFU5gMs=; b=GIjgXsbgRPwekKd24Zwhs02VlKBu0d+5n0YPcelVpl6Vw5iJzKciIPKVa3/1MjkKE3 RnW6CJ7e7nPDVAva1BeePrbKeTTuZXVh6OZfloXIjerX8AMRK9MjX8e2ry36kWW77SIT E7SLXe0vPc7ScbWCFAO0hCy1qGPYOjux7balXSYzqcnPhPKyXT1Yd+uCwgv//0zhHx07 0ld7N8hvOWy1PKOxYt6TjGdpKezqcGE7lapDCMwG9pU0YT68Oa8Q6tJbrjaCxgTQAcum Vbi5o3KZCUKqzRpQ+OMqoYFyTs5imxKwBLPGLPXuuuxumQ49YdexdQeBo94kFofP0Vdo uZyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=JyMoj7Nzh56RFU763RGaNMxBXQOnNXq3sEHWGFU5gMs=; b=UGSpfpLUQKUGEtnagyx3djyKt5a+pQHpwNe8IuSYckjACBDIOKanOoyJBrMGhLlYuS zHDVg07v8rYYyJ+NDqQSnWYxJ1RBcIFh6ktz7UZytlLlI3vLUjNEILC/JFLGOIfidwzz M0XW8IKV/NJrijGAo/q5NZ+X1VjP1bIHX+DPn7zqF042+y7Twafm5OPQEKQwmMDpLmUt 4j91VJt1IRIKW4vHziPk9B0UQ03P4vT5qNw2SN/pgVp3dKFAceP68pLVtZ2/aHEC1zfX cnciaOl+plyZmIaJt/sAfoaGImwWTwf1Xp8Czzn5fxzHLeHkDzFCMaOSVfLdIzeclfzS Elgw== X-Gm-Message-State: AODbwcA+MntHWlE20K1VdspCSdIR9U7MXbxLNdtwxlp/9Lx71QAERqqt vVaK4tQoqVGqOR07 X-Received: by 10.36.254.66 with SMTP id w63mr2477035ith.54.1496547973341; Sat, 03 Jun 2017 20:46:13 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id w14sm3258449itb.28.2017.06.03.20.46.11 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 03 Jun 2017 20:46:12 -0700 (PDT) From: npostavs@users.sourceforge.net To: Dmitry Alexandrov <321942@gmail.com> Subject: Re: bug#26894: 25.1, 26.0.50; =?utf-8?Q?=E2=80=98eshell=2Fwhich?= =?utf-8?Q?=E2=80=99?= abuses =?utf-8?Q?=E2=80=98describe-function?= =?utf-8?Q?=E2=80=99?= References: <87d1belsvn.fsf@gmail.com> <871sr01n59.fsf@users.sourceforge.net> Date: Sat, 03 Jun 2017 23:47:50 -0400 In-Reply-To: <871sr01n59.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net's message of "Sat, 03 Jun 2017 22:50:58 -0400") Message-ID: <87shjgza55.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 26894 Cc: 26894@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.7 (/) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable npostavs@users.sourceforge.net writes: > Dmitry Alexandrov <321942@gmail.com> writes: > >> =E2=80=98eshell/which=E2=80=99 in its part, that locates built-in comman= ds (=E2=80=98$ which >> which=E2=80=99 for example) and elisp functions in general, looks like a= dirty >> hack [0]: it calls interactive =E2=80=98describe-function=E2=80=99 comma= nd and parses >> *Help* buffer. > > Yeah, that's not great. Here's a patch. Sorry, I sent a broken version, here's the right one. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=v2-0001-Don-t-read-eshell-which-output-from-Help-buffer-B.patch Content-Description: patch >From ce259d2b7518a6822f5e0271ccf66d0fb53e63a1 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sat, 3 Jun 2017 22:15:19 -0400 Subject: [PATCH v2] Don't read eshell/which output from *Help* buffer (Bug#26894) * lisp/help-fns.el (help-fns--analyse-function) (describe-function-header): New functions, extracted from describe-function-1. (describe-function-1): Use them. * lisp/eshell/esh-cmd.el (eshell/which): Use `describe-function-header' instead of `describe-function-1'. --- lisp/eshell/esh-cmd.el | 31 ++++++--------- lisp/help-fns.el | 103 +++++++++++++++++++++++++++---------------------- 2 files changed, 69 insertions(+), 65 deletions(-) diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 86e7b83c28..91e41b7224 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1148,6 +1148,8 @@ (defun eshell-do-eval (form &optional synchronous-p) ;; command invocation +(declare-function describe-function-header "help-fns") + (defun eshell/which (command &rest names) "Identify the COMMAND, and where it is located." (dolist (name (cons command names)) @@ -1164,25 +1166,16 @@ (defun eshell/which (command &rest names) (concat name " is an alias, defined as \"" (cadr alias) "\""))) (unless program - (setq program (eshell-search-path name)) - (let* ((esym (eshell-find-alias-function name)) - (sym (or esym (intern-soft name)))) - (if (and (or esym (and sym (fboundp sym))) - (or eshell-prefer-lisp-functions (not direct))) - (let ((desc (let ((inhibit-redisplay t)) - (save-window-excursion - (prog1 - (describe-function sym) - (message nil)))))) - (setq desc (if desc (substring desc 0 - (1- (or (string-match "\n" desc) - (length desc)))) - ;; This should not happen. - (format "%s is defined, \ -but no documentation was found" name))) - (if (buffer-live-p (get-buffer "*Help*")) - (kill-buffer "*Help*")) - (setq program (or desc name)))))) + (setq program + (let* ((esym (eshell-find-alias-function name)) + (sym (or esym (intern-soft name)))) + (if (and (or esym (and sym (fboundp sym))) + (or eshell-prefer-lisp-functions (not direct))) + (require 'help-fns) + (or (with-output-to-string + (describe-function-header sym)) + name) + (eshell-search-path name))))) (if (not program) (eshell-error (format "which: no %s in (%s)\n" name (getenv "PATH"))) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 2c635ffa50..66e06df677 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -560,8 +560,9 @@ (defun help-fns-short-filename (filename) (setq short rel)))) short)) -;;;###autoload -(defun describe-function-1 (function) +(defun help-fns--analyse-function (function) + "Return information about FUNCTION. +Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (let* ((advised (and (symbolp function) (featurep 'nadvice) (advice--p (advice--symbol-function function)))) @@ -594,22 +595,24 @@ (defun describe-function-1 (function) (setq f (symbol-function f))) f)) ((subrp def) (intern (subr-name def))) - (t def))) - (sig-key (if (subrp def) - (indirect-function real-def) - real-def)) - (file-name (find-lisp-object-file-name function (if aliased 'defun - def))) - (pt1 (with-current-buffer (help-buffer) (point))) - (beg (if (and (or (byte-code-function-p def) - (keymapp def) - (memq (car-safe def) '(macro lambda closure))) - (stringp file-name) - (help-fns--autoloaded-p function file-name)) - (if (commandp def) - "an interactive autoloaded " - "an autoloaded ") - (if (commandp def) "an interactive " "a ")))) + (t def)))) + (list real-function def aliased real-def))) + +(defun describe-function-header (function) + "Print a line describing FUNCTION to `standard-output'." + (pcase-let* ((`(,_real-function ,def ,aliased ,real-def) + (help-fns--analyse-function function)) + (file-name (find-lisp-object-file-name function (if aliased 'defun + def))) + (beg (if (and (or (byte-code-function-p def) + (keymapp def) + (memq (car-safe def) '(macro lambda closure))) + (stringp file-name) + (help-fns--autoloaded-p function file-name)) + (if (commandp def) + "an interactive autoloaded " + "an autoloaded ") + (if (commandp def) "an interactive " "a ")))) ;; Print what kind of function-like object FUNCTION is. (princ (cond ((or (stringp def) (vectorp def)) @@ -676,34 +679,42 @@ (defun describe-function-1 (function) (re-search-backward (substitute-command-keys "`\\([^`']+\\)'") nil t) (help-xref-button 1 'help-function-def function file-name)))) - (princ ".") - (with-current-buffer (help-buffer) - (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) - (point))) - (terpri)(terpri) - - (let ((doc-raw (documentation function t)) - (key-bindings-buffer (current-buffer))) - - ;; If the function is autoloaded, and its docstring has - ;; key substitution constructs, load the library. - (and (autoloadp real-def) doc-raw - help-enable-auto-load - (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]" doc-raw) - (autoload-do-load real-def)) - - (help-fns--key-bindings function) - (with-current-buffer standard-output - (let ((doc (help-fns--signature function doc-raw sig-key - real-function key-bindings-buffer))) - (run-hook-with-args 'help-fns-describe-function-functions function) - (insert "\n" - (or doc "Not documented.")) - ;; Avoid asking the user annoying questions if she decides - ;; to save the help buffer, when her locale's codeset - ;; isn't UTF-8. - (unless (memq text-quoting-style '(straight grave)) - (set-buffer-file-coding-system 'utf-8)))))))) + (princ ".")))) + +;;;###autoload +(defun describe-function-1 (function) + (let ((pt1 (with-current-buffer (help-buffer) (point)))) + (describe-function-header function) + (with-current-buffer (help-buffer) + (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) + (point)))) + (terpri)(terpri) + + (pcase-let ((`(,real-function ,def ,_aliased ,real-def) + (help-fns--analyse-function function)) + (doc-raw (documentation function t)) + (key-bindings-buffer (current-buffer))) + + ;; If the function is autoloaded, and its docstring has + ;; key substitution constructs, load the library. + (and (autoloadp real-def) doc-raw + help-enable-auto-load + (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]" doc-raw) + (autoload-do-load real-def)) + + (help-fns--key-bindings function) + (with-current-buffer standard-output + (let ((doc (help-fns--signature + function doc-raw + (if (subrp def) (indirect-function real-def) real-def) + real-function key-bindings-buffer))) + (run-hook-with-args 'help-fns-describe-function-functions function) + (insert "\n" (or doc "Not documented."))) + ;; Avoid asking the user annoying questions if she decides + ;; to save the help buffer, when her locale's codeset + ;; isn't UTF-8. + (unless (memq text-quoting-style '(straight grave)) + (set-buffer-file-coding-system 'utf-8))))) ;; Add defaults to `help-fns-describe-function-functions'. (add-hook 'help-fns-describe-function-functions #'help-fns--obsolete) -- 2.11.1 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Sat Jun 24 16:19:18 2017 Received: (at 26894) by debbugs.gnu.org; 24 Jun 2017 20:19:18 +0000 Received: from localhost ([127.0.0.1]:35981 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dOrWX-0001Tx-RL for submit@debbugs.gnu.org; Sat, 24 Jun 2017 16:19:18 -0400 Received: from mail-it0-f48.google.com ([209.85.214.48]:36456) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dOrWV-0001Ti-9Y for 26894@debbugs.gnu.org; Sat, 24 Jun 2017 16:19:15 -0400 Received: by mail-it0-f48.google.com with SMTP id m68so5273564ith.1 for <26894@debbugs.gnu.org>; Sat, 24 Jun 2017 13:19:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=w5Mo5p/YjVKDqGavkEmrPBx/Sks6xlgc9NiGzObacp4=; b=EL27h/MWWLmqmKqm1iFulgB2QDk4ciZJdrlu3wwKo64zpigr1Aq4YAlIq4fgfksDMr uYKugqSkesCHWiQ3Cz5ZB2JIrW6+rWXiI9R+Y6Ib4t08GZflLs0vfXwUg4EKkyT1P182 uq4gVlTIsE5lGCfE0AONdyzuFy1oNsIC0d8GDSf9wqDvyD2sIFyI00OVePf6xxPpTMaB tohdqv5jALmCD2iB9Js5wls72vSiiMW+o8XHbhvZY9uIG0OAbzjOTLPazgfqkpBgsWd6 vPa5EiNlMLzf5S5P///YW1nNsytHPcwr2d0OoBPC0Q2N/Lo+ac7ztmo9AaSY7IkGol5D OElg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=w5Mo5p/YjVKDqGavkEmrPBx/Sks6xlgc9NiGzObacp4=; b=rYDI/+sYmIZFAV9gsLKJgvUkK0/VbxcG5OkXUQ7/lrnVARVIMwbzg09miXayphuiPo L+iOpIKIQKcumgvdlfD7GOellberNiSV8Y6KgsRmjrygx++fI7pt8DS155lz3E4OTdKU kPyvj8XduaVFlqNzslz2UG7C2Ikw9sooZ+qTA8GMQuZrgVf3rK4JzyihbLEK+6eT/jWe iBTtjFW2Hc0pzB+dYAtoXT5Ugjtx1f5+mAKGNfxsXxxEwHuVe7gxIUV/8Uh8vQ7aF16h OQnsbU8C8SqOR1/JjpeKKayNu9vCT+FR5Sj/MffibloLLmLxqhXxv4pYgSg2Ltgk/u2N bxVQ== X-Gm-Message-State: AKS2vOzlRQnQBQyXVJwxEms6Q5Mvs9D9DZ9sgagfoCpPSKkCG8CjdHZr jFCmn0zj8d9unNgY X-Received: by 10.36.127.208 with SMTP id r199mr14724585itc.110.1498335549694; Sat, 24 Jun 2017 13:19:09 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id u186sm5287545ita.3.2017.06.24.13.19.08 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 24 Jun 2017 13:19:08 -0700 (PDT) From: npostavs@users.sourceforge.net To: Dmitry Alexandrov <321942@gmail.com> Subject: Re: bug#26894: 25.1, 26.0.50; =?utf-8?Q?=E2=80=98eshell=2Fwhich?= =?utf-8?Q?=E2=80=99?= abuses =?utf-8?Q?=E2=80=98describe-function?= =?utf-8?Q?=E2=80=99?= References: <87d1belsvn.fsf@gmail.com> <871sr01n59.fsf@users.sourceforge.net> <87shjgza55.fsf@users.sourceforge.net> Date: Sat, 24 Jun 2017 16:20:46 -0400 In-Reply-To: <87shjgza55.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net's message of "Sat, 03 Jun 2017 23:47:50 -0400") Message-ID: <87tw35p275.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 26894 Cc: 26894@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.7 (/) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable npostavs@users.sourceforge.net writes: > npostavs@users.sourceforge.net writes: > >> Dmitry Alexandrov <321942@gmail.com> writes: >> >>> =E2=80=98eshell/which=E2=80=99 in its part, that locates built-in comma= nds (=E2=80=98$ which >>> which=E2=80=99 for example) and elisp functions in general, looks like = a dirty >>> hack [0]: it calls interactive =E2=80=98describe-function=E2=80=99 comm= and and parses >>> *Help* buffer. >> >> Yeah, that's not great. Here's a patch. > > Sorry, I sent a broken version, here's the right one. Um, 3rd time's the charm? --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=v3-0001-Don-t-read-eshell-which-output-from-Help-buffer-B.patch Content-Description: patch >From bb5022bb6dac31ee5a0b14b9b2764a2b61fbffb6 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sat, 3 Jun 2017 22:15:19 -0400 Subject: [PATCH v3] Don't read eshell/which output from *Help* buffer (Bug#26894) * lisp/help-fns.el (help-fns--analyse-function) (help-fns-function-description-header): New functions, extracted from describe-function-1. (describe-function-1): Use them. * lisp/eshell/esh-cmd.el (eshell/which): Use `help-fns-function-description-header' instead of `describe-function-1'. --- lisp/eshell/esh-cmd.el | 32 +++++++-------- lisp/help-fns.el | 103 +++++++++++++++++++++++++++---------------------- 2 files changed, 70 insertions(+), 65 deletions(-) diff --git a/lisp/eshell/esh-cmd.el b/lisp/eshell/esh-cmd.el index 86e7b83c28..2434220877 100644 --- a/lisp/eshell/esh-cmd.el +++ b/lisp/eshell/esh-cmd.el @@ -1148,6 +1148,8 @@ (defun eshell-do-eval (form &optional synchronous-p) ;; command invocation +(declare-function help-fns-function-description-header "help-fns") + (defun eshell/which (command &rest names) "Identify the COMMAND, and where it is located." (dolist (name (cons command names)) @@ -1164,25 +1166,17 @@ (defun eshell/which (command &rest names) (concat name " is an alias, defined as \"" (cadr alias) "\""))) (unless program - (setq program (eshell-search-path name)) - (let* ((esym (eshell-find-alias-function name)) - (sym (or esym (intern-soft name)))) - (if (and (or esym (and sym (fboundp sym))) - (or eshell-prefer-lisp-functions (not direct))) - (let ((desc (let ((inhibit-redisplay t)) - (save-window-excursion - (prog1 - (describe-function sym) - (message nil)))))) - (setq desc (if desc (substring desc 0 - (1- (or (string-match "\n" desc) - (length desc)))) - ;; This should not happen. - (format "%s is defined, \ -but no documentation was found" name))) - (if (buffer-live-p (get-buffer "*Help*")) - (kill-buffer "*Help*")) - (setq program (or desc name)))))) + (setq program + (let* ((esym (eshell-find-alias-function name)) + (sym (or esym (intern-soft name)))) + (if (and (or esym (and sym (fboundp sym))) + (or eshell-prefer-lisp-functions (not direct))) + (or (with-output-to-string + (require 'help-fns) + (princ (format "%s is " sym)) + (help-fns-function-description-header sym)) + name) + (eshell-search-path name))))) (if (not program) (eshell-error (format "which: no %s in (%s)\n" name (getenv "PATH"))) diff --git a/lisp/help-fns.el b/lisp/help-fns.el index 2c635ffa50..32324ae3bc 100644 --- a/lisp/help-fns.el +++ b/lisp/help-fns.el @@ -560,8 +560,9 @@ (defun help-fns-short-filename (filename) (setq short rel)))) short)) -;;;###autoload -(defun describe-function-1 (function) +(defun help-fns--analyse-function (function) + "Return information about FUNCTION. +Returns a list of the form (REAL-FUNCTION DEF ALIASED REAL-DEF)." (let* ((advised (and (symbolp function) (featurep 'nadvice) (advice--p (advice--symbol-function function)))) @@ -594,22 +595,24 @@ (defun describe-function-1 (function) (setq f (symbol-function f))) f)) ((subrp def) (intern (subr-name def))) - (t def))) - (sig-key (if (subrp def) - (indirect-function real-def) - real-def)) - (file-name (find-lisp-object-file-name function (if aliased 'defun - def))) - (pt1 (with-current-buffer (help-buffer) (point))) - (beg (if (and (or (byte-code-function-p def) - (keymapp def) - (memq (car-safe def) '(macro lambda closure))) - (stringp file-name) - (help-fns--autoloaded-p function file-name)) - (if (commandp def) - "an interactive autoloaded " - "an autoloaded ") - (if (commandp def) "an interactive " "a ")))) + (t def)))) + (list real-function def aliased real-def))) + +(defun help-fns-function-description-header (function) + "Print a line describing FUNCTION to `standard-output'." + (pcase-let* ((`(,_real-function ,def ,aliased ,real-def) + (help-fns--analyse-function function)) + (file-name (find-lisp-object-file-name function (if aliased 'defun + def))) + (beg (if (and (or (byte-code-function-p def) + (keymapp def) + (memq (car-safe def) '(macro lambda closure))) + (stringp file-name) + (help-fns--autoloaded-p function file-name)) + (if (commandp def) + "an interactive autoloaded " + "an autoloaded ") + (if (commandp def) "an interactive " "a ")))) ;; Print what kind of function-like object FUNCTION is. (princ (cond ((or (stringp def) (vectorp def)) @@ -676,34 +679,42 @@ (defun describe-function-1 (function) (re-search-backward (substitute-command-keys "`\\([^`']+\\)'") nil t) (help-xref-button 1 'help-function-def function file-name)))) - (princ ".") - (with-current-buffer (help-buffer) - (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) - (point))) - (terpri)(terpri) - - (let ((doc-raw (documentation function t)) - (key-bindings-buffer (current-buffer))) - - ;; If the function is autoloaded, and its docstring has - ;; key substitution constructs, load the library. - (and (autoloadp real-def) doc-raw - help-enable-auto-load - (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]" doc-raw) - (autoload-do-load real-def)) - - (help-fns--key-bindings function) - (with-current-buffer standard-output - (let ((doc (help-fns--signature function doc-raw sig-key - real-function key-bindings-buffer))) - (run-hook-with-args 'help-fns-describe-function-functions function) - (insert "\n" - (or doc "Not documented.")) - ;; Avoid asking the user annoying questions if she decides - ;; to save the help buffer, when her locale's codeset - ;; isn't UTF-8. - (unless (memq text-quoting-style '(straight grave)) - (set-buffer-file-coding-system 'utf-8)))))))) + (princ ".")))) + +;;;###autoload +(defun describe-function-1 (function) + (let ((pt1 (with-current-buffer (help-buffer) (point)))) + (help-fns-function-description-header function) + (with-current-buffer (help-buffer) + (fill-region-as-paragraph (save-excursion (goto-char pt1) (forward-line 0) (point)) + (point)))) + (terpri)(terpri) + + (pcase-let ((`(,real-function ,def ,_aliased ,real-def) + (help-fns--analyse-function function)) + (doc-raw (documentation function t)) + (key-bindings-buffer (current-buffer))) + + ;; If the function is autoloaded, and its docstring has + ;; key substitution constructs, load the library. + (and (autoloadp real-def) doc-raw + help-enable-auto-load + (string-match "\\([^\\]=\\|[^=]\\|\\`\\)\\\\[[{<]" doc-raw) + (autoload-do-load real-def)) + + (help-fns--key-bindings function) + (with-current-buffer standard-output + (let ((doc (help-fns--signature + function doc-raw + (if (subrp def) (indirect-function real-def) real-def) + real-function key-bindings-buffer))) + (run-hook-with-args 'help-fns-describe-function-functions function) + (insert "\n" (or doc "Not documented."))) + ;; Avoid asking the user annoying questions if she decides + ;; to save the help buffer, when her locale's codeset + ;; isn't UTF-8. + (unless (memq text-quoting-style '(straight grave)) + (set-buffer-file-coding-system 'utf-8))))) ;; Add defaults to `help-fns-describe-function-functions'. (add-hook 'help-fns-describe-function-functions #'help-fns--obsolete) -- 2.11.1 --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Tue Jun 27 20:36:43 2017 Received: (at 26894) by debbugs.gnu.org; 28 Jun 2017 00:36:43 +0000 Received: from localhost ([127.0.0.1]:41315 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dQ0yJ-0007o3-L1 for submit@debbugs.gnu.org; Tue, 27 Jun 2017 20:36:43 -0400 Received: from mail-io0-f193.google.com ([209.85.223.193]:34306) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dQ0yH-0007ni-Tt; Tue, 27 Jun 2017 20:36:42 -0400 Received: by mail-io0-f193.google.com with SMTP id m19so4018756ioe.1; Tue, 27 Jun 2017 17:36:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=DPrXMKlAun/wHsU1NJf5WjQ1dwBr4GxVfNuujTDVtPs=; b=Okckb1/eBpVrw8peTkbJvl7ZYoCZTocw0Wmaf7tmBv9fB8/ZS67qiiL8pCIW9PvPWx IZImFlHb0vRQqw/VHJ7eCX7Tr9ZiC1BAEtgOoE6ank/+Cky+VWh7igl+2U4iyUqTtCxO Mm9+o8CmMRY897Gm/Tls24LM0VcUcDFaJQ5gu1d1BnbWK+hgRRZYdUDuw5UOhVIJkSg0 ckIUjplsZnSe9Md4m78eavm85dqj01e16ypoBukr8WssgO/v6a1Ms/QgEin/Efl2g4i5 sS/Sa/0N/+XAe7Favby3XCcFE0CthWugAQTdohxqENQvkGRtTJJ5G5bZeq78rj63rL2E opyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=DPrXMKlAun/wHsU1NJf5WjQ1dwBr4GxVfNuujTDVtPs=; b=LzZipNO33nf1n8p9HAvxrNSdMdi4kFt+QYbFLoPZilJDp5uiPMiMad/CPARJiyAddU 2pVP+IT8QBpsyP+LzB4px4mGmgFjT0bbAdCGs/45ArVR5ULShaULYRVyycutS/BtFu1Y DHVMuJHGz9ZoRQ0EG7Z4SxgNoINXdpIS9S+E5fXGePHL5eoQCetpjUL5JHlnrGqi6rYo yg24Xq2r6g8ngWD8TtOBej6PsxX2SfZEopVUCyl5bQN4jdN+gpK5MtOsVu3mqBAa+K9V POOPl7ag0gwgbyqee4VhXCq4ibxdvZCbydOsib9xOYY1BpsOlGnHsr79bVJxedL2jhhN d0Sw== X-Gm-Message-State: AKS2vOxbK1I8L4G9LmlQNY8AMdLnFJ3lykxtY1o4PEPxsjBjdaWikDAp yZ/lu8r2sqbazFRR X-Received: by 10.107.157.76 with SMTP id g73mr9360035ioe.119.1498610196316; Tue, 27 Jun 2017 17:36:36 -0700 (PDT) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id m2sm2116932iti.26.2017.06.27.17.36.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 27 Jun 2017 17:36:35 -0700 (PDT) From: npostavs@users.sourceforge.net To: Dmitry Alexandrov <321942@gmail.com> Subject: Re: bug#26894: 25.1, 26.0.50; =?utf-8?Q?=E2=80=98eshell=2Fwhich?= =?utf-8?Q?=E2=80=99?= abuses =?utf-8?Q?=E2=80=98describe-function?= =?utf-8?Q?=E2=80=99?= References: <87d1belsvn.fsf@gmail.com> <871sr01n59.fsf@users.sourceforge.net> <87shjgza55.fsf@users.sourceforge.net> <87tw35p275.fsf@users.sourceforge.net> Date: Tue, 27 Jun 2017 20:38:11 -0400 In-Reply-To: <87tw35p275.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net's message of "Sat, 24 Jun 2017 16:20:46 -0400") Message-ID: <8737alndzg.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.1 (--) X-Debbugs-Envelope-To: 26894 Cc: 26894@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.1 (--) tags 26894 fixed close 26894 26.1 quit > Um, 3rd time's the charm? Pushed to master: [1: 2d992690de]. [1: 2d992690de]: 2017-06-27 20:34:14 -0400 Don't read eshell/which output from *Help* buffer (Bug#26894) http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=2d992690de5bcb2036eeb4d2854761596b863704 From unknown Thu Aug 14 12:25:12 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Wed, 26 Jul 2017 11:24:04 +0000 User-Agent: Fakemail v42.6.9 # This is a fake control message. # # The action: # bug archived. thanks # This fakemail brought to you by your local debbugs # administrator