From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier via Users list for the GNU Emacs text editor Newsgroups: gmane.emacs.help Subject: Re: Lisp error on function :documentation Date: Sun, 16 Oct 2022 11:23:13 -0400 Message-ID: References: <87sfjo5vqu.fsf@web.de> <87mt9w5thu.fsf@web.de> <3aB3F8gotn0WkauCkikmQoG0bt-Zp1vYKKnElDvKwDmZOU2aICFsw5ojkVJWw6dG9fnzRZXpE0YTcdLIfIfHYIwKO3ghyRwQZ7OUsNc8CXc=@protonmail.com> <87a65wz9sn.fsf@web.de> Reply-To: Stefan Monnier Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="8076"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux) To: help-gnu-emacs@gnu.org Cancel-Lock: sha1:xlgEjJkXTkBwvIiF4nwgY95Vb/c= Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Sun Oct 16 17:25:26 2022 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ok5W1-0001zv-TX for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 16 Oct 2022 17:25:25 +0200 Original-Received: from localhost ([::1]:46750 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ok5W0-0005u0-SG for geh-help-gnu-emacs@m.gmane-mx.org; Sun, 16 Oct 2022 11:25:24 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:48210) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ok5U2-0005pq-Qx for help-gnu-emacs@gnu.org; Sun, 16 Oct 2022 11:23:23 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:59934) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ok5U1-00012z-Bg for help-gnu-emacs@gnu.org; Sun, 16 Oct 2022 11:23:22 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1ok5Ty-0009jR-AT for help-gnu-emacs@gnu.org; Sun, 16 Oct 2022 17:23:18 +0200 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=geh-help-gnu-emacs@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: "help-gnu-emacs" Xref: news.gmane.io gmane.emacs.help:139992 Archived-At: > Or maybe someone has added some nicer solution in the meantime? - I > don't recall. I don't know about nicer, but in Emacs-29, you can use `oclosure-lambda` to build a function tagged with a certain type on which you can dispatch via `cl-defmethod` and functions's docstrings are fetched via `function-documentation` which is a generic function to which you can add your own methods for your OClosure type, thus making it possible to dynamically build your docstring. We use it internally for the "accessor" functions that let you fetch the value of an OClosure's slot: (oclosure-define accessor "OClosure function to access a specific slot of an object." type slot) (cl-defmethod function-documentation ((function accessor)) (oclosure--accessor-docstring function)) ;; FIXME: η-reduce! (defun oclosure--accessor-docstring (f) ;; This would like to be a (cl-defmethod function-documentation ...) ;; but for circularity reason the defmethod is in `simple.el'. (format "Access slot \"%S\" of OBJ of type `%S'.\n\n(fn OBJ)" (accessor--slot f) (accessor--type f))) We could of course also prebuild those docstrings when we define each accessor function, but with the above we avoid this cost upfront and instead we compute those docstrings ondemand. See also the `OClosures` section in the Texinfo docs. Stefan