From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id OJLyKbqpymJYLQAAbAwnHQ (envelope-from ) for ; Sun, 10 Jul 2022 12:28:10 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id uJr7KbqpymIxZwAA9RJhRA (envelope-from ) for ; Sun, 10 Jul 2022 12:28:10 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 3BAE588D3 for ; Sun, 10 Jul 2022 12:28:10 +0200 (CEST) Received: from localhost ([::1]:36708 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oAUAb-0007DB-8l for larch@yhetil.org; Sun, 10 Jul 2022 06:28:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52526) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oAU9Y-0007Cb-HO for emacs-orgmode@gnu.org; Sun, 10 Jul 2022 06:27:04 -0400 Received: from ciao.gmane.io ([116.202.254.214]:55444) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oAU9W-0008C2-TY for emacs-orgmode@gnu.org; Sun, 10 Jul 2022 06:27:04 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1oAU9U-0008b1-S9 for emacs-orgmode@gnu.org; Sun, 10 Jul 2022 12:27:00 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-orgmode@gnu.org From: Max Nikulin Subject: Re: [PATCH v4] ol.el: add description format parameter to org-link-parameters Date: Sun, 10 Jul 2022 17:26:51 +0700 Message-ID: References: <87zgl1npow.fsf@localhost> <20220405192931.6747-1-hugo@heagren.com> <87a6cx79xn.fsf@localhost> <87zgi6fckr.fsf@heagren.com> <871qvixhfw.fsf@gmail.com> <87v8s8n1bm.fsf@heagren.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.1 Content-Language: en-US In-Reply-To: <87v8s8n1bm.fsf@heagren.com> Received-SPF: pass client-ip=116.202.254.214; envelope-from=geo-emacs-orgmode@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: 28 X-Spam_score: 2.8 X-Spam_bar: ++ X-Spam_report: (2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_ADSP_CUSTOM_MED=0.001, FORGED_GMAIL_RCVD=1, FORGED_MUA_MOZILLA=2.309, FREEMAIL_FORGED_FROMDOMAIN=0.249, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, NICE_REPLY_A=-0.001, NML_ADSP_CUSTOM_MED=0.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1657448890; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=czxGcHXvYmZjKR810wcpR3lVvmNOFkadBdiBpGINaY4=; b=Hy5EDZ+FnyEdyilgB7TCQteM3Uwes4junp5sMpADQXabHo2yd5ySkLxwrkoOOanYSoUOP5 k5ltOI040GU3zJ/7Sl5opa1CdXy51JOYxY2TmOWOemSL5/p9W15gx8lgdyLhmfGv48flvh Tbji3gtqPzM2GakKppQXij/RT64kHaj4lYnUvfVOVZjVpA73u3DxTXhf8VXykFirSTwV/i EBxZh3BD1b9RLpuxKz+l4kznwejVjSn+QPqxa2BjD/ZNKBwZE3bVMkrAFx04XXMRXwpEdF Cqf0KpFBQxNohaYnXzl2DDd1NyRvJ4rw8F1RvPngnyNpHQUNVpcfFM7Yx82OXw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1657448890; a=rsa-sha256; cv=none; b=jHbeYzT82S1BGvzVgYMoX3lzeZy2SjgJf9zsQYwRuZbw582Ymzc9spuIYxf6S3CQ+xuG/Y RZKpMoS1/J9S5cJ7pCXzjKW3Q1LL7KqEDDlwIRiqaWSF0KlAZKFqztxYExRVJ35HRemeNR wa0u02LSqGjxDntEj8y0fMIbQJtQsUgezdPMNzf/VH7aNBa4/mN18OTs29eQngatfrk4y4 ABfcMpqH6/HuiPW3DV9L9BSnLpswpD/P33LF6gPuQ3bvId0uGRjK/Fq5gfvUO3wn+2PAdB XR3ST1ujIRfe3PUqaSoUJiWXofBA60yBqgfqn01mWFzV7n04TsU/gySwco8xwQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: 1.95 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 3BAE588D3 X-Spam-Score: 1.95 X-Migadu-Scanner: scn0.migadu.com X-TUID: Ffkhj48NTdm9 On 08/07/2022 02:57, Hugo Heagren wrote: > Since the last version of this patch, I have: Thank you, this version should be more reliable. > tl;dr The question is: what is the Good Behaviour when > :default-description is set to something, which is meant to return a > string and returns 'nil instead? Should it be treated like an empty > string, or as an error? Just an idea: if the :default-description function returns "" then use empty description, if it returns nil then try `org-link-make-description-function'. Unsure if it is better but I would consider `or' instead of `cond': (or description (let ((make (org-link-get-parameter type :default-description))) (and make (condition-case ; ... ))) (and org-link-make-description-function (condition-case ; ... )) desc) So it becomes a kind of responsibility chain and nil becomes a valid and useful value. I am in doubts concerning "default-description" as the parameter name. I would consider either more specific "insert-description" or shorter "description". Concerning the former, sometimes I do not mind to have default description for export shared by most of backends without necessity to explicitly write :export function handling all backends. E.g. for generate https://orgmode.org/manual/Protocols.html target and 'info "(org) Protocols"' description that is suitable for LaTeX/PDF, HTML, Markdown. If something like this were implemented, default-description would become ambiguous if it is related to insert or to export. > +(defmacro test-ol-with-link-parameters-as (type parameters &rest body) [...] > + ;; Copy all keys in `parameters' and their original values to > + ;; `orig-parameters'. For `parity': nil = odd, non-nill = even > + `(let (parity orig-parameters) > + (dolist (p ',parameters) Have I missed something or the whole macro may be simplified to just copy `org-link-parameters'? `(let ((org-link-parameters (copy-tree org-link-parameters))) (org-link-set-parameters ,type ,@parameters) ,@body)) Otherwise `gensym'-generated name should be used instead of hardcoded rtn to avoid accidental modification of the variable by the body code: > + (let ((_ (org-link-set-parameters ,type ,@parameters)) > + ;; Do body > + (rtn (progn ,@body))) In addition, `declare' form should be added to `defmacro' to specify which argument is considered as its body. > + (setq type > + (cond My opinion is that it should be inside (let ((initial-input ... and maybe even be a sibling of (def (org-link-get-parameter type to keep related code more local. > - ((not org-link-make-description-function) desc) > + (desc) > + ((org-link-get-parameter type :default-description) > + (let ((def (org-link-get-parameter type :default-description))) I have not tested, so I may be wrong in respect to the following. It seems, you rises priority of desc value that earlier was a fallback. The reason why I am in doubts, is that it seems, desc is initialized from current link description when point is withing an existing link and in such cases desc likely should be preserved. I can not say that I like that it is responsibility of all description functions to return the desc argument if it is supplied. > (t (condition-case nil > (funcall org-link-make-description-function link desc) Notice that before you modification `funcall' was guarded by "(not org-link-make-description-function)" test. I like the idea of description specific to link type and it is sour that previous attempts to implement the feature was not completed.