From mboxrd@z Thu Jan 1 00:00:00 1970 From: Achim Gratz Subject: Re: [RFC] Org version of the Org manual Date: Sun, 17 Mar 2013 11:28:29 +0100 Message-ID: <87r4jeqq0i.fsf@Rainer.invalid> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:46420) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHApd-0007Ax-CZ for emacs-orgmode@gnu.org; Sun, 17 Mar 2013 06:28:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UHApa-0007qv-4w for emacs-orgmode@gnu.org; Sun, 17 Mar 2013 06:28:49 -0400 Received: from plane.gmane.org ([80.91.229.3]:45476) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHApZ-0007qg-R3 for emacs-orgmode@gnu.org; Sun, 17 Mar 2013 06:28:46 -0400 Received: from list by plane.gmane.org with local (Exim 4.69) (envelope-from ) id 1UHApv-00057I-CB for emacs-orgmode@gnu.org; Sun, 17 Mar 2013 11:29:07 +0100 Received: from pd9eb5658.dip.t-dialin.net ([217.235.86.88]) by main.gmane.org with esmtp (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 17 Mar 2013 11:29:07 +0100 Received: from Stromeko by pd9eb5658.dip.t-dialin.net with local (Gmexim 0.1 (Debian)) id 1AlnuQ-0007hv-00 for ; Sun, 17 Mar 2013 11:29:07 +0100 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --=-=-= Content-Type: text/plain Hi Tom, I have a patch that should fix your problems with some characters in macro expansions: --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-fix-macro-expansion-with-separators-and-backslashes.patch >From 27b22d17f629a50bd485a0320dac45616d7ceb7f Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Sun, 17 Mar 2013 10:20:10 +0100 Subject: [PATCH] fix macro expansion with separators and backslashes * lisp/org-element.el (org-element-macro-parser): Do not try to "repair bad splits", only split at the correct places. * lisp/org-macro.el (org-macro-expand): Do not try to interpret the macro replacement text as a regex. Allow to write macros like {{{kbd(\\)}}} and {{{kbd(\\,)}}} and expand them correctly. A backslash at the end of an argument was incorrectly trying to cons the next argument (which may not exist). --- lisp/org-element.el | 16 +++++----------- lisp/org-macro.el | 2 +- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index ba2461a..337cad0 100644 --- a/lisp/org-element.el +++ b/lisp/org-element.el @@ -3117,20 +3117,14 @@ (defun org-element-macro-parser () (post-blank (progn (goto-char (match-end 0)) (skip-chars-forward " \t"))) (end (point)) - (args (let ((args (org-match-string-no-properties 3)) args2) + (args (let ((args (org-match-string-no-properties 3))) (when args ;; Do not use `org-split-string' since empty ;; strings are meaningful here. - (setq args (split-string args ",")) - (while args - (while (string-match "\\\\\\'" (car args)) - ;; Repair bad splits, when comma is protected, - ;; and thus not a real separator. - (setcar (cdr args) (concat (substring (car args) 0 -1) - "," (nth 1 args))) - (pop args)) - (push (pop args) args2)) - (mapcar 'org-trim (nreverse args2)))))) + (setq args (replace-regexp-in-string "," "\000" args)) + (setq args (replace-regexp-in-string "\\\\\000" "," args)) + (setq args (split-string args "\000")) + (mapcar 'org-trim args))))) (list 'macro (list :key key :value value diff --git a/lisp/org-macro.el b/lisp/org-macro.el index 88cbdf7..3e07295 100644 --- a/lisp/org-macro.el +++ b/lisp/org-macro.el @@ -137,7 +137,7 @@ (defun org-macro-expand (macro templates) (org-element-property :args macro)) ;; No argument: remove place-holder. "")) - template))) + template nil 'literal))) ;; VALUE starts with "(eval": it is a s-exp, `eval' it. (when (string-match "\\`(eval\\>" value) (setq value (eval (read value)))) -- 1.8.1.4 --=-=-= Content-Type: text/plain I hope Nicolas will apply it or make a better patch. The quoting used unfortunately is not idempotent, so you need to know how many times your macro will get expanded, but it is a start. You should now be able to do this: --=-=-= Content-Type: text/x-patch Content-Disposition: attachment; filename=0001-put-back-macros-with-problematic-characters.patch >From 042ad50bd06cbc5ab97c753cb5cfce8908121242 Mon Sep 17 00:00:00 2001 From: Achim Gratz Date: Sun, 17 Mar 2013 11:27:21 +0100 Subject: [PATCH] put back macros with "problematic characters" --- orgmanual.org | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/orgmanual.org b/orgmanual.org index 6aa6b81..d50b20b 100644 --- a/orgmanual.org +++ b/orgmanual.org @@ -4254,13 +4254,10 @@ Priorities can be attached to any outline node; they do not need to be TODO items. #+attr_texinfo: :table-type table :indic @asis - - {{{kbd(C-c XXX)}}} :: + - {{{kbd(C-c \\,)}}} :: - {{{kindex(C-c ,)}}} - #+comment: {{{kindex(@kbd{C-c ,})}}} - #+comment: Preceding line won't export to pdf - {{{findex(org-priority)}}} - #+comment: Should be C-c , + {{{kindex(C-c \\,)}}} + {{{findex(org-priority)}}} Set the priority of the current headline (~org-priority~). The command prompts for a priority character {{{samp(A)}}}, {{{samp(B)}}} @@ -9226,9 +9223,7 @@ the other commands, the cursor needs to be in the desired line. - ~\~ ~org-agenda-filter-by-tag-refine~ :: - #+comment: {{{kindex(XXX)}}} - #+comment: Should be \ - @@info:kindex \\@@ + {{{kindex(\)}}} Narrow the current agenda filter by an additional condition. When called with prefix arg, remove the entries that /do/ have the tag, or @@ -9350,11 +9345,9 @@ the other commands, the cursor needs to be in the desired line. Set tags for the current headline. If there is an active region in the agenda, change a tag for all headings in the region. -- {{{kbd(,)}}} :: +- {{{kbd(\\,)}}} :: - #+comment: {{{kindex(XXX)}}} - #+comment: Should be a comma - @@info:kindex ,@@ + {{{kindex(\\,)}}} Set the priority for the current item (~org-agenda-priority~). Org mode prompts for the priority character. If you reply with @@ -10691,12 +10684,9 @@ If you would like to see entities displayed as UTF8 characters, use the following command:[fn:108] #+attr_texinfo: :table-type table :indic @asis -- @@info:@kbd{C-c C-x XXX}@@ :: - - #+comment: {{{kindex(C-c C-x XXX)}}} - #+comment: Should be \ +- {{{kbd(C-c C-x \)}}} :: - @@info:kindex C-c C-x \\ + {{{kindex(C-c C-x \)}}} Toggle display of entities as UTF-8 characters. This does not change the buffer content which remains plain ASCII, but it overlays the @@ -10740,9 +10730,7 @@ subscript, but ~a_{b}~ will. #+attr_texinfo: :table-type table :indic @asis - @@info:@kbd{C-c C-x \\}@@ :: - #+comment: {{{kindex(C-c C-x XXX)}}} - #+comment: Should be \ - @@info:@kindex C-c C-x \@@ + {{{kindex(C-c C-x \)}}} In addition to showing entities as UTF-8 characters, this command will also format sub- and superscripts in a WYSIWYM way. -- 1.8.1.4 --=-=-= Content-Type: text/plain Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptations for Waldorf Q V3.00R3 and Q+ V3.54R2: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada --=-=-=--