Re: [PATCH] Re: [BUG] Hard-coded begin/end in org-insert-structure-template [9.5.2 (release_9.5.2-24-g668205 @ /Users/salutis/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/)]

2022-06-18 Thread Ihor Radchenko
Rudolf Adamkovič  writes:

> Ihor Radchenko  writes:
>
> I patched a local checkout of the main branch, and I can confirm that
> your works well here.  I also added [1] to my configuration file to
> upcase all the structure templates automatically.  I hope we will have
> this bundled with Org proper.  Fantastic work!

Applied onto main via 9632401dc also adding NEWS entry.

Best,
Ihor



Re: [PATCH] Re: [BUG] Hard-coded begin/end in org-insert-structure-template [9.5.2 (release_9.5.2-24-g668205 @ /Users/salutis/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/)]

2022-03-25 Thread Rudolf Adamkovič
Ihor Radchenko  writes:

I patched a local checkout of the main branch, and I can confirm that
your works well here.  I also added [1] to my configuration file to
upcase all the structure templates automatically.  I hope we will have
this bundled with Org proper.  Fantastic work!

[1] Code that upcases the structure templates:

(setq org-structure-template-alist
  (mapcar
   (lambda (pair)
 (cons (car pair)
   (upcase (cdr pair
   org-structure-template-alist))

Rudy
-- 
"Strange as it may sound, the power of mathematics rests on its evasion
of all unnecessary thought and on its wonderful saving of mental
operations."
-- Ernst Mach, 1838-1916

Rudolf Adamkovic  [he/him]
Studenohorska 25
84103 Bratislava
Slovakia



Re: [PATCH] Re: [BUG] Hard-coded begin/end in org-insert-structure-template [9.5.2 (release_9.5.2-24-g668205 @ /Users/salutis/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/)]

2022-03-23 Thread Ihor Radchenko
Rudolf Adamkovič  writes:

>> +with \"#+begin_\" and \"#+end_\" added automatically.  If the block
>> +type is written using upper case letter, \"#+BEGIN_\" and \"#+END_\"
>> +are added instead.
>
> FYI: A typo in "letter" (expected "letters")
>
> (We could also simplify to: "if the block type consists of just
> uppercase letter".)
>
>> +  (let* ((case-fold-search t) ; Make sure that matches are case-insnsitive.
>> + (region? (use-region-p))
>
> FYI: A typo in "case-insnsitive" (expected "case-insensitive")

Thanks for proofreading! Attaching the fixed version of the patch.

Best,
Ihor

>From b39925decd0e5ee5a0ce88b3fcea3a9647d35001 Mon Sep 17 00:00:00 2001
Message-Id: 
From: Ihor Radchenko 
Date: Sun, 20 Mar 2022 20:15:21 +0800
Subject: [PATCH] Auto-Upcase/downcase #+begin/#+end in structure templates

* lisp/org-tempo.el (org-tempo-add-block):
* lisp/org.el (org-insert-structure-template): When inserting
 #+begin_type/#+end_type, follow type's case.  TYPE will become
 #+BEGIN_TYPE and type will become #+bein_type.

(org-insert-structure-template): Make sure that we use
case-insensitive match even when user changes case-fold-search value.

(org-structure-template-alist): Clarify selection of #+BEGIN/END
vs. #+begin/end in the docstring.
---
 lisp/org-tempo.el | 13 ++---
 lisp/org.el   | 23 +++
 2 files changed, 25 insertions(+), 11 deletions(-)

diff --git a/lisp/org-tempo.el b/lisp/org-tempo.el
index b34007bf7..cd5ef9e8e 100644
--- a/lisp/org-tempo.el
+++ b/lisp/org-tempo.el
@@ -119,11 +119,18 @@ (defun org-tempo-add-block (entry)
   "Add block entry from `org-structure-template-alist'."
   (let* ((key (format "<%s" (car entry)))
 	 (name (cdr entry))
-	 (special (member name '("src" "export"
+	 (special (member name '("src" "export")))
+ (upcase? (string= (car (split-string name))
+   (upcase (car (split-string name))
 (tempo-define-template (format "org-%s" (replace-regexp-in-string " " "-" name))
-			   `(,(format "#+begin_%s%s" name (if special " " ""))
+			   `(,(format "#+%s_%s%s"
+  (if upcase? "BEGIN" "begin")
+  name
+  (if special " " ""))
 			 ,(when special 'p) '> n ,(unless special 'p) n
-			 ,(format "#+end_%s" (car (split-string name " ")))
+			 ,(format "#+%s_%s"
+  (if upcase? "END" "end")
+  (car (split-string name " ")))
 			 >)
 			   key
 			   (format "Insert a %s block" name)
diff --git a/lisp/org.el b/lisp/org.el
index 9455c15c8..529146097 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -9490,9 +9490,11 @@ (defcustom org-structure-template-alist
 ("s" . "src")
 ("v" . "verse"))
   "An alist of keys and block types.
-`org-insert-structure-template' will display a menu with this
-list of templates to choose from.  The block type is inserted,
-with \"#+BEGIN_\" and \"#+END_\" added automatically.
+`org-insert-structure-template' will display a menu with this list of
+templates to choose from.  The block type is inserted, with
+\"#+begin_\" and \"#+end_\" added automatically.  If the block type
+consists of just uppercase letters, \"#+BEGIN_\" and \"#+END_\" are
+added instead.
 
 The menu keys are defined by the car of each entry in this alist.
 If two entries have the keys \"a\" and \"aa\" respectively, the
@@ -9624,18 +9626,23 @@ (defun org-insert-structure-template (type)
 Select a block from `org-structure-template-alist' then type
 either RET, TAB or SPC to write the block type.  With an active
 region, wrap the region in the block.  Otherwise, insert an empty
-block."
+block.
+
+When foo is written as FOO, upcase the #+BEGIN/END as well."
   (interactive
(list (pcase (org--insert-structure-template-mks)
 	   (`("\t" . ,_) (read-string "Structure type: "))
 	   (`(,_ ,choice . ,_) choice
-  (let* ((region? (use-region-p))
+  (let* ((case-fold-search t) ; Make sure that matches are case-insensitive.
+ (region? (use-region-p))
 	 (region-start (and region? (region-beginning)))
 	 (region-end (and region? (copy-marker (region-end
 	 (extended? (string-match-p "\\`\\(src\\|export\\)\\'" type))
 	 (verbatim? (string-match-p
 		 (concat "\\`" (regexp-opt '("example" "export" "src")))
-		 type)))
+		 type))
+ (upcase? (string= (car (split-string type))
+   (upcase (car (split-string type))
 (when region? (goto-char region-start))
 (let ((column (current-indentation)))
   (if (save-excursion (skip-chars-backward " \t") (bolp))
@@ -9643,7 +9650,7 @@ (defun org-insert-structure-template (type)
 	(insert "\n"))
   (save-excursion
 	(indent-to column)
-	(insert (format "#+begin_%s%s\n" type (if extended? " " "")))
+	(insert (format "#+%s_%s%s\n" (if upcase? "BEGIN" "begin") type (if extended? " " "")))
 	(when region?
 	  

Re: [PATCH] Re: [BUG] Hard-coded begin/end in org-insert-structure-template [9.5.2 (release_9.5.2-24-g668205 @ /Users/salutis/src/emacs/nextstep/Emacs.app/Contents/Resources/lisp/org/)]

2022-03-22 Thread Rudolf Adamkovič
Ihor Radchenko  writes:

> We can auto-magically determine whether to use BEGIN_ or begin_
> depending on the case in template type. Tentative patch attached.

Interesting!

> +with \"#+begin_\" and \"#+end_\" added automatically.  If the block
> +type is written using upper case letter, \"#+BEGIN_\" and \"#+END_\"
> +are added instead.

FYI: A typo in "letter" (expected "letters")

(We could also simplify to: "if the block type consists of just
uppercase letter".)

> +  (let* ((case-fold-search t) ; Make sure that matches are case-insnsitive.
> + (region? (use-region-p))

FYI: A typo in "case-insnsitive" (expected "case-insensitive")

Looking forward to seeing this merged!

Rudy
-- 
"I love deadlines.  I love the whooshing noise they make as they go by."
-- Douglas Adams, The Salmon of Doubt, 2002

Rudolf Adamkovič  [he/him]
Studenohorská 25
84103 Bratislava
Slovakia