From: "Mario E. Munich" <mariomu@ieee.org>
To: emacs-orgmode@gnu.org
Subject: org export as twiki - Failure to export with error: (wrong-type-argument stringp nil)
Date: Wed, 3 Mar 2010 00:48:10 -0800 [thread overview]
Message-ID: <ef75369d1003030048v25493d37o9db562bd48d1dcb7@mail.gmail.com> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 1146 bytes --]
*What steps will reproduce the problem?*
1. orgmode 0.34c, emacs 23 on Ubuntu 9.10 (this function used to work
in previous
versions of orgmode)
2. Write an org file
3. Use the provided function to export as twiki to find the error message
*What is the expected output? What do you see instead?*
Here is the backtrace:
Debugger entered--Lisp error: (wrong-type-argument stringp nil)
string-match("\\[\\[\\([^][]+\\)\\]\\(\\[\\([^][]+\\)\\]\\)?\\]\\|[
]+\\(:[[:alnum:]_@:]+:\\)[ ]*$" nil)
org-docbook-expand(nil)
byte-code("\b\x13
org-export-as-docbook()
(let* ((wconfig ...) (docbook-buf ...) (filename ...) (base ...)
(twiki-file ...)) (and (file-exists-p twiki-file) (delete-file twiki-file))
(message "Processing DocBook XML file...") (shell-command (format "xsltproc
--output %s /home/mariomu/synchronize/site-lisp/docbook2twiki.xsl %s"
twiki-file ...)) (message "Processing DocBook file...done") (if (not ...)
(error "TWiki file was not produced") (set-window-configuration wconfig)
(message "Exporting to TWiki...done") twiki-file))
org-export-as-twiki()
call-interactively(org-export-as-twiki nil nil)
[-- Attachment #1.2: Type: text/html, Size: 1292 bytes --]
[-- Attachment #2: backtrace-for-org-export-as-twiki --]
[-- Type: application/octet-stream, Size: 4293 bytes --]
[-- Attachment #3: org-twiki.el --]
[-- Type: text/x-emacs-lisp, Size: 1174 bytes --]
;;
;; File : org-twiki.el
;; Author : Baoqiu Cui <cbaoqiu AT yahoo DOT com>
;;
;; This is a sample Emacs Lisp function that converts an Org file to
;; TWiki format. It first converts the Org file into DocBook format,
;; and then use ``xsltproc'' and docbook2twiki.xsl to convert the
;; DocBook XML file into TWiki format.
;;
;; $Id$
;;
(defun org-export-as-twiki ()
"Export Org file to TWiki."
(interactive)
(message "Exporting to TWiki...")
(let* ((wconfig (current-window-configuration))
(docbook-buf (org-export-as-docbook))
(filename (buffer-file-name docbook-buf))
(base (file-name-sans-extension filename))
(twiki-file (concat base ".twiki")))
(and (file-exists-p twiki-file) (delete-file twiki-file))
(message "Processing DocBook XML file...")
(shell-command
(format "xsltproc --output %s /home/mariomu/synchronize/site-lisp/docbook2twiki.xsl %s"
twiki-file (shell-quote-argument filename)))
(message "Processing DocBook file...done")
(if (not (file-exists-p twiki-file))
(error "TWiki file was not produced")
(set-window-configuration wconfig)
(message "Exporting to TWiki...done")
twiki-file)))
[-- Attachment #4: docbook2twiki.xsl --]
[-- Type: text/xml, Size: 18375 bytes --]
<?xml version="1.0" encoding="utf-8"?>
<!-- *******************************************************************
File: docbook2twiki.xsl
Author: Baoqiu Cui <cbaoqiu AT yahoo DOT com>
Copyright (C) 2009 Baoqiu Cui
This is an XSL stylesheet that converts DocBook documents
(http://www.docbook.org/) to TWiki (http://www.twiki.org/) format.
docbook2twiki.xsl is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This stylesheet is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
A copy of the GNU General Public License can be made from
<http://www.gnu.org/licenses/>.
Because DocBook contains much more features than TWiki does, this
stylesheet can only (and will always) support a subset of DocBook
elements.
Currently this stylesheet works best for DocBook files exported
from Emacs Org-mode files by the DocBook exporter in Org-mode
(http://orgmode.org/). Most formatting features supported by Org
mode are supported.
Some code and ideas are copied from DocBook2Wiki.xsl that is
included in the contrib/ directory of DocBook 1.74.0.
$Id: docbook2twiki.xsl 5 2009-05-06 00:32:06Z baoqiu $
*******************************************************************
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:d = "http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
version="1.0">
<xsl:output method="text" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:text>---+!! </xsl:text>
<xsl:value-of select="/d:article/d:title"/>
<xsl:text>
%TOC%
</xsl:text>
<xsl:apply-templates/>
<xsl:variable name="version">1.0</xsl:variable>
<xsl:text>
<!-- TWiki file originally generated using docbook2twiki.xsl </xsl:text>
<xsl:value-of select="$version"/>
<xsl:text> -->
</xsl:text>
</xsl:template>
<!-- imagedata -->
<xsl:template match="d:imagedata">
<xsl:if test="parent::d:imageobject[@role!='fo' or not(@role)]">
<xsl:text><img src="%ATTACHURL%/</xsl:text>
<xsl:call-template name="getfilename">
<xsl:with-param name="fileref">
<xsl:value-of select="@fileref"/>
</xsl:with-param>
</xsl:call-template>
<xsl:text>"></xsl:text>
<xsl:call-template name="newline"/>
</xsl:if>
</xsl:template>
<!-- section title -->
<xsl:template match="d:title[parent::d:section]">
<xsl:variable name="level" select="count(ancestor-or-self::d:section)"/>
<xsl:choose>
<xsl:when test="$level < 7">
<xsl:text>
---</xsl:text>
<xsl:value-of select="substring('++++++', 1, $level)"/>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
<xsl:text>
</xsl:text>
</xsl:when>
<!-- Treat section title at 7th level or below as bold text. -->
<xsl:otherwise>
<xsl:text>*</xsl:text>
<xsl:call-template name="remove-trailing-ws">
<xsl:with-param name="lines" select="."/>
</xsl:call-template>
<xsl:text>*</xsl:text>
<xsl:call-template name="newline"/>
<xsl:call-template name="newline"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- programlisting -->
<xsl:template match="d:programlisting/text()">
<xsl:call-template name="indent"/>
<xsl:text><verbatim>
</xsl:text>
<xsl:variable name="before" select="count(preceding-sibling::*)"/>
<xsl:variable name="after" select="count(following-sibling::*)"/>
<xsl:variable name="proglist" select="."/>
<xsl:variable name="proglist-1">
<xsl:choose>
<xsl:when test="$before = 0">
<xsl:call-template name="remove-leading-newlines">
<xsl:with-param name="lines" select="$proglist"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$proglist"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="proglist-2">
<xsl:choose>
<xsl:when test="$after = 0">
<xsl:call-template name="remove-trailing-ws">
<xsl:with-param name="lines" select="$proglist-1"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$proglist-1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="$proglist-2"/>
<xsl:text>
</verbatim>
</xsl:text>
</xsl:template>
<!-- article/title|info -->
<xsl:template match="d:title|d:info[parent::d:article]"/>
<!-- link -->
<xsl:template match="d:link">
<xsl:variable name="link-url" select="@xlink:href"/>
<xsl:variable name="desc" select="."/>
<xsl:choose>
<xsl:when test="starts-with($link-url, $desc) and
starts-with($desc, $link-url)">
<xsl:value-of select="$desc"/>
</xsl:when>
<xsl:otherwise>
<xsl:text>[[</xsl:text>
<xsl:value-of select="@xlink:href"/>
<xsl:text>][</xsl:text>
<xsl:apply-templates/>
<xsl:text>]]</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- listitem -->
<xsl:template match="d:listitem">
<xsl:variable name="listlevel" select="count(ancestor-or-self::d:listitem)"/>
<xsl:if test="not(parent::d:varlistentry)">
<xsl:value-of select="substring(' ', 1, $listlevel * 3)"/>
</xsl:if>
<xsl:choose>
<xsl:when test="parent::d:itemizedlist">
<xsl:text>* </xsl:text>
</xsl:when>
<xsl:when test="parent::d:orderedlist">
<xsl:text>1. </xsl:text>
</xsl:when>
<xsl:when test="parent::d:varlistentry">
<xsl:text>: </xsl:text>
</xsl:when>
</xsl:choose>
<xsl:apply-templates/>
</xsl:template>
<!-- warning -->
<xsl:template match="d:warning">
<xsl:call-template name="indent"/>
<xsl:text>%X% *Warning*: </xsl:text>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
<xsl:call-template name="newline"/>
</xsl:template>
<!-- tip -->
<xsl:template match="d:tip">
<xsl:call-template name="indent"/>
<xsl:text>%T% *Tip*: </xsl:text>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
<xsl:call-template name="newline"/>
</xsl:template>
<!-- caution -->
<xsl:template match="d:caution">
<xsl:call-template name="indent"/>
<xsl:text>%X% *Caution*: </xsl:text>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
<xsl:call-template name="newline"/>
</xsl:template>
<!-- note -->
<xsl:template match="d:note">
<xsl:call-template name="indent"/>
<xsl:text>*Note*: </xsl:text>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
<xsl:call-template name="newline"/>
</xsl:template>
<!-- varlistentry/term -->
<xsl:template match="d:varlistentry/d:term">
<xsl:variable name="listlevel" select="count(ancestor-or-self::d:listitem)+1"/>
<xsl:value-of select="substring(' ', 1, $listlevel * 3)"/>
<xsl:text>$ </xsl:text>
<xsl:apply-templates/>
</xsl:template>
<!-- emphasis -->
<xsl:template match="d:emphasis">
<!-- Make sure there is a space before the emphasis markup when it is
needed. -->
<xsl:if test="count(preceding-sibling::*) > 0 and
not(preceding-sibling::node()[1][self::text()])">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:choose>
<xsl:when test="@role = 'underline'">
<xsl:text><u></xsl:text>
<xsl:apply-templates/>
<xsl:text></u></xsl:text>
</xsl:when>
<xsl:when test="@role = 'bold'">
<xsl:text>*</xsl:text>
<xsl:apply-templates/>
<xsl:text>*</xsl:text>
</xsl:when>
<xsl:when test="@role = 'strikethrough'">
<xsl:text><strike></xsl:text>
<xsl:apply-templates/>
<xsl:text></strike></xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>_</xsl:text>
<xsl:apply-templates/>
<xsl:text>_</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- footnote -->
<xsl:template match="d:footnote">
<xsl:text>{{</xsl:text>
<xsl:apply-templates/>
<xsl:text>}}</xsl:text>
</xsl:template>
<!-- footnoteref -->
<xsl:template match="d:footnoteref">
<xsl:variable name="footnote-id" select="@linkend"/>
<xsl:apply-templates select="//d:footnote[@xml:id = $footnote-id]"/>
</xsl:template>
<!-- literal -->
<xsl:template match="d:literal">
<xsl:text>=</xsl:text>
<xsl:apply-templates/>
<xsl:text>=</xsl:text>
</xsl:template>
<!-- code -->
<xsl:template match="d:code">
<!-- Make sure there is a space before the `=' markup when it is
needed. -->
<xsl:if test="count(preceding-sibling::*) > 0 and
not(preceding-sibling::node()[1][self::text()])">
<xsl:text> </xsl:text>
</xsl:if>
<xsl:text>=</xsl:text>
<xsl:apply-templates/>
<xsl:text>=</xsl:text>
</xsl:template>
<!-- superscript -->
<xsl:template match="d:superscript">
<xsl:text><sup></xsl:text>
<xsl:apply-templates/>
<xsl:text></sup></xsl:text>
</xsl:template>
<!-- subscript -->
<xsl:template match="d:subscript">
<xsl:text><sub></xsl:text>
<xsl:apply-templates/>
<xsl:text></sub></xsl:text>
</xsl:template>
<!-- variablelist -->
<xsl:template match="d:variablelist">
<xsl:apply-templates/>
</xsl:template>
<!-- para -->
<xsl:template match="d:para">
<xsl:call-template name="indent"/>
<xsl:apply-templates/>
<!-- Add a newline for a para in listitem or section. This newline is
always required in these two situations (and we have special
handling for listitem too). -->
<xsl:choose>
<xsl:when test="parent::d:listitem or
parent::d:section">
<xsl:call-template name="newline"/>
</xsl:when>
</xsl:choose>
<!-- Add a second newline if this para is in a section but itself is
NOT the last para in that section. -->
<xsl:choose>
<xsl:when test="parent::d:section and
following-sibling::*">
<xsl:call-template name="newline"/>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="d:para" mode="centering">
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
<xsl:call-template name="newline"/>
</xsl:template>
<!-- getfilename -->
<xsl:template name="getfilename">
<xsl:param name="fileref"/>
<xsl:choose>
<xsl:when test="contains($fileref,'\')">
<xsl:call-template name="getfilename">
<xsl:with-param name="fileref">
<xsl:value-of select="substring-after($fileref,'\')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:when test="contains($fileref,'/')">
<xsl:call-template name="getfilename">
<xsl:with-param name="fileref">
<xsl:value-of select="substring-after($fileref,'/')"/>
</xsl:with-param>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$fileref"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- HTML table -->
<!-- Here, only <tr> needs to worry about indentation. -->
<xsl:template match="d:table/d:caption"/>
<xsl:template match="d:tr">
<xsl:call-template name="indent"/>
<xsl:text>| </xsl:text>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
</xsl:template>
<xsl:template match="d:th">
<xsl:text>*</xsl:text>
<xsl:apply-templates/>
<xsl:text>* | </xsl:text>
</xsl:template>
<xsl:template match="d:td">
<xsl:apply-templates/>
<xsl:text> | </xsl:text>
</xsl:template>
<!-- CLAS table -->
<xsl:template match="d:table/d:title">
<xsl:call-template name="indent"/>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
</xsl:template>
<xsl:template match="d:tgroup">
<xsl:choose>
<!-- Special informaltable for text centering -->
<xsl:when test="count(./*) = 1 and
@align='center' and
@cols='1'">
<xsl:text><div style="text-align: center">
</xsl:text>
<xsl:apply-templates select="d:tbody/d:row/d:entry" mode="centering"/>
<xsl:text></div>
</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="d:thead"/>
<xsl:apply-templates select="d:tbody"/>
<xsl:apply-templates select="d:tfoot"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="d:thead/d:row|d:tbody/d:row|d:tfoot/d:row">
<xsl:call-template name="indent"/>
<xsl:text>| </xsl:text>
<xsl:apply-templates/>
<xsl:call-template name="newline"/>
</xsl:template>
<xsl:template match="d:thead/d:row/d:entry|d:tfoot/d:row/d:entry">
<xsl:text>*</xsl:text>
<xsl:apply-templates/>
<xsl:text>* | </xsl:text>
</xsl:template>
<xsl:template match="d:tbody/d:row/d:entry">
<xsl:apply-templates/>
<xsl:text> | </xsl:text>
</xsl:template>
<xsl:template match="d:tbody/d:row/d:entry" mode="centering">
<xsl:apply-templates mode="centering"/>
</xsl:template>
<xsl:template match="text()|@*">
<xsl:variable name="oneline">
<xsl:call-template name="entity-replace">
<xsl:with-param name="input-str"
select="translate(., '

', ' ')"/>
</xsl:call-template>
</xsl:variable>
<xsl:choose>
<!-- Remove leading spaces in a para -->
<xsl:when test="parent::d:para and count(preceding-sibling::*) = 0">
<xsl:call-template name="remove-leading-spaces">
<xsl:with-param name="text" select="$oneline"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$oneline"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="remove-leading-spaces">
<xsl:param name="text"/>
<xsl:if test="starts-with($text, ' ')">
<xsl:call-template name="remove-leading-spaces">
<xsl:with-param name="text">
<xsl:value-of select="substring($text, 2)"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
<xsl:if test="not(starts-with($text, ' '))">
<xsl:value-of select="$text"/>
</xsl:if>
</xsl:template>
<xsl:template name="indent">
<xsl:variable name="listlevel" select="count(ancestor-or-self::d:listitem)"/>
<xsl:variable name="ind" select="substring(' ', 1, $listlevel * 3)"/>
<!-- Additional indent for listitem bullet/number -->
<xsl:variable name="delta-ind">
<xsl:choose>
<xsl:when test="$listlevel > 0">
<xsl:variable name="latest-listitem"
select="ancestor-or-self::d:listitem[1]"/>
<xsl:choose>
<xsl:when test="$latest-listitem/parent::d:orderedlist">
<xsl:text> </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:text></xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:if test="(self::d:para and position() != 1) or
parent::d:programlisting or
self::d:tr">
<xsl:value-of select="$ind"/><xsl:value-of select="$delta-ind"/>
<xsl:if test="self::d:para and
$listlevel > 0 and
count(preceding-sibling::*) > 0 and
not(preceding-sibling::node()[1][self::d:programlisting])">
<xsl:text>%BR%%BR%
</xsl:text>
<xsl:value-of select="$ind"/><xsl:value-of select="$delta-ind"/>
</xsl:if>
</xsl:if>
</xsl:template>
<!-- Insert a newline -->
<xsl:template name="newline">
<xsl:text>
</xsl:text>
</xsl:template>
<!-- Replace characters `&', `<', and `>' with `&', `<' and
`>' respectively. -->
<xsl:template name="entity-replace">
<xsl:param name="input-str"/>
<xsl:call-template name="string-replace">
<xsl:with-param name="to" select="'&gt;'"/>
<xsl:with-param name="from" select="'>'"/>
<xsl:with-param name="string">
<xsl:call-template name="string-replace">
<xsl:with-param name="to" select="'&lt;'"/>
<xsl:with-param name="from" select="'<'"/>
<xsl:with-param name="string">
<xsl:call-template name="string-replace">
<xsl:with-param name="to" select="'&amp;'"/>
<xsl:with-param name="from" select="'&'"/>
<xsl:with-param name="string" select="$input-str"/>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<!-- Replace all occurences of the character(s) `from' in the string
`string' with the string `to'. -->
<xsl:template name="string-replace">
<xsl:param name="string"/>
<xsl:param name="from"/>
<xsl:param name="to"/>
<xsl:choose>
<xsl:when test="contains($string,$from)">
<xsl:value-of select="substring-before($string,$from)"/>
<xsl:value-of select="$to"/>
<xsl:call-template name="string-replace">
<xsl:with-param name="string" select="substring-after($string,$from)"/>
<xsl:with-param name="from" select="$from"/>
<xsl:with-param name="to" select="$to"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Remove leading newlines -->
<xsl:template name="remove-leading-newlines">
<xsl:param name="lines"/>
<xsl:choose>
<xsl:when test="starts-with($lines,'
') or
starts-with($lines,'
')">
<xsl:call-template name="remove-leading-newlines">
<xsl:with-param name="lines" select="substring($lines, 2)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$lines"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<!-- Remove trailing whitespaces -->
<xsl:template name="remove-trailing-ws">
<xsl:param name="lines"/>
<xsl:variable name="last-char">
<xsl:value-of select="substring($lines, string-length($lines), 1)"/>
</xsl:variable>
<xsl:choose>
<xsl:when test="($last-char = '
') or
($last-char = '
') or
($last-char = ' ') or
($last-char = '	')">
<xsl:call-template name="remove-trailing-ws">
<xsl:with-param name="lines"
select="substring($lines, 1,
string-length($lines) - 1)"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$lines"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
[-- Attachment #5: Type: text/plain, Size: 201 bytes --]
_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode
next reply other threads:[~2010-03-03 8:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-03-03 8:48 Mario E. Munich [this message]
2010-03-04 2:26 ` org export as twiki - Failure to export with error: (wrong-type-argument stringp nil) Baoqiu Cui
-- strict thread matches above, loose matches on Subject: below --
2010-03-04 19:50 Mario E. Munich
2010-03-05 5:08 ` Baoqiu Cui
2010-03-05 5:30 ` Baoqiu Cui
2010-03-05 7:47 ` Carsten Dominik
2010-03-05 18:51 ` Baoqiu Cui
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ef75369d1003030048v25493d37o9db562bd48d1dcb7@mail.gmail.com \
--to=mariomu@ieee.org \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.