From unknown Sat Jun 21 03:26:33 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#53981 <53981@debbugs.gnu.org> To: bug#53981 <53981@debbugs.gnu.org> Subject: Status: 28.0.91; shortdoc: Add support for outline-minor-mode Reply-To: bug#53981 <53981@debbugs.gnu.org> Date: Sat, 21 Jun 2025 10:26:33 +0000 retitle 53981 28.0.91; shortdoc: Add support for outline-minor-mode reassign 53981 emacs submitter 53981 Daniel Mendler severity 53981 wishlist thanks From debbugs-submit-bounces@debbugs.gnu.org Sun Feb 13 17:39:38 2022 Received: (at submit) by debbugs.gnu.org; 13 Feb 2022 22:39:38 +0000 Received: from localhost ([127.0.0.1]:39115 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJNWs-0006dk-Dh for submit@debbugs.gnu.org; Sun, 13 Feb 2022 17:39:38 -0500 Received: from lists.gnu.org ([209.51.188.17]:45900) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJNWq-0006dc-Hd for submit@debbugs.gnu.org; Sun, 13 Feb 2022 17:39:37 -0500 Received: from eggs.gnu.org ([209.51.188.92]:51010) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nJNWp-00066Z-Mm for bug-gnu-emacs@gnu.org; Sun, 13 Feb 2022 17:39:35 -0500 Received: from [2a01:4f8:121:346::180] (port=56455 helo=mail.qxqx.de) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nJNWn-0001xH-HV for bug-gnu-emacs@gnu.org; Sun, 13 Feb 2022 17:39:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Content-Transfer-Encoding:Content-Type:Subject:From:To: MIME-Version:Date:Message-ID:Sender:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=DN51lmZmeziLO2cbg9EKMsoASyNgh7O9q2QlX/qieHc=; b=JCW+KFwdRNV/efleYnoPgif+CF Of0ltrujVem82VfZ6Pr9rDXiFv0TX7HrvZbtONdbKqD98TmVBTO7tSQdR96XO7rITeGtn3za3IWsB 0pvgrYLv3JR6/uxtGpj5tV/BoFb63NSbA+RdFjZ/XmT+Fi+OO1xYDtYbfPUL/BNCle6I=; Message-ID: Date: Sun, 13 Feb 2022 23:39:11 +0100 MIME-Version: 1.0 Content-Language: en-US To: bug-gnu-emacs@gnu.org From: Daniel Mendler Subject: 28.0.91; shortdoc: Add support for outline-minor-mode Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a01:4f8:121:346::180 (failed) Received-SPF: pass client-ip=2a01:4f8:121:346::180; envelope-from=mail@daniel-mendler.de; helo=mail.qxqx.de X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_MED=-2.3, RDNS_NONE=0.793, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: -1.4 (-) 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: -2.4 (--) The shortdoc buffer currently lacks support for the outline-minor-mode. By setting the two variables outline-regexp and outline-level, we can unlock this feature. Does it make sense to provide this by default? (defun shortdoc--outline-level () (if (eq (char-after) ?\() 2 1))) (add-hook 'shortdoc-mode-hook (lambda () (setq-local outline-level #'shortdoc--outline-level outline-regexp "[A-Z(]"))) In GNU Emacs 28.0.91 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.5, cairo version 1.16.0) of 2022-02-09 built on projects Repository revision: 82e74e4559b8becd44f3e7ac0134e2baddd69921 Repository branch: emacs-28 Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: Debian GNU/Linux 10 (buster) From debbugs-submit-bounces@debbugs.gnu.org Mon Feb 14 06:06:37 2022 Received: (at 53981) by debbugs.gnu.org; 14 Feb 2022 11:06:37 +0000 Received: from localhost ([127.0.0.1]:40026 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJZBl-0007Qi-29 for submit@debbugs.gnu.org; Mon, 14 Feb 2022 06:06:37 -0500 Received: from quimby.gnus.org ([95.216.78.240]:35274) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJZBi-0007QM-Dw for 53981@debbugs.gnu.org; Mon, 14 Feb 2022 06:06:35 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=JygFS0YNU7wtpL74t4Jvnk0Z9KPDFZTwrp27jtMrUm4=; b=UHvcqd6L1ZaYoIwrPlXINm9tU/ xHc5iQG4wI14pM32a4Vxz1qgdH15WO1yeOlk5uhV2ldcfbpHsB+4mfBL8iVOfXkYQWQY0ecoiGS0B ppS57dfmPGtZuwkxfJhuBp5OA3b0CqPOZZXQrKBmjlU44Ei/zl1fvyP4VM9VpBgPr6vY=; Received: from [84.212.220.105] (helo=giant) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nJZBZ-0007DD-Tx; Mon, 14 Feb 2022 12:06:28 +0100 From: Lars Ingebrigtsen To: Daniel Mendler Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: X-Now-Playing: Whipped Cream's _Still in a Dream (3)_: "Explosion" Date: Mon, 14 Feb 2022 12:06:25 +0100 In-Reply-To: (Daniel Mendler's message of "Sun, 13 Feb 2022 23:39:11 +0100") Message-ID: <87czjpso5q.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Daniel Mendler writes: > The shortdoc buffer currently lacks support for the outline-minor-mode. > By setting the two variables outline-regexp and outline-level, we can > unlock this feature. Does it make sense to provide t [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.0 DC_PNG_UNO_LARGO Message contains a single large png image X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@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: -3.3 (---) --=-=-= Content-Type: text/plain Daniel Mendler writes: > The shortdoc buffer currently lacks support for the outline-minor-mode. > By setting the two variables outline-regexp and outline-level, we can > unlock this feature. Does it make sense to provide this by default? > > (defun shortdoc--outline-level () (if (eq (char-after) ?\() 2 1))) > (add-hook 'shortdoc-mode-hook > (lambda () > (setq-local outline-level #'shortdoc--outline-level > outline-regexp "[A-Z(]"))) I tried the following: diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index 658edd6752..fd79cf5116 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -1435,7 +1435,10 @@ shortdoc-mode-map (define-derived-mode shortdoc-mode special-mode "shortdoc" "Mode for shortdoc." - :interactive nil) + :interactive nil + (setq-local outline-level (lambda () + (if (eq (char-after) ?\() 2 1)) + outline-regexp "[A-Z(]")) (defun shortdoc--goto-section (arg sym &optional reverse) (unless (natnump arg) But then hiding levels made the display pretty weird: --=-=-= Content-Type: image/png Content-Disposition: inline Content-Transfer-Encoding: base64 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 5fmqV5+ZAAAAAElFTkSuQmCC --=-=-= Content-Type: text/plain So if we want that, it needs more work. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Feb 14 07:24:11 2022 Received: (at 53981) by debbugs.gnu.org; 14 Feb 2022 12:24:11 +0000 Received: from localhost ([127.0.0.1]:40097 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJaOp-0003R6-Gs for submit@debbugs.gnu.org; Mon, 14 Feb 2022 07:24:11 -0500 Received: from server.qxqx.de ([178.63.65.180]:59677 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJaOk-0003QQ-Qg for 53981@debbugs.gnu.org; Mon, 14 Feb 2022 07:24:10 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Q1+iKejtcEm1jIkyYRxOrqJ8uylFH3B4uO2Tgoim1cM=; b=IwrrzTY0Uq1yPV1FW5vaxz1cF4 fUbDkSY8mpifE0OLSWUevAF/rEz0/7YbEzyQaacl7kHwVNc9tee1gp58eEYy46OGX1WpgBmEHNjdZ 1BVt1mV8BEA+XNHSNiyABZO3uLzzqGLgHZnwkDzqkCDff2x+2gWp2L0c1CRAP4daYwhQ=; Message-ID: <266fd04d-b3c7-2eec-82b2-dbece8988704@daniel-mendler.de> Date: Mon, 14 Feb 2022 13:23:58 +0100 MIME-Version: 1.0 Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode Content-Language: en-US To: Lars Ingebrigtsen References: <87czjpso5q.fsf@gnus.org> From: Daniel Mendler In-Reply-To: <87czjpso5q.fsf@gnus.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@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: -3.3 (---) On 2/14/22 12:06, Lars Ingebrigtsen wrote: > I tried the following: > ...> But then hiding levels made the display pretty weird: > > So if we want that, it needs more work. I see. This looks indeed not that good due to the newly introduced `separator-line` face. I use a different setting for the `separator-line` in my configuration, which has only a height of a single pixel by using the `:underline` face attribute: (set-face-attribute 'separator-line nil :inherit 'shadow :background nil :underline t :height 1) With this setting, the separator line generally looks better and less obtrusive. So we may want to consider using no background and `:underline t` instead? With outline mode folding the separator line is still visible, but doesn't disturb the visuals so severely. Daniel From debbugs-submit-bounces@debbugs.gnu.org Mon Feb 14 09:18:26 2022 Received: (at 53981) by debbugs.gnu.org; 14 Feb 2022 14:18:26 +0000 Received: from localhost ([127.0.0.1]:40381 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJcBO-00057k-54 for submit@debbugs.gnu.org; Mon, 14 Feb 2022 09:18:26 -0500 Received: from quimby.gnus.org ([95.216.78.240]:36934) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJcBJ-00057Q-6z for 53981@debbugs.gnu.org; Mon, 14 Feb 2022 09:18:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=2hW4HVWTCyPa0OX+rgaEzWwEGb/1Ucykab37Jj3pvaA=; b=DI3HsraqcuJZg5E66ekQNTNtxs mbuTfAsFsfdDIic+1H+AtzXoDStyg5MjApI+X1kBDIf9aT/evKX+lCrrCSKM3QYU6ZhO5/Ct5wGPQ gw5FImAala4tZLGySghtsvtbEs0smODKiEQOXZpbB+NzUCudPhXzosOJo3hrnQxYpjMU=; Received: from [84.212.220.105] (helo=giant) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nJcBA-0000If-1f; Mon, 14 Feb 2022 15:18:14 +0100 From: Lars Ingebrigtsen To: Daniel Mendler Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <87czjpso5q.fsf@gnus.org> <266fd04d-b3c7-2eec-82b2-dbece8988704@daniel-mendler.de> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAD1BMVEVMQk6Zgm/07uPJ uqf///8KMbFVAAAAAWJLR0QEj2jZUQAAAAd0SU1FB+YCDg4QLZNVFUIAAAG2SURBVDjLdZQBsuQg CETxewGVC/zABRTuf7eF1mQyW7vWlJXxjdANZIioiEij0shUPotuUAPIN6giGjuR/AWGyEXEeTNi TeJGPzeYRI6QFo99HmCZghaABijrDcqVuURt9e5uCQpyl98A7vHs/gXqpKqpN4ECVIgKGxUyA6jf YL5A/KgzwIAophv0VvoBTmnjgNUatZGA/Rv0WADui9IGDEpI3jWmoh65y/oPqAlh46luVW8H4NCz lJcJsWbuG5hU0TV63GCL8NmDACY+RxuXpyqI2iDCrLJKVEUAZtoAUOmdx85Dbi/gqDCqHDfaNk7F sx/7E+XzfYbN0CI1HVch1xvUbIS5mP6oM0FUVWzquvo1rvR4wKbOkxejMgFSFCcg7dzMMaiXENT2 nolycmAuhcEB1V8oiJ7tG+EEDmhMDLcm4O1kA1xj30tlpXOk5bkB7zrk5AAUKBiYzgfkUdH8OhBo 9ReoLxCD3zFwUPtK3sLUHlEASHtumBwwAOwB/g1wHvp61zuUfwC3GN31gPXJgaH+B1jYjtzyBpBk BoMFzYohsehsvhuWICf6ANMT//yXPMD7C/wBIQFxXoGyh8kAAAAldEVYdGRhdGU6Y3JlYXRlADIw MjItMDItMTRUMTQ6MTY6NDUrMDA6MDBCuyt9AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTE0 VDE0OjE2OjQ1KzAwOjAwM+aTwQAAAABJRU5ErkJggg== X-Now-Playing: Dry Cleaning's _New Long Leg_: "New Long Leg" Date: Mon, 14 Feb 2022 15:18:11 +0100 In-Reply-To: <266fd04d-b3c7-2eec-82b2-dbece8988704@daniel-mendler.de> (Daniel Mendler's message of "Mon, 14 Feb 2022 13:23:58 +0100") Message-ID: <87o839r0po.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Daniel Mendler writes: > With this setting, the separator line generally looks better and less > obtrusive. So we may want to consider using no background and > `:underline t` instead? With outline mode folding the separato [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@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: -3.3 (---) Daniel Mendler writes: > With this setting, the separator line generally looks better and less > obtrusive. So we may want to consider using no background and > `:underline t` instead? With outline mode folding the separator line is > still visible, but doesn't disturb the visuals so severely. I think the separator line looks fine the way it is, so if we're to enable outline-minor-mode in that buffer, the outlining will have to be adjusted to take that into account. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Mon Feb 14 09:30:10 2022 Received: (at 53981) by debbugs.gnu.org; 14 Feb 2022 14:30:10 +0000 Received: from localhost ([127.0.0.1]:40398 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJcMj-0005Vh-Fg for submit@debbugs.gnu.org; Mon, 14 Feb 2022 09:30:09 -0500 Received: from server.qxqx.de ([178.63.65.180]:60299 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJcMh-0005QQ-5A for 53981@debbugs.gnu.org; Mon, 14 Feb 2022 09:30:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=MI4JsYzrgl5A462+ES+btCdXK8xPt4XpTVgOuLS9/tQ=; b=XeLc4SFZXvTwRmcbNkLm5SrB2V lMOc6NYGdgDR2Cc0hplNLZGj+y6VPcniAG/4WZLETKOzpUiK+y3Nq3Jh0NgMwNj2qmpjDrI/Y2VMP h6LVRZ/97wz0tt7z2V4Kh82vdXAxA0qJWUqnPnviBMbRn5hF88uaxo1RgBYUlzBBCc+U=; Message-ID: <82d64c11-d25e-d42a-e309-4b8ec3577df8@daniel-mendler.de> Date: Mon, 14 Feb 2022 15:29:58 +0100 MIME-Version: 1.0 Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode Content-Language: en-US To: Lars Ingebrigtsen References: <87czjpso5q.fsf@gnus.org> <266fd04d-b3c7-2eec-82b2-dbece8988704@daniel-mendler.de> <87o839r0po.fsf@gnus.org> From: Daniel Mendler In-Reply-To: <87o839r0po.fsf@gnus.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@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: -3.3 (---) On 2/14/22 15:18, Lars Ingebrigtsen wrote: >> With this setting, the separator line generally looks better and less >> obtrusive. So we may want to consider using no background and >> `:underline t` instead? With outline mode folding the separator line is >> still visible, but doesn't disturb the visuals so severely. > > I think the separator line looks fine the way it is, so if we're to > enable outline-minor-mode in that buffer, the outlining will have to be > adjusted to take that into account. If you want to keep the separator as is, I am not sure if we can solve the outline display issue, since it is an artifact of the current separator face. Maybe it would help to introduce an additional line of small height after the separator line, such that an outline-folded block will not end with the separator line? I like to have good outline support since it also helps with commands like my `consult-outline` and `counsel-outline`, which can be used to browse and export a TOC. For me, there is more to outlines than folding only. But overall I don't feel strongly about this - it is a minor feature. I can just keep outline support in my user config in combination with the single pixel separator lines, which looks better. ;) Daniel From debbugs-submit-bounces@debbugs.gnu.org Tue Feb 15 02:32:17 2022 Received: (at 53981) by debbugs.gnu.org; 15 Feb 2022 07:32:17 +0000 Received: from localhost ([127.0.0.1]:43348 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJsJt-0007sZ-8J for submit@debbugs.gnu.org; Tue, 15 Feb 2022 02:32:17 -0500 Received: from mail-wr1-f50.google.com ([209.85.221.50]:46874) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJsJr-0007sL-1L for 53981@debbugs.gnu.org; Tue, 15 Feb 2022 02:32:15 -0500 Received: by mail-wr1-f50.google.com with SMTP id q7so30415427wrc.13 for <53981@debbugs.gnu.org>; Mon, 14 Feb 2022 23:32:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=crFButzbiN0QVg33ojO7+OEcW/IqAuC2vhR/cPSVxdI=; b=R+BKwGZ0Tmdxbzw/PVb1X8O5S92B7Q0cagvLyAQyPSF6xN5gwRA2er5ZpRVTiUZR9O keyWzqEekEGA9gJJr0PboeKNgHeCYa6JSJCCBXFxWNxY7SNoAwZv0LUXxiu4yGgn+EuJ nDDaBMzna65ehAbLXKiJ6LIg6vLtrJ4nnTSfA1QkF0JHFHaqEvq72M19FMa8MFqoYpL7 A9ynpSzckhdHz69QWshn5mJaw7H3LTxfZls9lqYlk/WQFb6Fnq/wNQ7x9V/5hYE05vN1 q+Iw2720ikG/JK9SYg+MX2AZwtkHetXi6+UaKDsRZkGhyZZkdqbfSTS1cGpujggPCUD0 IIWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version; bh=crFButzbiN0QVg33ojO7+OEcW/IqAuC2vhR/cPSVxdI=; b=JgynUIXheukFpCHA21EhP/0XhX8EERViRVHP9y4R0L803WCWk4+1E5vvC+jlYSTEOq RXiB3K3julFEHWj0MwuH2kNbJMFXCJGAgHyREMenn1q+e0+ebx6bTtFokvNL6EUqahVQ TGHG5T/M8PJJVuu0BGeMZqENGtBb/XQIPwe5M5TMs9vxARNj2yQ0dTgV94+NfRhLa4/Y WkYf5wOArUPtdpVycgVEiHfR8aVzAd/Vfyi+HKg3BeDSJwmMdo1KfSbmfSOrl2Z3/eZu +ikJdSXpaTMsjJi78cP2kjIzZsIdoPoIPnBQJRUymKhvH0PzK+uyEuIs1yh2sIN5eS1S XeDQ== X-Gm-Message-State: AOAM532leTqFmcT4xS+atx8BBIumKvr8u0IAvZ3Wtt+hqElewvGKE1H5 nSDVSuBkD3SjOtsPo4MBGN1T4ofVajw= X-Google-Smtp-Source: ABdhPJwCVIxfU5omH+Uf6QPqAnBJtQkz+Ht7qIjrjU5o7ZcaYIGqQGD1nwmW034JPfI1PIZv00u52g== X-Received: by 2002:a5d:4e48:: with SMTP id r8mr2108555wrt.570.1644910328786; Mon, 14 Feb 2022 23:32:08 -0800 (PST) Received: from amdahl30 ([2a01:e0a:253:fe0:2ef0:5dff:fed2:7b49]) by smtp.gmail.com with ESMTPSA id az7sm17497542wmb.14.2022.02.14.23.32.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Feb 2022 23:32:08 -0800 (PST) From: =?utf-8?Q?K=C3=A9vin_Le_Gouguec?= To: Lars Ingebrigtsen Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <87czjpso5q.fsf@gnus.org> Date: Tue, 15 Feb 2022 08:32:07 +0100 In-Reply-To: <87czjpso5q.fsf@gnus.org> (Lars Ingebrigtsen's message of "Mon, 14 Feb 2022 12:06:25 +0100") Message-ID: <87sfsky494.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.0 (/) X-Debbugs-Envelope-To: 53981 Cc: Daniel Mendler , 53981@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: -1.0 (-) Lars Ingebrigtsen writes: > But then hiding levels made the display pretty weird: Looking at your screenshot, this reminds me of the discussion we're having on bug#52587? See in particular the three screenshots in <<87fsqnvl98.fsf@gmail.com>> I.e. given this outline buffer: The current folding causes this: Whereas it looks like this would be more useful: IOW, instead of eliding everything from the heading's end-of-line (included) to the section's last end-of-line (*excluded*, so its font-locking clashes with the heading line), we would like to elide everything *after* the heading's end-of-line (*including* the section's last end-of-line). I have not found the time to dig into outline.el to understand how this could be pulled off yet. FWIW though, issues such as the one we're seeing now with shortdoc comfort me in the idea that this is a fundamental problem with outline.el (although a mostly aesthetic one, granted). I'm also reminded of bug#51016, where we debated whether FORM FEEDs belonged in outline-regexp; I'm seeing a pattern with shortdoc's separator lines, and I wonder if outline.el should grow a concept of "section separators". That would allow us to stop conflating FORM FEEDs with level-1 headings, letting outline-forward-same-level do DTRT, yet keeping the ^L displayed even when folding all top-level headings, which IIRC was a contentious issue in that bug report From debbugs-submit-bounces@debbugs.gnu.org Tue Feb 15 04:29:35 2022 Received: (at 53981) by debbugs.gnu.org; 15 Feb 2022 09:29:35 +0000 Received: from localhost ([127.0.0.1]:43506 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJu9P-0002W8-Bn for submit@debbugs.gnu.org; Tue, 15 Feb 2022 04:29:35 -0500 Received: from quimby.gnus.org ([95.216.78.240]:46728) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJu9N-0002Vv-MA for 53981@debbugs.gnu.org; Tue, 15 Feb 2022 04:29:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID :In-Reply-To:Date:References:Subject:Cc:To:From:Sender:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=YmHsKzfevLPba+UTuIiiaTXhobEOyVobl1P0XSvvkYM=; b=KYAM3qFE/qX/4n1uK7CSJ7NQAs FeZxBMWRE4sIzrn52aIvesF4DPe6W1mfptqVVyxurMg3P+DDRyXbcyaY7nVlU+Qj18InVwR7meBSS kqbIZBZfIO7QLRbsV/XIfYsdJBRNaviCKM3RDCO+ckL4p3qQ1WzgtM/83INWjr/pFR6A=; Received: from [84.212.220.105] (helo=giant) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nJu9D-0008Tn-Qe; Tue, 15 Feb 2022 10:29:26 +0100 From: Lars Ingebrigtsen To: =?utf-8?Q?K=C3=A9vin?= Le Gouguec Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEXT0caPWlY4Mir/ //9kTWJkAAAAAWJLR0QDEQxM8gAAAAd0SU1FB+YCDwkbAf+K0YoAAAGkSURBVCjPVdLBjtowEAbg sVUilVO3otHCfQ/kKcKhHHIKVSba+LSHBRU/BSAt0va0IIi0ObGVE+H/KTsGVLU+JP408cS/E6Lb UIAP96dwGf2L5IYvfyuDG6KAnzdcGmDNzGlvzmgmhA2MI7JoKiXoG2XdV2zuBXtTSNvcvhSK/BSM ZTdknytKNfgTUaHa9ILiWTMPjoKBxsyVZZWXpOi7rg3asuKp4NRtIciKTFAkGXAsp0+xwBgA62X2 thfIFF4tss1v/U6hcK++ZdFH31OvDz+k+LXX0DCkcqM8PozOpCWVPfi8fyhdAC92j7NsVbt4RtHu GY958qM+htirB+MHdsvGL2hFw0nZtEMueELryYtyy/mSWcLhzWtvAS5URTjNowWatuIlCB9pjFr2 1HrQeXYcQc4WRyuVXCX4bOGZjbyHEh9bzJkbQkrReYQz0ZgJRNpZnCh9uKIDnMauJPl2etuE8Dt7 AW7jf8iaGLDmCnWqW2APEx7THrWv3bgJiBpYX6J/xS+P9g5rWUhoEPnOYWXDgRiYtmu799CgGpeJ /BYsu+Y/5JjZYM8ec9AAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjItMDItMTVUMDk6Mjc6MDErMDA6 MDAw1RwyAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAyLTE1VDA5OjI3OjAxKzAwOjAwQYikjgAA AABJRU5ErkJggg== X-Now-Playing: He Said's _Take Care_: "Get Out Of That Rain" Date: Tue, 15 Feb 2022 10:29:23 +0100 In-Reply-To: <87sfsky494.fsf@gmail.com> (=?utf-8?Q?=22K=C3=A9vin?= Le Gouguec"'s message of "Tue, 15 Feb 2022 08:32:07 +0100") Message-ID: <875ypgqxzg.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Kévin Le Gouguec writes: > I have not found the time to dig into outline.el to understand how this > could be pulled off yet. FWIW though, issues such as the one we're > seeing now with shortdoc comfort me in the idea that th [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: Daniel Mendler , 53981@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: -3.3 (---) K=C3=A9vin Le Gouguec writes: > I have not found the time to dig into outline.el to understand how this > could be pulled off yet. FWIW though, issues such as the one we're > seeing now with shortdoc comfort me in the idea that this is a > fundamental problem with outline.el (although a mostly aesthetic one, > granted). Yeah, I think it's an issue in outline (that should be fixed). > I'm also reminded of bug#51016, where we debated whether FORM FEEDs > belonged in outline-regexp; I'm seeing a pattern with shortdoc's > separator lines, and I wonder if outline.el should grow a concept of > "section separators". > > That would allow us to stop conflating FORM FEEDs with level-1 > headings, letting outline-forward-same-level do DTRT, yet keeping the > ^L displayed even when folding all top-level headings, which IIRC was > a contentious issue in that bug report As previously discussed in some other bug report *vague hand wave*, it makes no sense to use regexps for outline in generated buffers. The functions that generate the buffers knows what's a heading, and should mark the headings properly (with text properties), and outline-minor-mode should just react to these text properties in these buffers. --=20 (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Tue Feb 15 04:36:38 2022 Received: (at 53981) by debbugs.gnu.org; 15 Feb 2022 09:36:38 +0000 Received: from localhost ([127.0.0.1]:43524 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJuGE-0002iS-6k for submit@debbugs.gnu.org; Tue, 15 Feb 2022 04:36:38 -0500 Received: from server.qxqx.de ([178.63.65.180]:50355 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nJuGC-0002iC-La for 53981@debbugs.gnu.org; Tue, 15 Feb 2022 04:36:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=aqoY2gh7KryslBDdyWJVSDR1FJ6e5w2O3D3OKfG16vY=; b=Hgw089w9PZoqJWa7lAnKbnxuKh aDYub4l1QN/2TU1u0O3w7Xvr7s10Rq747NOnbeLDty0R8j19uNQJSQJzXydPh1zvWP0/vWNCSlBYC bbK/wcNXU6ZWQFWwyUMd4v2rry32A8Y2hueyqMU2HBV7PI9efFE3IK1frcKNLzmuL0zk=; Message-ID: Date: Tue, 15 Feb 2022 10:36:27 +0100 MIME-Version: 1.0 Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode Content-Language: en-US To: Lars Ingebrigtsen , =?UTF-8?Q?K=c3=a9vin_Le_Gouguec?= References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> From: Daniel Mendler In-Reply-To: <875ypgqxzg.fsf@gnus.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@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: -3.3 (---) On 2/15/22 10:29, Lars Ingebrigtsen wrote: > As previously discussed in some other bug report *vague hand wave*, it > makes no sense to use regexps for outline in generated buffers. The > functions that generate the buffers knows what's a heading, and should > mark the headings properly (with text properties), and > outline-minor-mode should just react to these text properties in these > buffers. That's a good idea, but only tangentially related to the aesthetic outline issue with the face. I wanted to have something like this before, when I attached text properties to headlines. If outline-mode could automatically find headlines by a text property that would be great! Daniel From debbugs-submit-bounces@debbugs.gnu.org Wed Feb 16 13:44:54 2022 Received: (at 53981) by debbugs.gnu.org; 16 Feb 2022 18:44:54 +0000 Received: from localhost ([127.0.0.1]:49437 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKPIL-00063d-Vy for submit@debbugs.gnu.org; Wed, 16 Feb 2022 13:44:54 -0500 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:64973) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKPIK-000636-34 for 53981@debbugs.gnu.org; Wed, 16 Feb 2022 13:44:52 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id 8477C40003; Wed, 16 Feb 2022 18:44:44 +0000 (UTC) From: Juri Linkov To: Lars Ingebrigtsen Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode Organization: LINKOV.NET References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> Date: Wed, 16 Feb 2022 20:18:35 +0200 In-Reply-To: <875ypgqxzg.fsf@gnus.org> (Lars Ingebrigtsen's message of "Tue, 15 Feb 2022 10:29:23 +0100") Message-ID: <86fsoi29ho.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: Daniel Mendler , 53981@debbugs.gnu.org, =?iso-8859-1?Q?K=E9vin?= Le Gouguec 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: -1.7 (-) --=-=-= Content-Type: text/plain > As previously discussed in some other bug report *vague hand wave*, it > makes no sense to use regexps for outline in generated buffers. The > functions that generate the buffers knows what's a heading, and should > mark the headings properly (with text properties), and > outline-minor-mode should just react to these text properties in these > buffers. That was in https://debbugs.gnu.org/31094#40 Is this a promising direction? --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=outline-search-function.patch diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index 658edd6752..63e799a2be 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -1435,7 +1435,19 @@ shortdoc-mode-map (define-derived-mode shortdoc-mode special-mode "shortdoc" "Mode for shortdoc." - :interactive nil) + :interactive nil + (setq-local outline-level (lambda () (if (eq (char-after) ?\() 2 1))) + (setq-local outline-search-function + (lambda (&optional looking-at) + (save-excursion + (let* ((prop-at (if looking-at + (get-text-property (point) 'shortdoc-section) + t)) + (prop-match (and prop-at (text-property-search-forward 'shortdoc-section)))) + (when prop-match + (set-match-data (list (prop-match-beginning prop-match) + (prop-match-end prop-match))) + t)))))) (defun shortdoc--goto-section (arg sym &optional reverse) (unless (natnump arg) diff --git a/lisp/outline.el b/lisp/outline.el index 012e219fc3..a282237696 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -301,7 +303,9 @@ outline-font-lock-face "Return one of `outline-font-lock-faces' for current level." (save-excursion (goto-char (match-beginning 0)) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function t) + (looking-at outline-regexp)) (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces))))) @@ -393,14 +397,19 @@ outline-minor-mode-highlight :safe #'symbolp :version "28.1") +(defvar outline-search-function nil + "Function to search the next outline. +It should be like `re-search-forward' and `looking-at'.") + (defun outline-minor-mode-highlight-buffer () ;; Fallback to overlays when font-lock is unsupported. (save-excursion (goto-char (point-min)) (let ((regexp (concat "^\\(?:" outline-regexp "\\).*$"))) - (while (re-search-forward regexp nil t) - (let ((overlay (make-overlay (match-beginning 0) - (match-end 0)))) + (while (if outline-search-function + (funcall outline-search-function) + (re-search-forward regexp nil t)) + (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) (overlay-put overlay 'outline-overlay t) (when (or (eq outline-minor-mode-highlight 'override) (and (eq outline-minor-mode-highlight t) @@ -535,7 +544,9 @@ outline-on-heading-p (save-excursion (beginning-of-line) (and (bolp) (or invisible-ok (not (outline-invisible-p))) - (looking-at outline-regexp)))) + (if outline-search-function + (funcall outline-search-function t) + (looking-at outline-regexp))))) (defun outline-insert-heading () "Insert a new heading at same depth at point." --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 17 06:43:52 2022 Received: (at 53981) by debbugs.gnu.org; 17 Feb 2022 11:43:52 +0000 Received: from localhost ([127.0.0.1]:50324 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKfCR-0005TW-VC for submit@debbugs.gnu.org; Thu, 17 Feb 2022 06:43:52 -0500 Received: from quimby.gnus.org ([95.216.78.240]:39338) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKfCQ-0005TI-5B for 53981@debbugs.gnu.org; Thu, 17 Feb 2022 06:43:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=9FTwaCVH5UaWwYiy6Z1iauSUVMYiQAQbV/sMHurP0jA=; b=OY7Iwd0H0aOYLSW5eUSGBu4ial iu4OYEoMUZXRR8gY/bmn8o1RHMYjqLCeprs9RhXsZ+lQ4cajv35GxWW1rGXhz18Xzz2dH05InDn2T OPOJHKQr2F9rDB7oxc6niwHRh1T8Wn/jy8+fcRihEVAF1xLf+ybkp+VW40pXTcAaXNVQ=; Received: from [84.212.220.105] (helo=giant) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKfCG-0006fo-OS; Thu, 17 Feb 2022 12:43:43 +0100 From: Lars Ingebrigtsen To: Juri Linkov Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> <86fsoi29ho.fsf@mail.linkov.net> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAD1BMVEV9hLKztss+SZwk KmT///+HInAoAAAAAWJLR0QEj2jZUQAAAAd0SU1FB+YCEQsgM7itm/AAAAGcSURBVDjLhZSLseMw CEWRXgNyKsBQQaD/3vZesJz47c4smfFYOvzBEWk5fsn662aLLPOYZhbi9Qyj+FsOnAqY4KmzwLRT DijylFBLwAIyBy0APDw9E7YFVBqYQzkSIu0qbAP8MgwmHuWBMRogt2AUAsV5g8B7OcnK1vJ/gJfx AX4VCP0HQIodo0Erd0cK0P12zaKNhQKsAr7vQ1hn1ZE3YA0XmGxi5AdMAJ4IrMAVFKA1HoBjydm5 EWR+pem+013xAPmpY6ZO5VyxKzZ1ylQRxTzkfU481zrGmC+M7jUE76hjqKN+gkPnz2lrrAOahy5x ORU6Y6hBfYi8Fl0lExVVFRWDW5U1QVeiDralE72ycvYq6rrHcEsDXHG4Gfc9JrhusCWjtmSxzW3x zeiqBvAA3qAdPUAtHIH1nvzKqkF+A7d3AUa/Adc3fjYoi/xMhJvYWd096d3PrqNy6pZcMFk51Svn 3Ssm+ObM690rjHXLEhZH1Fe0N7tb1aAdWX9+tUzoawPPXfzl6Po+aLNjsNEb+AX8AnU6sRr//vf5 AxNqlRczdUN+AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTAyLTE3VDExOjMyOjUxKzAwOjAwHz4R qgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wMi0xN1QxMTozMjo1MSswMDowMG5jqRYAAAAASUVO RK5CYII= X-Now-Playing: Cat Power's _Covers_: "White Mustang" Date: Thu, 17 Feb 2022 12:43:37 +0100 In-Reply-To: <86fsoi29ho.fsf@mail.linkov.net> (Juri Linkov's message of "Wed, 16 Feb 2022 20:18:35 +0200") Message-ID: <87czjln2fq.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Juri Linkov writes: > Is this a promising direction? [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: Daniel Mendler , 53981@debbugs.gnu.org, =?utf-8?Q?K=C3=A9vin?= Le Gouguec 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.3 (---) Juri Linkov writes: > Is this a promising direction? [...] > + (setq-local outline-level (lambda () (if (eq (char-after) ?\() 2 1))) > + (setq-local outline-search-function > + (lambda (&optional looking-at) > + (save-excursion > + (let* ((prop-at (if looking-at > + (get-text-property (point) 'shortdoc-section) > + t)) > + (prop-match (and prop-at (text-property-search-forward 'shortdoc-section)))) > + (when prop-match > + (set-match-data (list (prop-match-beginning prop-match) > + (prop-match-end prop-match))) > + t)))))) No, I was thinking that modes like this would just put a text property like `outline-heading' (or even just `heading') on the heading, and then outline-minor-mode would use that. I.e., we make modes that generate buffers provide semantics for the data it's inserted, and then outline-minor-mode reacts to those semantics. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 17 08:44:34 2022 Received: (at 53981) by debbugs.gnu.org; 17 Feb 2022 13:44:34 +0000 Received: from localhost ([127.0.0.1]:50509 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKh5F-0006yB-Ob for submit@debbugs.gnu.org; Thu, 17 Feb 2022 08:44:33 -0500 Received: from server.qxqx.de ([178.63.65.180]:52909 helo=mail.qxqx.de) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKh5B-0006xt-4t for 53981@debbugs.gnu.org; Thu, 17 Feb 2022 08:44:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=qxqx.de; s=mail1392553390; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=VtKvsJ5gxlOt7Thm0HxoNTkDX5MeOjfHrQh3+hbzKXc=; b=BORJkd0yZdgyl8CpmlQ0ujgBN7 lQ9wbDqndhWlqdN2bi1B8HsnKCj4Tbyw6GuHzcmb+PhTawyhu5nvPg3Hjv0kX/iI/gJKvC0gsRQte PObR76XX3PWMVBZFXqaJ15YsALgn/eo19B1fX/mt/t8gWjEf4kzmqO76VHn5LFLevTxo=; Message-ID: <3fc750e0-a003-b3f3-a6cb-abe75be2f1a8@daniel-mendler.de> Date: Thu, 17 Feb 2022 14:44:20 +0100 MIME-Version: 1.0 Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode Content-Language: en-US To: Lars Ingebrigtsen , Juri Linkov References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> <86fsoi29ho.fsf@mail.linkov.net> <87czjln2fq.fsf@gnus.org> From: Daniel Mendler In-Reply-To: <87czjln2fq.fsf@gnus.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@debbugs.gnu.org, =?UTF-8?Q?K=c3=a9vin_Le_Gouguec?= 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.3 (---) On 2/17/22 12:43, Lars Ingebrigtsen wrote: > Juri Linkov writes: > >> Is this a promising direction? > > [...] > >> + (setq-local outline-level (lambda () (if (eq (char-after) ?\() 2 1))) >> + (setq-local outline-search-function >> + (lambda (&optional looking-at) >> + (save-excursion >> + (let* ((prop-at (if looking-at >> + (get-text-property (point) 'shortdoc-section) >> + t)) >> + (prop-match (and prop-at (text-property-search-forward 'shortdoc-section)))) >> + (when prop-match >> + (set-match-data (list (prop-match-beginning prop-match) >> + (prop-match-end prop-match))) >> + t)))))) > > No, I was thinking that modes like this would just put a text property > like `outline-heading' (or even just `heading') on the heading, and then > outline-minor-mode would use that. > > I.e., we make modes that generate buffers provide semantics for the data > it's inserted, and then outline-minor-mode reacts to those semantics. I think Juri's approach to provide a search function is better, since it gives more flexibility. At least please don't hard code the `outline-heading` property. Then one could use different properties and retroactively enable outline minor mode for modes which don't come with the outline-heading property. Maybe support a list of properties which indicate headlines? But at that point a function may just be simpler... Daniel From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 17 10:02:34 2022 Received: (at 53981) by debbugs.gnu.org; 17 Feb 2022 15:02:34 +0000 Received: from localhost ([127.0.0.1]:52459 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKiIk-0000vs-Kn for submit@debbugs.gnu.org; Thu, 17 Feb 2022 10:02:34 -0500 Received: from quimby.gnus.org ([95.216.78.240]:40986) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKiIg-0000vb-2Z for 53981@debbugs.gnu.org; Thu, 17 Feb 2022 10:02:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Ox2NzuPnf8gV55mMbZW2fR9popT1RWdvj4/LXPePCTo=; b=J+dv6DQiopb+/1gQt4clWSQjJL Znw2shd8rJmxEx07ZGtM5DPAmZZrfd2U19uGkhXVz8yt/hj7/5BPV8zAvZWTFrTz95/38dHxbyHtb Jg/fF3GW6gq8hsAXAcikO78tPKDGL6J+UmcBIg37yQY4kdZm7gQ1+n4QGTZC7+GdImKk=; Received: from [84.212.220.105] (helo=giant) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nKiIV-0000OT-UI; Thu, 17 Feb 2022 16:02:23 +0100 From: Lars Ingebrigtsen To: Daniel Mendler Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> <86fsoi29ho.fsf@mail.linkov.net> <87czjln2fq.fsf@gnus.org> <3fc750e0-a003-b3f3-a6cb-abe75be2f1a8@daniel-mendler.de> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAFVBMVEW/p2rYx5Hr6+mf np2KeVZQTUz///+v/RaAAAAAAWJLR0QGYWa4fQAAAAd0SU1FB+YCEQ8AGIac7s4AAAGzSURBVDjL dZPhbfQgDIY5qQOEoA4AmYDY/L9PmAEqzP6r1DbJNV8vtRIU8tjmtQHnnHvY89se3mx5A/5q6rXI +wZOeg+OzD7d2WYggtcx5nz8DauCCADIsAN1gl3dGsAExGMMrlAYaU1JQFOwjcO40GAJ2T+xvwA3 GxkF0JHKQAccyuqegoB8AQDFEu6fjJeI6hVYQhaf8AKggKmpvkGIPyALIPVuVYIuYJcE1ZbPOhoA na6ipJwymoE0QdimrB6kQ1Z5rIPHvwQRyikKyvaUVL1Jo9aYcimzZydg1iVFV8FXrQriqMxZC8kQ Gk3lUUAaVWawwi6SG7dQAVHBNkS/AqlFvhrq6tFSQWegBLYqU0XEA2DvMHLICjpmpAkSly+prSvA Jj1HmqlSL6RF71oyCtBqDNAYKBPSzkhHs4JkQM4H2kaMnkKtJ1i1nXicFNlUJho0ATZp1+hEUk8q PBq1I0K0ixKSc4IoG39GxGh9+s8EuPX2uD/dc90qyTm7Gk7w7m7gz1T+BS43LcDTPewif9Bvc39c c7rcWrf4e7D4W+Dk7x1YHt75n5APcjc2Vd2Yaf8GcuW/m1CuoHMAAAAldEVYdGRhdGU6Y3JlYXRl ADIwMjItMDItMTdUMTU6MDA6MjQrMDA6MDAabeu+AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIyLTAy LTE3VDE1OjAwOjI0KzAwOjAwazBTAgAAAABJRU5ErkJggg== X-Now-Playing: The Meters's _Gettin' Funkier All The Time (3): Just Kissed My Baby [Cabbage Alley & Rejuvenation]_: "You've Got To Change (You Got to Reform)" Date: Thu, 17 Feb 2022 16:02:18 +0100 In-Reply-To: <3fc750e0-a003-b3f3-a6cb-abe75be2f1a8@daniel-mendler.de> (Daniel Mendler's message of "Thu, 17 Feb 2022 14:44:20 +0100") Message-ID: <87r181leo5.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Daniel Mendler writes: > I think Juri's approach to provide a search function is better, since it > gives more flexibility. At least please don't hard code the > `outline-heading` property. Then one could use different prop [...] Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: 53981@debbugs.gnu.org, =?utf-8?Q?K?= =?utf-8?Q?=C3=A9vin?= Le Gouguec , Juri Linkov 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.3 (---) Daniel Mendler writes: > I think Juri's approach to provide a search function is better, since it > gives more flexibility. At least please don't hard code the > `outline-heading` property. Then one could use different properties and > retroactively enable outline minor mode for modes which don't come with > the outline-heading property. Maybe support a list of properties which > indicate headlines? But at that point a function may just be simpler... I don't see the point. We're marking up buffers with semantic information -- there isn't much point in trying to retrofit a machinery like that for older packages. I don't think it's necessary to create a whole machinery around this -- we should design with the future, not the past, in mind. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Thu Feb 17 12:48:39 2022 Received: (at 53981) by debbugs.gnu.org; 17 Feb 2022 17:48:39 +0000 Received: from localhost ([127.0.0.1]:52644 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKktT-0007U9-05 for submit@debbugs.gnu.org; Thu, 17 Feb 2022 12:48:39 -0500 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:42649) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nKktQ-0007Tb-1H for 53981@debbugs.gnu.org; Thu, 17 Feb 2022 12:48:37 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id 38A48C000D; Thu, 17 Feb 2022 17:48:27 +0000 (UTC) From: Juri Linkov To: Lars Ingebrigtsen Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode Organization: LINKOV.NET References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> <86fsoi29ho.fsf@mail.linkov.net> <87czjln2fq.fsf@gnus.org> Date: Thu, 17 Feb 2022 19:45:28 +0200 In-Reply-To: <87czjln2fq.fsf@gnus.org> (Lars Ingebrigtsen's message of "Thu, 17 Feb 2022 12:43:37 +0100") Message-ID: <86iltdlacv.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: Daniel Mendler , 53981@debbugs.gnu.org, =?iso-8859-1?Q?K=E9vin?= Le Gouguec 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: -1.7 (-) > No, I was thinking that modes like this would just put a text property > like `outline-heading' (or even just `heading') on the heading, and then > outline-minor-mode would use that. Should these modes also put the text property `outline-level'? Then maybe instead of two text properties `outline-heading'=t and `outline-level'=N, it should be enough to put just `outline-level': diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index 658edd6752..7bcf331eb9 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -1284,7 +1284,12 @@ shortdoc-display-group (unless (bobp) (insert "\n")) (insert (propertize - (concat (substitute-command-keys data) "\n\n") + (substitute-command-keys data) + 'face 'shortdoc-heading + 'shortdoc-section t + 'outline-level 1)) + (insert (propertize + "\n\n" 'face 'shortdoc-heading 'shortdoc-section t))) ;; There may be functions not yet defined in the data. @@ -1307,7 +1312,7 @@ shortdoc--display-function (start-section (point)) arglist-start) ;; Function calling convention. - (insert (propertize "(" 'shortdoc-function function)) + (insert (propertize "(" 'shortdoc-function function 'outline-level 2)) (if (plist-get data :no-manual) (insert-text-button (symbol-name function) From debbugs-submit-bounces@debbugs.gnu.org Sat Feb 19 07:49:32 2022 Received: (at 53981) by debbugs.gnu.org; 19 Feb 2022 12:49:32 +0000 Received: from localhost ([127.0.0.1]:57084 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nLPB5-0001vb-SR for submit@debbugs.gnu.org; Sat, 19 Feb 2022 07:49:32 -0500 Received: from quimby.gnus.org ([95.216.78.240]:43836) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nLPB0-0001vJ-L9 for 53981@debbugs.gnu.org; Sat, 19 Feb 2022 07:49:30 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date: References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=YhFEL7AsYjFGKWausPD9B9XibUo95+iq76HlR4kkRgk=; b=LAlRMUSLjSNee8xRUKp8JndPe+ 9Bh48G2Q2lgLbl48Z4iMfDTj4Mm9V/l1NGpXVtBR6S68008lNFS6SDt1mQ0SLIagreN9UpqaQnThX wp1SgL8mQp/7UOhe7tY8UCwV5SosWWhoNmP1o0Vkk2HC/r0ZOvMNQS9R9BZZB7WkAc9U=; Received: from [84.212.220.105] (helo=giant) by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nLPAq-0006WJ-V3; Sat, 19 Feb 2022 13:49:19 +0100 From: Lars Ingebrigtsen To: Juri Linkov Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <87czjpso5q.fsf@gnus.org> <87sfsky494.fsf@gmail.com> <875ypgqxzg.fsf@gnus.org> <86fsoi29ho.fsf@mail.linkov.net> <87czjln2fq.fsf@gnus.org> <86iltdlacv.fsf@mail.linkov.net> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAABGdBTUEAALGPC/xhBQAAACBj SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAALVBMVEUtLjE0NDZBQUI+ PkBDPThURjeMZzx+XztuVTqacEAeJzNnZmRUVFM/P0H////30LR9AAAAAWJLR0QOb70wTwAAAAd0 SU1FB+YCEwwlLgma3WIAAAFdSURBVDjLtVS9bsIwED6rQmI8h4alS6FjJ+AJkFA7I1GLbiBxh9UN CSLWStTKI/Q5umZj7tQnqm0wPyEpMPSGKL7P3/18dzIAgLTmPwcWQTARXNt/QOeVKE8Y2xsAeQB9 EjzNIYUssjagLAGK/S7UlcBBKBS+DOF66sY2uZouUlomKfcN1YdjQ1UekOoAPpPWZsJqqilRTGTM C7FpgayMSb/OuL7ityfDelRnoZktUB2zTojt5U9OlnrKKiFyQGWmFpSaVHfNJO3N1byy7L0PQ7k3 VjJpxYzkfeR12/WR3WXfX9ljts7WYVAbERtRU7aa0Vo+NILsGGaItjlxJImfYU79mmdYGSAHhO3A k3H5IosBLANKQxVbrWDXAnButOJCRu3c+mAZAyG37gfAMaNTlqN5wYr+AYirGf8E7Bp0O3TbLxDR aRV/+CtHofwzE6/2T0cbWpuDo8SDfaifX1UMdZ/EfAsAAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIy LTAyLTE5VDEyOjM3OjQ2KzAwOjAwbVJ+mwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wMi0xOVQx MjozNzo0NiswMDowMBwPxicAAAAASUVORK5CYII= X-Now-Playing: Tuxedomoon's _Ten Years In One Night (Live)_: "Everything You Want" Date: Sat, 19 Feb 2022 13:49:16 +0100 In-Reply-To: <86iltdlacv.fsf@mail.linkov.net> (Juri Linkov's message of "Thu, 17 Feb 2022 19:45:28 +0200") Message-ID: <87ley7vx6b.fsf@gnus.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see @@CONTACT_ADDRESS@@ for details. Content preview: Juri Linkov writes: > Then maybe instead of two text properties `outline-heading'=t and > `outline-level'=N, it should be enough to put just `outline-level': Yes, sounds like a good idea to me. Content analysis details: (-2.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: Daniel Mendler , 53981@debbugs.gnu.org, =?utf-8?Q?K=C3=A9vin?= Le Gouguec 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.3 (---) Juri Linkov writes: > Then maybe instead of two text properties `outline-heading'=t and > `outline-level'=N, it should be enough to put just `outline-level': Yes, sounds like a good idea to me. -- (domestic pets only, the antidote for overdose, milk.) bloggy blog: http://lars.ingebrigtsen.no From debbugs-submit-bounces@debbugs.gnu.org Sun Jun 19 15:04:33 2022 Received: (at control) by debbugs.gnu.org; 19 Jun 2022 19:04:33 +0000 Received: from localhost ([127.0.0.1]:53203 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o30De-0002go-Kc for submit@debbugs.gnu.org; Sun, 19 Jun 2022 15:04:33 -0400 Received: from mail-pl1-f176.google.com ([209.85.214.176]:46934) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1o30Dc-0002gG-Ra for control@debbugs.gnu.org; Sun, 19 Jun 2022 15:04:21 -0400 Received: by mail-pl1-f176.google.com with SMTP id d13so7943786plh.13 for ; Sun, 19 Jun 2022 12:04:20 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:mime-version:date:message-id:subject:to; bh=ot57nf4lJWFFlvtT+6DaKpcMHpMxYEBQEz2RaDmQQSQ=; b=bhCT1Fo0GNtOf4/x/ZOZi9+XNeb3KmUy26Fx31ZvklIBC4AL5iOrDKqmFpETKUNog+ fZsFg89kVhU6fC08DknKvuIhHwOm1FHByB/G7if3Q21b+ZHL2OBcMQnfMz1SX0wd7vDn u4M7CJ75ytCCVyst8RBegryyyIfWlXYT0fcz7RAHK74ePNL1HzpCxFTvPeEmg1k1q5VY EejVDL94Az9Vt3647LhS2zrAN/hDAHeJQO/OmW1HRylpcvv6YEbqWdQV8hq5tbB6tpow 8O+qcWFVfjNzPNNFRuNylQZO2s+ZcJ8Jb4ekC3tvqLnKMlmnOxSYULqT1nCvzTkX3FNJ K6Kw== X-Gm-Message-State: AJIora+6+aKudUvzT/sx/9zv6ct+LzzMN1+6fe4qEfg8QhH6BYCQ/uYq 44dTdISqPS+oCygsLUH8OpoCVGnmVfqkJpfaMmo67NCp X-Google-Smtp-Source: AGRyM1vVleTzZ0NUnEzkr7NauG4jTScr6X1z29toCfsafhr/1V6BXp2b8dN7D1XOUyfYtRC0KPsYMO7SlV7aDaaU+Ro= X-Received: by 2002:a17:90b:4d8b:b0:1e3:31df:c98a with SMTP id oj11-20020a17090b4d8b00b001e331dfc98amr33545392pjb.175.1655665455212; Sun, 19 Jun 2022 12:04:15 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sun, 19 Jun 2022 12:04:14 -0700 From: Stefan Kangas MIME-Version: 1.0 Date: Sun, 19 Jun 2022 12:04:14 -0700 Message-ID: Subject: control message for bug #53981 To: control@debbugs.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.5 (/) X-Debbugs-Envelope-To: control 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.5 (/) severity 53981 wishlist quit From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 08 14:14:26 2022 Received: (at 53981) by debbugs.gnu.org; 8 Nov 2022 19:14:27 +0000 Received: from localhost ([127.0.0.1]:38181 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osU3G-0000fA-Pp for submit@debbugs.gnu.org; Tue, 08 Nov 2022 14:14:26 -0500 Received: from relay10.mail.gandi.net ([217.70.178.230]:33887) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osU3F-0000ex-0h for 53981@debbugs.gnu.org; Tue, 08 Nov 2022 14:14:25 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id E9E5E240004; Tue, 8 Nov 2022 19:14:16 +0000 (UTC) From: Juri Linkov To: Daniel Mendler Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: (Daniel Mendler's message of "Sun, 13 Feb 2022 23:39:11 +0100") Organization: LINKOV.NET References: Date: Tue, 08 Nov 2022 21:12:45 +0200 Message-ID: <86k045b70e.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Debbugs-Envelope-To: 53981 Cc: 53981@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" --=-=-= Content-Type: text/plain > The shortdoc buffer currently lacks support for the outline-minor-mode. > By setting the two variables outline-regexp and outline-level, we can > unlock this feature. Does it make sense to provide this by default? > > (defun shortdoc--outline-level () (if (eq (char-after) ?\() 2 1))) > (add-hook 'shortdoc-mode-hook > (lambda () > (setq-local outline-level #'shortdoc--outline-level > outline-regexp "[A-Z(]"))) Unfortunately, outline-regexp is not a reliable way to find outline headings. For this reason currently outlines in apropos are broken: outline-regexp in apropos-mode is set to "^[^ \n]+", that matches too many false positives, all blue lines below are incorrectly identified as outline headings: --=-=-= Content-Type: image/png Content-Disposition: inline; filename=apropos-outline-1.png Content-Transfer-Encoding: base64 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 McYYY4/S/wNPswBBnRtWbwAAAABJRU5ErkJggg== --=-=-= Content-Type: text/plain As previously discussed, we need to introduce a new function to search outline headings. Using such function, the outlines are identified with 100% precision: --=-=-= Content-Type: image/png Content-Disposition: inline; filename=apropos-outline-2.png Content-Transfer-Encoding: base64 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 --=-=-= Content-Type: text/plain Here is a patch that adds 'outline-search-function'. However, the requirements for this function arguments are quite non-standard: its first argument should be a limit that is used in outline-font-lock-keywords where MATCHER has the argument LIMIT. Also the same function should be able to search in both directions: forward and backward. And the third requirement is that it should be able also to be used as looking-at without moving point. In this patch the second argument HOW supports two values: 'backward' and 'looking-at'. But this could be split to two separate boolean arguments, this is not the final patch. Also another optional argument could be added to define an arbitrary property to search. Then here the same function is used for apropos-mode and shortdoc: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=outline-search-function.patch diff --git a/lisp/apropos.el b/lisp/apropos.el index 624c29cb410..5b7fe4cb23a 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -493,7 +493,7 @@ apropos-mode \\{apropos-mode-map}" (make-local-variable 'apropos--current) (setq-local revert-buffer-function #'apropos--revert-buffer) - (setq-local outline-regexp "^[^ \n]+" + (setq-local outline-search-function #'outline-search-level-prop outline-level (lambda () 1) outline-minor-mode-cycle t outline-minor-mode-highlight t @@ -1188,7 +1188,8 @@ apropos-print (insert-text-button (symbol-name symbol) 'type 'apropos-symbol 'skip apropos-multi-type - 'face 'apropos-symbol) + 'face 'apropos-symbol + 'outline-level 1) (setq button-end (point)) (if (and (eq apropos-sort-by-scores 'verbose) (cadr apropos-item)) diff --git a/lisp/outline.el b/lisp/outline.el index a646f71db8b..442d51b71bc 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -59,6 +59,14 @@ outline-heading-end-regexp in the file it applies to.") ;;;###autoload(put 'outline-heading-end-regexp 'safe-local-variable 'stringp) +(defvar outline-search-function nil + "Function to search the next outline heading. +The function is called with two arguments: the limit of the search +and the optional argument for the backward search; it should return +non-nil, move point (to the end of the buffer when search fails), +and set match-data appropriately if it succeeds; +like re-search-forward with `outline-regexp' would.") + (defvar outline-mode-prefix-map (let ((map (make-sparse-keymap))) (define-key map "@" 'outline-mark-subtree) @@ -233,7 +241,8 @@ outline-mode-map (defvar outline-font-lock-keywords '( ;; Highlight headings according to the level. - (eval . (list (concat "^\\(?:" outline-regexp "\\).*") + (eval . (list (or outline-search-function + (concat "^\\(?:" outline-regexp "\\).*")) 0 '(if outline-minor-mode (if outline-minor-mode-highlight (list 'face (outline-font-lock-face))) @@ -366,7 +375,9 @@ outline-font-lock-face "Return one of `outline-font-lock-faces' for current level." (save-excursion (goto-char (match-beginning 0)) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function nil 'looking-at) + (looking-at outline-regexp)) (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces))))) @@ -474,16 +485,17 @@ outline-minor-mode-highlight-buffer ;; Fallback to overlays when font-lock is unsupported. (save-excursion (goto-char (point-min)) - (let ((regexp (concat "^\\(?:" outline-regexp "\\).*$"))) - (while (re-search-forward regexp nil t) - (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) - (overlay-put overlay 'outline-highlight t) - ;; FIXME: Is it possible to override all underlying face attributes? - (when (or (memq outline-minor-mode-highlight '(append override)) - (and (eq outline-minor-mode-highlight t) - (not (get-text-property (match-beginning 0) 'face)))) - (overlay-put overlay 'face (outline-font-lock-face)))) - (goto-char (match-end 0)))))) + (while (if outline-search-function + (funcall outline-search-function) + (re-search-forward outline-regexp nil t)) + (let ((overlay (make-overlay (match-beginning 0) (pos-eol)))) + (overlay-put overlay 'outline-highlight t) + ;; FIXME: Is it possible to override all underlying face attributes? + (when (or (memq outline-minor-mode-highlight '(append override)) + (and (eq outline-minor-mode-highlight t) + (not (get-text-property (match-beginning 0) 'face)))) + (overlay-put overlay 'face (outline-font-lock-face)))) + (move-end-of-line 1)))) ;;;###autoload (define-minor-mode outline-minor-mode @@ -592,26 +604,32 @@ outline-next-preface "Skip forward to just before the next heading line. If there's no following heading line, stop before the newline at the end of the buffer." - (if (re-search-forward (concat "\n\\(?:" outline-regexp "\\)") - nil 'move) - (goto-char (match-beginning 0))) - (if (and (bolp) (or outline-blank-line (eobp)) (not (bobp))) - (forward-char -1))) + (when (if outline-search-function + (funcall outline-search-function) + (re-search-forward (concat "\n\\(?:" outline-regexp "\\)") + nil 'move)) + (goto-char (match-beginning 0))) + (when (and (bolp) (or outline-blank-line (eobp)) (not (bobp))) + (forward-char -1))) (defun outline-next-heading () "Move to the next (possibly invisible) heading line." (interactive) ;; Make sure we don't match the heading we're at. - (if (and (bolp) (not (eobp))) (forward-char 1)) - (if (re-search-forward (concat "^\\(?:" outline-regexp "\\)") - nil 'move) - (goto-char (match-beginning 0)))) + (when (and (bolp) (not (eobp))) (forward-char 1)) + (when (if outline-search-function + (funcall outline-search-function) + (re-search-forward (concat "^\\(?:" outline-regexp "\\)") + nil 'move)) + (goto-char (match-beginning 0)))) (defun outline-previous-heading () "Move to the previous (possibly invisible) heading line." (interactive) - (re-search-backward (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil 'backward) + (re-search-backward (concat "^\\(?:" outline-regexp "\\)") + nil 'move))) (defsubst outline-invisible-p (&optional pos) "Non-nil if the character after POS has outline invisible property. @@ -628,8 +646,10 @@ outline-back-to-heading (let (found) (save-excursion (while (not found) - (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)") - nil t) + (or (if outline-search-function + (funcall outline-search-function nil 'backward) + (re-search-backward (concat "^\\(?:" outline-regexp "\\)") + nil t)) (signal 'outline-before-first-heading nil)) (setq found (and (or invisible-ok (not (outline-invisible-p))) (point))))) @@ -642,7 +662,9 @@ outline-on-heading-p (save-excursion (beginning-of-line) (and (bolp) (or invisible-ok (not (outline-invisible-p))) - (looking-at outline-regexp)))) + (if outline-search-function + (funcall outline-search-function nil 'looking-at) + (looking-at outline-regexp))))) (defun outline-insert-heading () "Insert a new heading at same depth at point." @@ -754,7 +776,9 @@ outline-demote (while (and (progn (outline-next-heading) (not (eobp))) (<= (funcall outline-level) level)))) (unless (eobp) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function nil 'looking-at) + (looking-at outline-regexp)) (match-string-no-properties 0)))) ;; Bummer!! There is no higher-level heading in the buffer. (outline-invent-heading head nil)))) @@ -805,7 +829,9 @@ outline-map-region (save-excursion (setq end (copy-marker end)) (goto-char beg) - (when (re-search-forward (concat "^\\(?:" outline-regexp "\\)") end t) + (when (if outline-search-function + (funcall outline-search-function) + (re-search-forward (concat "^\\(?:" outline-regexp "\\)") end t)) (goto-char (match-beginning 0)) (funcall fun) (while (and (progn @@ -877,17 +903,21 @@ outline-next-visible-heading (while (and (not (bobp)) (< arg 0)) (while (and (not (bobp)) (setq found-heading-p - (re-search-backward - (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil 'backward) + (re-search-backward + (concat "^\\(?:" outline-regexp "\\)") + nil 'move))) (outline-invisible-p))) (setq arg (1+ arg))) (while (and (not (eobp)) (> arg 0)) (while (and (not (eobp)) (setq found-heading-p - (re-search-forward - (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function) + (re-search-forward + (concat "^\\(?:" outline-regexp "\\)") + nil 'move))) (outline-invisible-p (match-beginning 0)))) (setq arg (1- arg))) (if found-heading-p (beginning-of-line)))) @@ -1108,7 +1138,9 @@ outline-hide-sublevels (cond (current-prefix-arg (prefix-numeric-value current-prefix-arg)) ((save-excursion (beginning-of-line) - (looking-at outline-regexp)) + (if outline-search-function + (funcall outline-search-function nil 'looking-at) + (looking-at outline-regexp))) (funcall outline-level)) (t 1)))) (if (< levels 1) @@ -1255,7 +1287,9 @@ outline-up-heading (setq level (funcall outline-level))) (setq start-level level)) (setq arg (- arg 1)))) - (looking-at outline-regexp)) + (if outline-search-function + (funcall outline-search-function nil 'looking-at) + (looking-at outline-regexp))) (defun outline-forward-same-level (arg) "Move forward to the ARG'th subheading at same level as this one. @@ -1346,6 +1380,35 @@ outline-headers-as-kill (insert "\n\n")))))) (kill-new (buffer-string))))))) + +;;; Search text-property for outline headings + +(defun outline-search-level-prop (&optional limit how) + (let* ((prop 'outline-level) + (prop-at + (if (eq how 'looking-at) + (get-text-property (point) prop) + (when (get-text-property (point) prop) + ;; Go to the end of the current heading + (if (eq how 'backward) + (text-property-search-backward prop) + (text-property-search-forward prop))) + t)) + (prop-match + (when prop-at + (if (eq how 'backward) + (text-property-search-backward prop) + (text-property-search-forward prop))))) + (if prop-match + (let ((beg (prop-match-beginning prop-match)) + (end (prop-match-end prop-match))) + (if (or (null limit) (< end limit)) + (set-match-data (list beg end)) + (goto-char (or limit (point-max)))) + t) + (goto-char (point-max)) + nil))) + ;;; Initial visibility diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index dbac03432c1..d3c824a4e93 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -1374,7 +1374,12 @@ shortdoc-display-group (unless (bobp) (insert "\n")) (insert (propertize - (concat (substitute-command-keys data) "\n\n") + (substitute-command-keys data) + 'face 'shortdoc-heading + 'shortdoc-section t + 'outline-level 1)) + (insert (propertize + "\n\n" 'face 'shortdoc-heading 'shortdoc-section t))) ;; There may be functions not yet defined in the data. @@ -1397,7 +1402,7 @@ shortdoc--display-function (start-section (point)) arglist-start) ;; Function calling convention. - (insert (propertize "(" 'shortdoc-function function)) + (insert (propertize "(" 'shortdoc-function function 'outline-level 2)) (if (plist-get data :no-manual) (insert-text-button (symbol-name function) @@ -1531,7 +1536,9 @@ shortdoc-mode-map (define-derived-mode shortdoc-mode special-mode "shortdoc" "Mode for shortdoc." - :interactive nil) + :interactive nil + (setq-local outline-search-function #'outline-search-level-prop) + (setq-local outline-level (lambda () (get-text-property (point) 'outline-level)))) (defun shortdoc--goto-section (arg sym &optional reverse) (unless (natnump arg) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Tue Nov 08 14:32:25 2022 Received: (at 53981) by debbugs.gnu.org; 8 Nov 2022 19:32:25 +0000 Received: from localhost ([127.0.0.1]:38199 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osUKe-00016P-W0 for submit@debbugs.gnu.org; Tue, 08 Nov 2022 14:32:25 -0500 Received: from eggs.gnu.org ([209.51.188.92]:57184) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osUKd-00016D-0q for 53981@debbugs.gnu.org; Tue, 08 Nov 2022 14:32:23 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osUKX-0003KA-1I; Tue, 08 Nov 2022 14:32:17 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=q8QfDZT7W0PxHvlSjLg8LoE7V3Hp6P6LRgsXYxnigNg=; b=MF+VbAoqSrcG Nlt9vYzwyG1AZh4nj7kOr5D7rPwJXYaya90ZiVLuwjPJKpLF+t95iVtVXA07qP9guigQWkz88/eJ9 ctW+kbGnpE7Q8jeE262xgrLYpEF9yl2VoYzTGWZVgvQDRh3i5RuquoNNY0xGN+Fst5du07baWTYU9 aeUW3K08ctnqaWTXcl4SwKIpM8ZRzvcd4y/IH3efWzo+tgz6G8IaBzCFA370JLrws+s3cwu1/E4eV tqiQlqwC+m4yMVCJbUa/qEIv4MPkJ4q8LBIIhmwu9Q3Vr4LjVtzvwJxcCX1GJ9LcdjkvujhaQb2sk VDHwnGvhVVW8uoBsFxXy7g==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osUKW-0008SM-Cl; Tue, 08 Nov 2022 14:32:16 -0500 Date: Tue, 08 Nov 2022 21:32:03 +0200 Message-Id: <83a651xmx8.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov In-Reply-To: <86k045b70e.fsf@mail.linkov.net> (message from Juri Linkov on Tue, 08 Nov 2022 21:12:45 +0200) Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <86k045b70e.fsf@mail.linkov.net> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@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: -3.3 (---) > Cc: 53981@debbugs.gnu.org > From: Juri Linkov > Date: Tue, 08 Nov 2022 21:12:45 +0200 > > @@ -474,16 +485,17 @@ outline-minor-mode-highlight-buffer > ;; Fallback to overlays when font-lock is unsupported. > (save-excursion > (goto-char (point-min)) > - (let ((regexp (concat "^\\(?:" outline-regexp "\\).*$"))) > - (while (re-search-forward regexp nil t) > - (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) > - (overlay-put overlay 'outline-highlight t) > - ;; FIXME: Is it possible to override all underlying face attributes? > - (when (or (memq outline-minor-mode-highlight '(append override)) > - (and (eq outline-minor-mode-highlight t) > - (not (get-text-property (match-beginning 0) 'face)))) > - (overlay-put overlay 'face (outline-font-lock-face)))) > - (goto-char (match-end 0)))))) > + (while (if outline-search-function > + (funcall outline-search-function) > + (re-search-forward outline-regexp nil t)) This changes the effect of the code because the new code searches for a different regexp. > @@ -877,17 +903,21 @@ outline-next-visible-heading > (while (and (not (bobp)) (< arg 0)) > (while (and (not (bobp)) > (setq found-heading-p > - (re-search-backward > - (concat "^\\(?:" outline-regexp "\\)") > - nil 'move)) > + (if outline-search-function > + (funcall outline-search-function nil 'backward) > + (re-search-backward > + (concat "^\\(?:" outline-regexp "\\)") > + nil 'move))) > (outline-invisible-p))) > (setq arg (1+ arg))) > (while (and (not (eobp)) (> arg 0)) > (while (and (not (eobp)) > (setq found-heading-p > - (re-search-forward > - (concat "^\\(?:" outline-regexp "\\)") > - nil 'move)) > + (if outline-search-function > + (funcall outline-search-function) > + (re-search-forward > + (concat "^\\(?:" outline-regexp "\\)") > + nil 'move))) > (outline-invisible-p (match-beginning 0)))) These two loops cons a new string each iteration. (So did the original code, but if we are touching this, might as well fix that.) From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 09 12:27:39 2022 Received: (at 53981) by debbugs.gnu.org; 9 Nov 2022 17:27:39 +0000 Received: from localhost ([127.0.0.1]:40794 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osorS-00036y-M7 for submit@debbugs.gnu.org; Wed, 09 Nov 2022 12:27:39 -0500 Received: from relay3-d.mail.gandi.net ([217.70.183.195]:52833) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osorQ-00036X-Lk for 53981@debbugs.gnu.org; Wed, 09 Nov 2022 12:27:37 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id 75CD96000C; Wed, 9 Nov 2022 17:27:28 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <83a651xmx8.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 08 Nov 2022 21:32:03 +0200") Organization: LINKOV.NET References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> Date: Wed, 09 Nov 2022 19:17:31 +0200 Message-ID: <86sfisujx0.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@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: -1.7 (-) --=-=-= Content-Type: text/plain >> + (while (if outline-search-function >> + (funcall outline-search-function) >> + (re-search-forward outline-regexp nil t)) > > This changes the effect of the code because the new code searches for > a different regexp. Sorry, this was an attempt to unify code branches, but this change remained untested. Now fixed below. >> + (if outline-search-function >> + (funcall outline-search-function) >> + (re-search-forward >> + (concat "^\\(?:" outline-regexp "\\)") >> + nil 'move))) > > These two loops cons a new string each iteration. (So did the > original code, but if we are touching this, might as well fix that.) This is optimized as well: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=outline-search-level.patch diff --git a/lisp/apropos.el b/lisp/apropos.el index 624c29cb410..02a32a2e7ce 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -493,7 +493,7 @@ apropos-mode \\{apropos-mode-map}" (make-local-variable 'apropos--current) (setq-local revert-buffer-function #'apropos--revert-buffer) - (setq-local outline-regexp "^[^ \n]+" + (setq-local outline-search-function #'outline-search-level outline-level (lambda () 1) outline-minor-mode-cycle t outline-minor-mode-highlight t @@ -1188,7 +1188,8 @@ apropos-print (insert-text-button (symbol-name symbol) 'type 'apropos-symbol 'skip apropos-multi-type - 'face 'apropos-symbol) + 'face 'apropos-symbol + 'outline-level 1) (setq button-end (point)) (if (and (eq apropos-sort-by-scores 'verbose) (cadr apropos-item)) diff --git a/lisp/outline.el b/lisp/outline.el index a646f71db8b..fcac9d1950b 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -59,6 +59,14 @@ outline-heading-end-regexp in the file it applies to.") ;;;###autoload(put 'outline-heading-end-regexp 'safe-local-variable 'stringp) +(defvar outline-search-function nil + "Function to search the next outline heading. +The function is called with two arguments: the limit of the search +and the optional argument for the backward search; it should return +non-nil, move point (to the end of the buffer when search fails), +and set match-data appropriately if it succeeds; +like re-search-forward with `outline-regexp' would.") + (defvar outline-mode-prefix-map (let ((map (make-sparse-keymap))) (define-key map "@" 'outline-mark-subtree) @@ -233,7 +241,8 @@ outline-mode-map (defvar outline-font-lock-keywords '( ;; Highlight headings according to the level. - (eval . (list (concat "^\\(?:" outline-regexp "\\).*") + (eval . (list (or outline-search-function + (concat "^\\(?:" outline-regexp "\\).*")) 0 '(if outline-minor-mode (if outline-minor-mode-highlight (list 'face (outline-font-lock-face))) @@ -366,7 +375,9 @@ outline-font-lock-face "Return one of `outline-font-lock-faces' for current level." (save-excursion (goto-char (match-beginning 0)) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function nil nil t) + (looking-at outline-regexp)) (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces))))) @@ -474,8 +485,11 @@ outline-minor-mode-highlight-buffer ;; Fallback to overlays when font-lock is unsupported. (save-excursion (goto-char (point-min)) - (let ((regexp (concat "^\\(?:" outline-regexp "\\).*$"))) - (while (re-search-forward regexp nil t) + (let ((regexp (unless outline-search-function + (concat "^\\(?:" outline-regexp "\\).*$")))) + (while (if outline-search-function + (funcall outline-search-function) + (re-search-forward regexp nil t)) (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) (overlay-put overlay 'outline-highlight t) ;; FIXME: Is it possible to override all underlying face attributes? @@ -592,26 +606,32 @@ outline-next-preface "Skip forward to just before the next heading line. If there's no following heading line, stop before the newline at the end of the buffer." - (if (re-search-forward (concat "\n\\(?:" outline-regexp "\\)") - nil 'move) - (goto-char (match-beginning 0))) - (if (and (bolp) (or outline-blank-line (eobp)) (not (bobp))) - (forward-char -1))) + (when (if outline-search-function + (funcall outline-search-function) + (re-search-forward (concat "\n\\(?:" outline-regexp "\\)") + nil 'move)) + (goto-char (match-beginning 0))) + (when (and (bolp) (or outline-blank-line (eobp)) (not (bobp))) + (forward-char -1))) (defun outline-next-heading () "Move to the next (possibly invisible) heading line." (interactive) ;; Make sure we don't match the heading we're at. - (if (and (bolp) (not (eobp))) (forward-char 1)) - (if (re-search-forward (concat "^\\(?:" outline-regexp "\\)") - nil 'move) - (goto-char (match-beginning 0)))) + (when (and (bolp) (not (eobp))) (forward-char 1)) + (when (if outline-search-function + (funcall outline-search-function) + (re-search-forward (concat "^\\(?:" outline-regexp "\\)") + nil 'move)) + (goto-char (match-beginning 0)))) (defun outline-previous-heading () "Move to the previous (possibly invisible) heading line." (interactive) - (re-search-backward (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil t) + (re-search-backward (concat "^\\(?:" outline-regexp "\\)") + nil 'move))) (defsubst outline-invisible-p (&optional pos) "Non-nil if the character after POS has outline invisible property. @@ -628,8 +648,10 @@ outline-back-to-heading (let (found) (save-excursion (while (not found) - (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)") - nil t) + (or (if outline-search-function + (funcall outline-search-function nil t) + (re-search-backward (concat "^\\(?:" outline-regexp "\\)") + nil t)) (signal 'outline-before-first-heading nil)) (setq found (and (or invisible-ok (not (outline-invisible-p))) (point))))) @@ -642,7 +664,9 @@ outline-on-heading-p (save-excursion (beginning-of-line) (and (bolp) (or invisible-ok (not (outline-invisible-p))) - (looking-at outline-regexp)))) + (if outline-search-function + (funcall outline-search-function nil nil t) + (looking-at outline-regexp))))) (defun outline-insert-heading () "Insert a new heading at same depth at point." @@ -754,7 +778,9 @@ outline-demote (while (and (progn (outline-next-heading) (not (eobp))) (<= (funcall outline-level) level)))) (unless (eobp) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function nil nil t) + (looking-at outline-regexp)) (match-string-no-properties 0)))) ;; Bummer!! There is no higher-level heading in the buffer. (outline-invent-heading head nil)))) @@ -805,7 +831,9 @@ outline-map-region (save-excursion (setq end (copy-marker end)) (goto-char beg) - (when (re-search-forward (concat "^\\(?:" outline-regexp "\\)") end t) + (when (if outline-search-function + (funcall outline-search-function) + (re-search-forward (concat "^\\(?:" outline-regexp "\\)") end t)) (goto-char (match-beginning 0)) (funcall fun) (while (and (progn @@ -873,21 +901,23 @@ outline-next-visible-heading (if (< arg 0) (beginning-of-line) (end-of-line)) - (let (found-heading-p) + (let ((regexp (unless outline-search-function + (concat "^\\(?:" outline-regexp "\\)"))) + found-heading-p) (while (and (not (bobp)) (< arg 0)) (while (and (not (bobp)) (setq found-heading-p - (re-search-backward - (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil t) + (re-search-backward regexp nil 'move))) (outline-invisible-p))) (setq arg (1+ arg))) (while (and (not (eobp)) (> arg 0)) (while (and (not (eobp)) (setq found-heading-p - (re-search-forward - (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function) + (re-search-forward regexp nil 'move))) (outline-invisible-p (match-beginning 0)))) (setq arg (1- arg))) (if found-heading-p (beginning-of-line)))) @@ -1108,7 +1138,9 @@ outline-hide-sublevels (cond (current-prefix-arg (prefix-numeric-value current-prefix-arg)) ((save-excursion (beginning-of-line) - (looking-at outline-regexp)) + (if outline-search-function + (funcall outline-search-function nil nil t) + (looking-at outline-regexp))) (funcall outline-level)) (t 1)))) (if (< levels 1) @@ -1255,7 +1287,9 @@ outline-up-heading (setq level (funcall outline-level))) (setq start-level level)) (setq arg (- arg 1)))) - (looking-at outline-regexp)) + (if outline-search-function + (funcall outline-search-function nil nil t) + (looking-at outline-regexp))) (defun outline-forward-same-level (arg) "Move forward to the ARG'th subheading at same level as this one. @@ -1346,6 +1380,38 @@ outline-headers-as-kill (insert "\n\n")))))) (kill-new (buffer-string))))))) + +;;; Search text-property for outline headings + +;;;###autoload +(defun outline-search-level (&optional limit backward looking-at) + (outline-search-text-property 'outline-level limit backward looking-at)) + +(defun outline-search-text-property (prop &optional limit backward looking-at) + (let* ((prop-at + (if looking-at + (get-text-property (point) prop) + (when (get-text-property (point) prop) + ;; Go to the end of the current heading + (if backward + (text-property-search-backward prop) + (text-property-search-forward prop))) + t)) + (prop-match + (when prop-at + (if backward + (text-property-search-backward prop) + (text-property-search-forward prop))))) + (if prop-match + (let ((beg (prop-match-beginning prop-match)) + (end (prop-match-end prop-match))) + (if (or (null limit) (< end limit)) + (set-match-data (list beg end)) + (goto-char (or limit (point-max)))) + t) + (goto-char (point-max)) + nil))) + ;;; Initial visibility diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index dbac03432c1..18b758a9ca3 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -1374,7 +1374,12 @@ shortdoc-display-group (unless (bobp) (insert "\n")) (insert (propertize - (concat (substitute-command-keys data) "\n\n") + (substitute-command-keys data) + 'face 'shortdoc-heading + 'shortdoc-section t + 'outline-level 1)) + (insert (propertize + "\n\n" 'face 'shortdoc-heading 'shortdoc-section t))) ;; There may be functions not yet defined in the data. @@ -1397,7 +1402,7 @@ shortdoc--display-function (start-section (point)) arglist-start) ;; Function calling convention. - (insert (propertize "(" 'shortdoc-function function)) + (insert (propertize "(" 'shortdoc-function function 'outline-level 2)) (if (plist-get data :no-manual) (insert-text-button (symbol-name function) @@ -1531,7 +1536,9 @@ shortdoc-mode-map (define-derived-mode shortdoc-mode special-mode "shortdoc" "Mode for shortdoc." - :interactive nil) + :interactive nil + (setq-local outline-search-function #'outline-search-level) + (setq-local outline-level (lambda () (get-text-property (point) 'outline-level)))) (defun shortdoc--goto-section (arg sym &optional reverse) (unless (natnump arg) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 09 12:27:42 2022 Received: (at 53981) by debbugs.gnu.org; 9 Nov 2022 17:27:42 +0000 Received: from localhost ([127.0.0.1]:40797 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osorW-00037D-HO for submit@debbugs.gnu.org; Wed, 09 Nov 2022 12:27:42 -0500 Received: from relay2-d.mail.gandi.net ([217.70.183.194]:44057) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osorV-00036p-Ic for 53981@debbugs.gnu.org; Wed, 09 Nov 2022 12:27:42 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id 3D7CD40008; Wed, 9 Nov 2022 17:27:32 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <83a651xmx8.fsf@gnu.org> (Eli Zaretskii's message of "Tue, 08 Nov 2022 21:32:03 +0200") Organization: LINKOV.NET References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> Date: Wed, 09 Nov 2022 19:24:32 +0200 Message-ID: <86leokujlb.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@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: -1.7 (-) --=-=-= Content-Type: text/plain > These two loops cons a new string each iteration. (So did the > original code, but if we are touching this, might as well fix that.) BTW, the patch uses functions from text-property-search.el. But these useful functions are still not autoloaded. Here is the patch to autoload them: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=text-property-search-autoload.patch diff --git a/lisp/emacs-lisp/text-property-search.el b/lisp/emacs-lisp/text-property-search.el index d41222bdbf1..7e78fdfe7d6 100644 --- a/lisp/emacs-lisp/text-property-search.el +++ b/lisp/emacs-lisp/text-property-search.el @@ -26,9 +26,12 @@ (eval-when-compile (require 'cl-lib)) +;;;###autoload (autoload 'prop-match-beginning "text-property-search") +;;;###autoload (autoload 'prop-match-end "text-property-search") (cl-defstruct (prop-match) beginning end value) +;;;###autoload (defun text-property-search-forward (property &optional value predicate not-current) "Search for the next region of text where PREDICATE is true. @@ -131,7 +134,7 @@ text-property--find-end-forward :end end :value (get-text-property start property)))) - +;;;###autoload (defun text-property-search-backward (property &optional value predicate not-current) "Search for the previous region of text whose PROPERTY matches VALUE. diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el index 61a26b504c8..5a27dcd4c27 100644 --- a/lisp/international/mule-cmds.el +++ b/lisp/international/mule-cmds.el @@ -3284,10 +3284,6 @@ reorder-starters (defvar reorder-enders "[\u202C\u2069]+\\|\n" "Regular expression for characters that end forced-reordered text.") -(autoload 'text-property-search-forward "text-property-search") -(autoload 'prop-match-beginning "text-property-search") -(autoload 'prop-match-end "text-property-search") - (defun highlight-confusing-reorderings (beg end &optional remove) "Highlight text in region that might be bidi-reordered in suspicious ways. This command find and highlights segments of buffer text that could have diff --git a/lisp/bookmark.el b/lisp/bookmark.el index b57ad12986d..d0a14b0cebf 100644 --- a/lisp/bookmark.el +++ b/lisp/bookmark.el @@ -34,7 +34,6 @@ (require 'pp) (require 'tabulated-list) -(require 'text-property-search) (require 'fringe) ; for builds --without-x (eval-when-compile (require 'cl-lib)) --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 09 12:34:59 2022 Received: (at 53981) by debbugs.gnu.org; 9 Nov 2022 17:34:59 +0000 Received: from localhost ([127.0.0.1]:40819 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osoyZ-0003Jh-3h for submit@debbugs.gnu.org; Wed, 09 Nov 2022 12:34:59 -0500 Received: from eggs.gnu.org ([209.51.188.92]:38392) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osoyX-0003JM-J4 for 53981@debbugs.gnu.org; Wed, 09 Nov 2022 12:34:58 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osoyQ-0005lk-SK; Wed, 09 Nov 2022 12:34:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=d842PZPflzuCCjPgh2OuI3GUlYkAyX7QuE+t3wVJIYg=; b=H3uzeVgNib1f oYh7Sk08/+T6fV39Xp+5a7CQsOI+TjQWrPLzW4mRa0diXQ1DDgdDvUnQqclDy53QLfpHdfX06Yd/2 NsFsX0oGTp4q9ssqFy1cqM3ul1HR81mEkZ2UnbDBGftK1rPt0bNzLm1Ijhy0zyvrKDryxdRtsKxbG tsTw3IJ2nRZ6iVus/UgMbFu57YXoz+7Kve8l0nr6ILX/XpNCQqfgWmGZf7tsKo0guf07rQPogyDLv FhK6ZRztUCjzR3HJeMxEmq2pbZs462tn3I/Dz/zqB8Z5BJukfdA4QVC7n85AVEO/lcOIqhPcA9h5+ UWXIQMNSBwTPG9j4Yrj5BA==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osoyP-0001uK-KJ; Wed, 09 Nov 2022 12:34:50 -0500 Date: Wed, 09 Nov 2022 19:34:46 +0200 Message-Id: <83a650t4jt.fsf@gnu.org> From: Eli Zaretskii To: Juri Linkov , Stefan Monnier In-Reply-To: <86leokujlb.fsf@mail.linkov.net> (message from Juri Linkov on Wed, 09 Nov 2022 19:24:32 +0200) Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86leokujlb.fsf@mail.linkov.net> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@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: -3.3 (---) > From: Juri Linkov > Cc: mail@daniel-mendler.de, 53981@debbugs.gnu.org > Date: Wed, 09 Nov 2022 19:24:32 +0200 > > BTW, the patch uses functions from text-property-search.el. > But these useful functions are still not autoloaded. > Here is the patch to autoload them: I don't necessarily disagree, but do we have any policies or guidelines regarding when to autoload a function? It saves us a 'require', but what we "gain" instead is a (small) inflation of the base memory footprint of the Emacs process. So it isn't free. Lars, Stefan, any comments? From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 09 14:48:06 2022 Received: (at 53981) by debbugs.gnu.org; 9 Nov 2022 19:48:06 +0000 Received: from localhost ([127.0.0.1]:40945 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osr3O-0000Q1-6R for submit@debbugs.gnu.org; Wed, 09 Nov 2022 14:48:06 -0500 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:42124) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osr3M-0000P4-EK for 53981@debbugs.gnu.org; Wed, 09 Nov 2022 14:48:04 -0500 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id D1BD68088B; Wed, 9 Nov 2022 14:47:58 -0500 (EST) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 42F9580258; Wed, 9 Nov 2022 14:47:57 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1668023277; bh=VhPK59Az7dEKgl2BdNmE6cfDWU/hR1fPb2bVic20cco=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=ZFpjOlP6kCb/LmUHQ9jiirh5RAX7c4ViMDerSE3uRwIXwMZxt/Zhq2GuiuwXyiEnP JSXkBQCcQSVXU1qeOO1hIygSw4YeH/2duAUkswfjth8ybaV1D0chu8bUfyV0VBFIFJ VVwBOu7t2bpZAE2H4S2AXltbf6AakNDKQmQNahElT7rZ9eEgQLJtr0X3O06kdeTiv4 yMuoIPWjuOdwOIiKWSaE1svN/2SKCZBWeAWrFOfxRPVJa0AVoyFF1e49ka96Wnw9Dq yQRnQooAwrnVpCD2Lrs7zTdPK5J1ZIgvcjInSS2pe+m+aQRK9YPEiJl7Rd9GQTD3uz Qw/kJ6hQLT2YA== Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 31E60120689; Wed, 9 Nov 2022 14:47:57 -0500 (EST) From: Stefan Monnier To: Eli Zaretskii Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <83a650t4jt.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 09 Nov 2022 19:34:46 +0200") Message-ID: References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86leokujlb.fsf@mail.linkov.net> <83a650t4jt.fsf@gnu.org> Date: Wed, 09 Nov 2022 14:47:56 -0500 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.034 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@debbugs.gnu.org, Juri Linkov 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.3 (---) >> BTW, the patch uses functions from text-property-search.el. >> But these useful functions are still not autoloaded. >> Here is the patch to autoload them: > > I don't necessarily disagree, but do we have any policies or > guidelines regarding when to autoload a function? It saves us a > 'require', but what we "gain" instead is a (small) inflation of the > base memory footprint of the Emacs process. So it isn't free. > > Lars, Stefan, any comments? For interactive functions, it's usually decided by whether the command can be useful before the package is loaded (i,e,. usually an entry point to the package). For functions (i.e. exported from what is basically a library), the same kind of tradeoff applies: - is it likely that this one autoload will let other packages use this library without a `require` at all (e.g. `define-inline`), or will we end up needing N autoloads anyway? - how commonly is this library used (i.e. is it worth carrying the N autoloads in every Emacs session, compared to having to write `require` in a handful of files). Stefan From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 09 15:09:15 2022 Received: (at 53981) by debbugs.gnu.org; 9 Nov 2022 20:09:15 +0000 Received: from localhost ([127.0.0.1]:40991 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osrNq-0000xt-Rd for submit@debbugs.gnu.org; Wed, 09 Nov 2022 15:09:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:51238) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osrNn-0000xe-HI for 53981@debbugs.gnu.org; Wed, 09 Nov 2022 15:09:13 -0500 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osrNg-0002pC-N5; Wed, 09 Nov 2022 15:09:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=tCc+qVWhRrNIZ9sYm/VYGrqsUQs5/MHwN4/qkPI7z5k=; b=JN2SC6cn+eVg V1DDXseQj5ovYHlmT32avVvPWhRSoh8XOUR5gmLOd0l4ZlKcLBn2HQ82s82KB1i4dJaOfQRxu2WZ2 mYxaA4VGD47p31bGODhlJVxiS/qMJDQ4e1K6iz5bTXWPGKx1jHtZ5p4oB3oOuVfXwSpmo4O6vPbJB JRKHT3XEhkOw61cMBZ/PO/G3AmmZQf3QdqUfC14Q+7DBv8yOs0hqehwZF96aoJizvRlKa7Cz3uZh8 EOBmZojb5wuhpNcaIdyMD740Kb8/NvCfq9w0VDFxLLhPtiNDTqiW13/RKoCiqNYzsbvuZDbTbNoRD okEIpC2FW93V/ytocYPNsg==; Received: from [87.69.77.57] (helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1osrNg-0001Jb-0N; Wed, 09 Nov 2022 15:09:04 -0500 Date: Wed, 09 Nov 2022 22:09:02 +0200 Message-Id: <834jv7ubz5.fsf@gnu.org> From: Eli Zaretskii To: Stefan Monnier In-Reply-To: (message from Stefan Monnier on Wed, 09 Nov 2022 14:47:56 -0500) Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86leokujlb.fsf@mail.linkov.net> <83a650t4jt.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@debbugs.gnu.org, juri@linkov.net 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.3 (---) > From: Stefan Monnier > Cc: Juri Linkov , mail@daniel-mendler.de, > 53981@debbugs.gnu.org > Date: Wed, 09 Nov 2022 14:47:56 -0500 > > - is it likely that this one autoload will let other packages use this > library without a `require` at all (e.g. `define-inline`), or will we > end up needing N autoloads anyway? I don't understand this. > - how commonly is this library used (i.e. is it worth carrying the > N autoloads in every Emacs session, compared to having to write > `require` in a handful of files). The answer to this one is that we currently have just 2 packages that require this library. From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 09 15:14:55 2022 Received: (at 53981) by debbugs.gnu.org; 9 Nov 2022 20:14:55 +0000 Received: from localhost ([127.0.0.1]:40997 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osrTL-00015g-83 for submit@debbugs.gnu.org; Wed, 09 Nov 2022 15:14:55 -0500 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:22932) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1osrTJ-00015U-Em for 53981@debbugs.gnu.org; Wed, 09 Nov 2022 15:14:53 -0500 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 0932D441452; Wed, 9 Nov 2022 15:14:48 -0500 (EST) Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 9660A4413F1; Wed, 9 Nov 2022 15:14:46 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1668024886; bh=luVLZZxpVAr2a4X0TtWSuyDnRiGuPdoSk8/uYvcg5g8=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=C+r/RqSP5e3tOY1IBfX0JlZUBh9D/3xhHJA9Iw4WnhsbbE93zEGKMnR0U9AMHOavK Hv0OpWxP8pkX12Di9bLRnHozDvEFwRLH4uO2dW0iHBSrdFVM49LQiVPvlvp+j8DB1j LSPnRrUD3OXJx6VJhpiwEa3xuSW0vnIsYe0S8QLsPnewbDyDhSnega2sfRaUfIFBBt wQeWMfuwL8oxCe5XB5Ic+Ahod5ob853LCJsar5AuvqVhzSCDxgC3rmMYPSZ16UTgPd st1lDdSpVGyleY0jWojqfpCxBsW470wARUD4aLyOJWpQX7UyZW2Lwz2/A2Vhv3zk6A Gf+qNF7GOsb6g== Received: from lechazo (lechon.iro.umontreal.ca [132.204.27.242]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 87DFA120DB0; Wed, 9 Nov 2022 15:14:46 -0500 (EST) From: Stefan Monnier To: Eli Zaretskii Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <834jv7ubz5.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 09 Nov 2022 22:09:02 +0200") Message-ID: References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86leokujlb.fsf@mail.linkov.net> <83a650t4jt.fsf@gnu.org> <834jv7ubz5.fsf@gnu.org> Date: Wed, 09 Nov 2022 15:14:43 -0500 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.178 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@debbugs.gnu.org, juri@linkov.net 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.3 (---) >> - is it likely that this one autoload will let other packages use this >> library without a `require` at all (e.g. `define-inline`), or will we >> end up needing N autoloads anyway? > I don't understand this. If the library defines N functions and we'd end up needing to autoload almost all of them because none of them is more of an "entry point" to the library than any other, then `require` is usually preferable. In contrast, if most of the functions in the library are only used internally, or only after some other function in the library has been called, then we just need a small number of autoloads for the rare few entry points, making it more worthwhile. >> - how commonly is this library used (i.e. is it worth carrying the >> N autoloads in every Emacs session, compared to having to write >> `require` in a handful of files). > > The answer to this one is that we currently have just 2 packages that > require this library. Then I'd go with `require`. Stefan From debbugs-submit-bounces@debbugs.gnu.org Thu Nov 10 03:08:37 2022 Received: (at 53981) by debbugs.gnu.org; 10 Nov 2022 08:08:37 +0000 Received: from localhost ([127.0.0.1]:41794 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ot2c1-0002BP-30 for submit@debbugs.gnu.org; Thu, 10 Nov 2022 03:08:37 -0500 Received: from relay11.mail.gandi.net ([217.70.178.231]:47357) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ot2bz-0002B7-GA for 53981@debbugs.gnu.org; Thu, 10 Nov 2022 03:08:35 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id B0EEC100016; Thu, 10 Nov 2022 08:08:24 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <834jv7ubz5.fsf@gnu.org> (Eli Zaretskii's message of "Wed, 09 Nov 2022 22:09:02 +0200") Organization: LINKOV.NET References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86leokujlb.fsf@mail.linkov.net> <83a650t4jt.fsf@gnu.org> <834jv7ubz5.fsf@gnu.org> Date: Thu, 10 Nov 2022 09:42:46 +0200 Message-ID: <86o7tfqn51.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@debbugs.gnu.org, Stefan Monnier 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: -1.7 (-) >> - how commonly is this library used (i.e. is it worth carrying the >> N autoloads in every Emacs session, compared to having to write >> `require` in a handful of files). > > The answer to this one is that we currently have just 2 packages that > require this library. I counted more: - lisp/emacs-lisp/multisession.el - lisp/emacs-lisp/shortdoc.el - lisp/emacs-lisp/vtable.el - lisp/gnus/gnus-util.el - lisp/help.el - lisp/image/image-crop.el - lisp/international/mule-cmds.el - lisp/net/eww.el - lisp/net/shr.el - lisp/net/tramp-crypt.el - lisp/progmodes/compile.el - lisp/textmodes/enriched.el - lisp/textmodes/string-edit.el All they use text-property-search-forward and text-property-search-backward as entry points. From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 16 14:17:13 2022 Received: (at 53981) by debbugs.gnu.org; 16 Nov 2022 19:17:13 +0000 Received: from localhost ([127.0.0.1]:58175 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ovNuK-0005Mq-2x for submit@debbugs.gnu.org; Wed, 16 Nov 2022 14:17:12 -0500 Received: from relay9-d.mail.gandi.net ([217.70.183.199]:38527) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ovNuH-0005Ma-SY for 53981@debbugs.gnu.org; Wed, 16 Nov 2022 14:17:10 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id 18899FF802; Wed, 16 Nov 2022 19:16:59 +0000 (UTC) From: Juri Linkov To: Eli Zaretskii Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <86sfisujx0.fsf@mail.linkov.net> (Juri Linkov's message of "Wed, 09 Nov 2022 19:17:31 +0200") Organization: LINKOV.NET References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86sfisujx0.fsf@mail.linkov.net> Date: Wed, 16 Nov 2022 21:14:37 +0200 Message-ID: <86cz9m1zky.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, 53981@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: -1.7 (-) --=-=-= Content-Type: text/plain >>> + (re-search-forward >>> + (concat "^\\(?:" outline-regexp "\\)") >>> + nil 'move))) >> >> These two loops cons a new string each iteration. (So did the >> original code, but if we are touching this, might as well fix that.) > > This is optimized as well: Here is a more tested patch that works in apropos and shortdoc. Also tested for group outlines in the Completions buffer with: ``` (setq-local outline-search-function (lambda (&optional bound move backward looking-at) (outline-search-text-property 'face 'completions-group-separator bound move backward looking-at)) outline-level (lambda () 1)) ``` It even works when using the search function that searches for outline-regexp. This better shows the meaning of its arguments: ``` (setq-default outline-search-function (lambda (&optional bound move backward looking-at) (cond (looking-at (looking-at outline-regexp)) (backward (re-search-backward (concat "^\\(?:" outline-regexp "\\).*") bound (if move 'move t))) (t (re-search-forward (concat "^\\(?:" outline-regexp "\\).*") bound (if move 'move t))))) outline-level (lambda () (looking-at outline-regexp) (outline-level))) ``` As can be seen, the default outline-level function can't be used, because the search function is expected to match to the end of the heading line, but the default outline-level expects to match only beginning of the outline heading. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=outline-search-function.patch diff --git a/lisp/emacs-lisp/shortdoc.el b/lisp/emacs-lisp/shortdoc.el index dbac03432c1..494e5c4123b 100644 --- a/lisp/emacs-lisp/shortdoc.el +++ b/lisp/emacs-lisp/shortdoc.el @@ -1374,13 +1374,19 @@ shortdoc-display-group (unless (bobp) (insert "\n")) (insert (propertize - (concat (substitute-command-keys data) "\n\n") + (substitute-command-keys data) + 'face 'shortdoc-heading + 'shortdoc-section t + 'outline-level 1)) + (insert (propertize + "\n\n" 'face 'shortdoc-heading 'shortdoc-section t))) ;; There may be functions not yet defined in the data. ((fboundp (car data)) (when prev - (insert (make-separator-line))) + (insert (make-separator-line) + (propertize "\n" 'face '(:height 0)))) (setq prev t) (shortdoc--display-function data)))) (cdr (assq group shortdoc--groups)))) @@ -1397,7 +1403,7 @@ shortdoc--display-function (start-section (point)) arglist-start) ;; Function calling convention. - (insert (propertize "(" 'shortdoc-function function)) + (insert (propertize "(" 'shortdoc-function function 'outline-level 2)) (if (plist-get data :no-manual) (insert-text-button (symbol-name function) @@ -1531,7 +1537,9 @@ shortdoc-mode-map (define-derived-mode shortdoc-mode special-mode "shortdoc" "Mode for shortdoc." - :interactive nil) + :interactive nil + (setq-local outline-search-function #'outline-search-level + outline-level (lambda () (get-text-property (point) 'outline-level)))) (defun shortdoc--goto-section (arg sym &optional reverse) (unless (natnump arg) diff --git a/lisp/apropos.el b/lisp/apropos.el index 62a37df8207..e5c998ee77d 100644 --- a/lisp/apropos.el +++ b/lisp/apropos.el @@ -492,7 +492,7 @@ apropos-mode \\{apropos-mode-map}" (make-local-variable 'apropos--current) (setq-local revert-buffer-function #'apropos--revert-buffer) - (setq-local outline-regexp "^[^ \n]+" + (setq-local outline-search-function #'outline-search-level outline-level (lambda () 1) outline-minor-mode-cycle t outline-minor-mode-highlight t @@ -1187,7 +1187,8 @@ apropos-print (insert-text-button (symbol-name symbol) 'type 'apropos-symbol 'skip apropos-multi-type - 'face 'apropos-symbol) + 'face 'apropos-symbol + 'outline-level 1) (setq button-end (point)) (if (and (eq apropos-sort-by-scores 'verbose) (cadr apropos-item)) diff --git a/lisp/outline.el b/lisp/outline.el index a646f71db8b..fbc3a57ee91 100644 --- a/lisp/outline.el +++ b/lisp/outline.el @@ -59,6 +59,18 @@ outline-heading-end-regexp in the file it applies to.") ;;;###autoload(put 'outline-heading-end-regexp 'safe-local-variable 'stringp) +(defvar outline-search-function nil + "Function to search the next outline heading. +The function is called with four optional arguments: BOUND, MOVE, BACKWARD, +LOOKING-AT. The first two arguments BOUND and MOVE are almost the same as +the BOUND and NOERROR arguments of `re-search-forward', with the difference +that MOVE accepts only a boolean, either nil or non-nil. When the argument +BACKWARD is non-nil, the search should search backward like +`re-search-backward' does. When the argument LOOKING-AT is non-nil, +it should imitate the function `looking-at'. In case of a successful +search, the function should return non-nil, move point, and set +match-data appropriately.") + (defvar outline-mode-prefix-map (let ((map (make-sparse-keymap))) (define-key map "@" 'outline-mark-subtree) @@ -233,7 +245,8 @@ outline-mode-map (defvar outline-font-lock-keywords '( ;; Highlight headings according to the level. - (eval . (list (concat "^\\(?:" outline-regexp "\\).*") + (eval . (list (or outline-search-function + (concat "^\\(?:" outline-regexp "\\).*")) 0 '(if outline-minor-mode (if outline-minor-mode-highlight (list 'face (outline-font-lock-face))) @@ -366,7 +379,9 @@ outline-font-lock-face "Return one of `outline-font-lock-faces' for current level." (save-excursion (goto-char (match-beginning 0)) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function nil nil nil t) + (looking-at outline-regexp)) (aref outline-font-lock-faces (% (1- (funcall outline-level)) (length outline-font-lock-faces))))) @@ -474,8 +489,11 @@ outline-minor-mode-highlight-buffer ;; Fallback to overlays when font-lock is unsupported. (save-excursion (goto-char (point-min)) - (let ((regexp (concat "^\\(?:" outline-regexp "\\).*$"))) - (while (re-search-forward regexp nil t) + (let ((regexp (unless outline-search-function + (concat "^\\(?:" outline-regexp "\\).*$")))) + (while (if outline-search-function + (funcall outline-search-function) + (re-search-forward regexp nil t)) (let ((overlay (make-overlay (match-beginning 0) (match-end 0)))) (overlay-put overlay 'outline-highlight t) ;; FIXME: Is it possible to override all underlying face attributes? @@ -592,26 +610,34 @@ outline-next-preface "Skip forward to just before the next heading line. If there's no following heading line, stop before the newline at the end of the buffer." - (if (re-search-forward (concat "\n\\(?:" outline-regexp "\\)") - nil 'move) - (goto-char (match-beginning 0))) - (if (and (bolp) (or outline-blank-line (eobp)) (not (bobp))) - (forward-char -1))) + (when (if outline-search-function + (funcall outline-search-function nil t) + (re-search-forward (concat "\n\\(?:" outline-regexp "\\)") + nil 'move)) + (goto-char (match-beginning 0)) + ;; Compensate "\n" from the beginning of regexp + (when (and outline-search-function (not (bobp))) (forward-char -1))) + (when (and (bolp) (or outline-blank-line (eobp)) (not (bobp))) + (forward-char -1))) (defun outline-next-heading () "Move to the next (possibly invisible) heading line." (interactive) ;; Make sure we don't match the heading we're at. - (if (and (bolp) (not (eobp))) (forward-char 1)) - (if (re-search-forward (concat "^\\(?:" outline-regexp "\\)") - nil 'move) - (goto-char (match-beginning 0)))) + (when (and (bolp) (not (eobp))) (forward-char 1)) + (when (if outline-search-function + (funcall outline-search-function nil t) + (re-search-forward (concat "^\\(?:" outline-regexp "\\)") + nil 'move)) + (goto-char (match-beginning 0)))) (defun outline-previous-heading () "Move to the previous (possibly invisible) heading line." (interactive) - (re-search-backward (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil t t) + (re-search-backward (concat "^\\(?:" outline-regexp "\\)") + nil 'move))) (defsubst outline-invisible-p (&optional pos) "Non-nil if the character after POS has outline invisible property. @@ -628,8 +654,10 @@ outline-back-to-heading (let (found) (save-excursion (while (not found) - (or (re-search-backward (concat "^\\(?:" outline-regexp "\\)") - nil t) + (or (if outline-search-function + (funcall outline-search-function nil nil t) + (re-search-backward (concat "^\\(?:" outline-regexp "\\)") + nil t)) (signal 'outline-before-first-heading nil)) (setq found (and (or invisible-ok (not (outline-invisible-p))) (point))))) @@ -642,7 +670,9 @@ outline-on-heading-p (save-excursion (beginning-of-line) (and (bolp) (or invisible-ok (not (outline-invisible-p))) - (looking-at outline-regexp)))) + (if outline-search-function + (funcall outline-search-function nil nil nil t) + (looking-at outline-regexp))))) (defun outline-insert-heading () "Insert a new heading at same depth at point." @@ -754,7 +784,9 @@ outline-demote (while (and (progn (outline-next-heading) (not (eobp))) (<= (funcall outline-level) level)))) (unless (eobp) - (looking-at outline-regexp) + (if outline-search-function + (funcall outline-search-function nil nil nil t) + (looking-at outline-regexp)) (match-string-no-properties 0)))) ;; Bummer!! There is no higher-level heading in the buffer. (outline-invent-heading head nil)))) @@ -805,7 +837,9 @@ outline-map-region (save-excursion (setq end (copy-marker end)) (goto-char beg) - (when (re-search-forward (concat "^\\(?:" outline-regexp "\\)") end t) + (when (if outline-search-function + (funcall outline-search-function end) + (re-search-forward (concat "^\\(?:" outline-regexp "\\)") end t)) (goto-char (match-beginning 0)) (funcall fun) (while (and (progn @@ -873,21 +907,23 @@ outline-next-visible-heading (if (< arg 0) (beginning-of-line) (end-of-line)) - (let (found-heading-p) + (let ((regexp (unless outline-search-function + (concat "^\\(?:" outline-regexp "\\)"))) + found-heading-p) (while (and (not (bobp)) (< arg 0)) (while (and (not (bobp)) (setq found-heading-p - (re-search-backward - (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil t t) + (re-search-backward regexp nil 'move))) (outline-invisible-p))) (setq arg (1+ arg))) (while (and (not (eobp)) (> arg 0)) (while (and (not (eobp)) (setq found-heading-p - (re-search-forward - (concat "^\\(?:" outline-regexp "\\)") - nil 'move)) + (if outline-search-function + (funcall outline-search-function nil t) + (re-search-forward regexp nil 'move))) (outline-invisible-p (match-beginning 0)))) (setq arg (1- arg))) (if found-heading-p (beginning-of-line)))) @@ -1107,8 +1143,11 @@ outline-hide-sublevels (interactive (list (cond (current-prefix-arg (prefix-numeric-value current-prefix-arg)) - ((save-excursion (beginning-of-line) - (looking-at outline-regexp)) + ((save-excursion + (beginning-of-line) + (if outline-search-function + (funcall outline-search-function nil nil nil t) + (looking-at outline-regexp))) (funcall outline-level)) (t 1)))) (if (< levels 1) @@ -1255,7 +1294,9 @@ outline-up-heading (setq level (funcall outline-level))) (setq start-level level)) (setq arg (- arg 1)))) - (looking-at outline-regexp)) + (if outline-search-function + (funcall outline-search-function nil nil nil t) + (looking-at outline-regexp))) (defun outline-forward-same-level (arg) "Move forward to the ARG'th subheading at same level as this one. @@ -1313,6 +1354,51 @@ outline-get-last-sibling (if (< (funcall outline-level) level) nil (point))))) + + +;;; Search text-property for outline headings + +;;;###autoload +(defun outline-search-level (&optional bound move backward looking-at) + "Search for the next text property `outline-level'. +The arguments are the same as in `outline-search-text-property', +except the hard-coded property name `outline-level'. +This function is intended to be used in `outline-search-function'." + (outline-search-text-property 'outline-level nil bound move backward looking-at)) + +(defun outline-search-text-property (property &optional value bound move backward looking-at) + "Search for the next text property PROPERTY with VALUE. +The rest of arguments are described in `outline-search-function'." + (if looking-at + (when (if value (eq (get-text-property (point) property) value) + (get-text-property (point) property)) + (set-match-data (list (pos-bol) (pos-eol))) + t) + ;; Go to the end when in the middle of heading + (when (and (not backward) + (if value (eq (get-text-property (point) property) value) + (get-text-property (point) property)) + (not (or (bobp) + (not (if value + (eq (get-text-property (1- (point)) property) value) + (get-text-property (1- (point)) property)))))) + (goto-char (pos-eol))) + (let ((prop-match (if backward + (text-property-search-backward property value (and value t)) + (text-property-search-forward property value (and value t))))) + (if prop-match + (let ((beg (prop-match-beginning prop-match)) + (end (prop-match-end prop-match))) + (if (or (null bound) (<= end bound)) + (progn (goto-char end) + (goto-char (pos-eol)) + (set-match-data (list beg (point))) + t) + (when move (goto-char bound)) + nil)) + (when move (goto-char (or bound (point-max)))) + nil)))) + (defun outline-headers-as-kill (beg end) "Save the visible outline headers between BEG and END to the kill ring. --=-=-=-- From debbugs-submit-bounces@debbugs.gnu.org Mon Nov 21 02:58:26 2022 Received: (at 53981) by debbugs.gnu.org; 21 Nov 2022 07:58:26 +0000 Received: from localhost ([127.0.0.1]:45247 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ox1hB-00060f-OE for submit@debbugs.gnu.org; Mon, 21 Nov 2022 02:58:25 -0500 Received: from relay10.mail.gandi.net ([217.70.178.230]:38453) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ox1h6-00060A-Nk; Mon, 21 Nov 2022 02:58:21 -0500 Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id 2CC39240008; Mon, 21 Nov 2022 07:58:12 +0000 (UTC) From: Juri Linkov To: 53981@debbugs.gnu.org Subject: Re: bug#53981: 28.0.91; shortdoc: Add support for outline-minor-mode In-Reply-To: <86cz9m1zky.fsf@mail.linkov.net> (Juri Linkov's message of "Wed, 16 Nov 2022 21:14:37 +0200") Organization: LINKOV.NET References: <86k045b70e.fsf@mail.linkov.net> <83a651xmx8.fsf@gnu.org> <86sfisujx0.fsf@mail.linkov.net> <86cz9m1zky.fsf@mail.linkov.net> Date: Mon, 21 Nov 2022 09:57:02 +0200 Message-ID: <86k03o3fld.fsf@mail.linkov.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.7 (/) X-Debbugs-Envelope-To: 53981 Cc: mail@daniel-mendler.de, Eli Zaretskii 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: -1.7 (-) close 53981 29.0.50 thanks > Here is a more tested patch that works in apropos and shortdoc. > > Also tested for group outlines in the Completions buffer with: > > ``` > (add-hook 'completion-list-mode-hook > (lambda () > (setq-local > outline-search-function > (lambda (&optional bound move backward looking-at) > (outline-search-text-property > 'face 'completions-group-separator > bound move backward looking-at)) > outline-level (lambda () 1)) > ``` Now pushed to master and closed. From unknown Sat Jun 21 03:26:33 2025 Received: (at fakecontrol) by fakecontrolmessage; To: internal_control@debbugs.gnu.org From: Debbugs Internal Request Subject: Internal Control Message-Id: bug archived. Date: Mon, 19 Dec 2022 12:24:12 +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