From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms1.migadu.com with LMTPS id 4NS+NsqmWWaSEAEAe85BDQ:P1 (envelope-from ) for ; Fri, 31 May 2024 12:30:35 +0200 Received: from aspmx1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2.migadu.com with LMTPS id 4NS+NsqmWWaSEAEAe85BDQ (envelope-from ) for ; Fri, 31 May 2024 12:30:35 +0200 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=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"; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=gmail.com (policy=none) ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1717151434; 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=2BFTtLDRtKIjLTYEqtWKUpvHClrvUgwevsGiIxIj1yA=; b=NxnnpuFKPJdTWpig8iJiwzIvqmU6N1TNTi/LrPFDCpYR8/97CRXjWeJ1r0sNPOvV7/v61K qwIcw1PneQC7PV2tDX45Z/7Y7mF02srJz0Uwpaf50kSXJxX/dWnLyHs0qdMoStNahXZ9ly OT+M2zMXBnN1H2QPfMau4RxvJTP3VSP04XewozLgNC3737D3jkCD4usdhqYxfEbccL9zTg PBurIK5kJpbM0EE4Ih4Sk2wVEoINuYlJaf2Q6UvHPSDDEeZidKilfjcki8bRaIBVwGXP+z W4jDI/52tEVb1q++KIn0hVi7unmC4YP+amyndzarYTbTkUXJw7idjneF62b/LA== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=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"; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=gmail.com (policy=none) ARC-Seal: i=1; s=key1; d=yhetil.org; t=1717151434; a=rsa-sha256; cv=none; b=px/GVBZlBtON+AOUbb1OMQj2MAsmVE2zXOJ2kOjCHalDZS2fS8ET+IPkyjGIXjBmgKfcPN 1uG08/cw8EhQKj0PJS9kWK3y5OJVenBBNRHMYo1I1HUMdRUVNvKKxBeemsLEyIPbJYHfZp 2A8uKz1r0zbwIMpBXPFkCoFNUkj3ehpVmOHcWpVihapf/gve9rdq8XrPk2eilOYxN/yqiZ I94MomdbSY5ASZsyiyQ7lQFhnAsgRh02MOt3pZiSFbdZ/i53A2InQcKAN4AQJklgDcTjRS UuD3/HlD6PidajUr9WekwwLSUKRpaxra0ZWYmwc/TlgWoVpjBc4cWijtWsmaLQ== 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 CAE3F22FAE for ; Fri, 31 May 2024 12:30:34 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sCzVu-0001vz-Rd; Fri, 31 May 2024 06:29:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sCzVs-0001vK-Nb for emacs-orgmode@gnu.org; Fri, 31 May 2024 06:29:32 -0400 Received: from ciao.gmane.io ([116.202.254.214]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sCzVr-0002To-7O for emacs-orgmode@gnu.org; Fri, 31 May 2024 06:29:32 -0400 Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1sCzVn-0005h2-OR for emacs-orgmode@gnu.org; Fri, 31 May 2024 12:29:27 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: emacs-orgmode@gnu.org From: Max Nikulin Subject: Re: question about links, macros + org-publish and "parametrization" Date: Fri, 31 May 2024 17:29:16 +0700 Message-ID: References: <877cfdovmb.fsf@ucl.ac.uk> <87o78n6z0a.fsf@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit User-Agent: Mozilla Thunderbird Content-Language: en-US, ru-RU In-Reply-To: <87o78n6z0a.fsf@localhost> 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: 26 X-Spam_score: 2.6 X-Spam_bar: ++ X-Spam_report: (2.6 / 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.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.25, 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-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Spam-Score: -0.84 X-Migadu-Queue-Id: CAE3F22FAE X-Migadu-Scanner: mx10.migadu.com X-Migadu-Spam-Score: -0.84 X-TUID: nFI52ekE/dEe On 30/05/2024 23:33, Ihor Radchenko wrote: > Max Nikulin writes: > >> I can not figure out if it is possible with some trick to expand >> {{{year}}} before file:... is parsed. > > Not possible. Macros are not recognized in verbatim contexts like link > path. I had in mind some technique like \expandafter in TeX or intermediate macro in the case of C preprocessor. ---- 8< ---- #+macro: mend }}} #+macro: year 24 #+macro: source [[file:./$1/t.org][for the year $1]] #+macro: target {{{source({{{year}}}){{{mend}}} {{{source(24)}}} {{{target}}} {{{source({{{year}}}){{{mend}}} ---- >8 ---- It signals (error "Undefined Org macro: source; aborting") during processing source code blocks. Export buffer content at this step: ---- 8< ---- #+macro: mend }}} #+macro: year 24 #+macro: source [[file:./$1/t.org][for the year $1]] #+macro: target {{{source({{{year}}}){{{mend}}} [[file:./24/t.org][for the year 24]] {{{source(24)}}} {{{source(24)}}} ---- >8 ---- So I have almost achieved the goal despite the approach is rather fragile. I might work with additional pass of macro processing added as an extra export filter. However I believe it is better to use either a custom link type or an eval macro instead of set of kludges with postponing expansion. It is not intuitive that macro parameters are not eagerly expanded like function arguments in most common procedural programming languages. Macro languages have their own shortcomings.