Re: [BUG] org-delete-indentation on region doesn't work when END is before BEGIN [9.6.1 (release_9.6.1-40-g3d817c @ /home/sbaugh/.local/src/emacs29/lisp/org/)]

2023-04-30 Thread Ihor Radchenko
Ihor Radchenko  writes:

> `org-delete-indentation' did not support regions properly.
> I tried to make things more consistent with `delete-indentation in the
> attached patch.

Fixed, on main.
https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=09cf89f71

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 



Re: [BUG] org-delete-indentation on region doesn't work when END is before BEGIN [9.6.1 (release_9.6.1-40-g3d817c @ /home/sbaugh/.local/src/emacs29/lisp/org/)]

2023-04-16 Thread Ihor Radchenko
Spencer Baugh  writes:

> 1. emacs -Q
> 2. Insert the following in an org-mode buffer
> * head
> a
> b
> 3. C-x h M-^ and note that it's now formatted as:
> a
> b
>  * head

`org-delete-indentation' did not support regions properly.
I tried to make things more consistent with `delete-indentation in the
attached patch.

May you please test the patch and let me know if there are any other
inconsistencies you observe?

>From 6e9a09dd74e0fcb38563b1042163e95e3e43c4da Mon Sep 17 00:00:00 2001
Message-Id: <6e9a09dd74e0fcb38563b1042163e95e3e43c4da.1681642978.git.yanta...@posteo.net>
From: Ihor Radchenko 
Date: Sun, 16 Apr 2023 13:00:40 +0200
Subject: [PATCH] org-delete-indentation: Support region selection

* lisp/org.el (org-delete-indentation): Support active region when the
first line in region is a heading.  Clarify in the docstring that
region is ignored with prefix argument.

Reported-by: Spencer Baugh 
Link: https://orgmode.org/list/ier3552edfr@janestreet.com
---
 lisp/org.el | 41 +
 1 file changed, 25 insertions(+), 16 deletions(-)

diff --git a/lisp/org.el b/lisp/org.el
index 26d2a8610..9422fd587 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -17675,41 +17675,50 @@ (defun org-kill-note-or-show-branches ()
 	   (org-fold-show-branches)
 	   (org-fold-hide-archived-subtrees beg end)
 
-(defun org-delete-indentation ( arg)
+(defun org-delete-indentation ( arg beg end)
   "Join current line to previous and fix whitespace at join.
 
 If previous line is a headline add to headline title.  Otherwise
 the function calls `delete-indentation'.
 
-I.e. with a non-nil optional argument, join the line with the
-following one.  If there is a region then join the lines in that
-region."
-  (interactive "*P")
+If there is a region (BEG END), then join the lines in that region.
+
+With a non-nil prefix ARG, join the line with the following one,
+ignoring region."
+  (interactive
+   (cons current-prefix-arg
+ (when (and (not current-prefix-arg) (use-region-p))
+   (list (region-beginning) (region-end)
+  (unless (and beg end)
+;; No region selected or BEG/END arguments not passed.
+(setq beg (line-beginning-position (if arg 1 0))
+  end (line-end-position (if arg 2 1
   (if (save-excursion
-	(beginning-of-line (if arg 1 0))
-	(let ((case-fold-search nil))
-	  (looking-at org-complex-heading-regexp)))
+(goto-char beg)
+(beginning-of-line)
+(and (< (line-end-position) end)
+ (let ((case-fold-search nil))
+	   (looking-at org-complex-heading-regexp
   ;; At headline.
   (let ((tags-column (when (match-beginning 5)
 			   (save-excursion (goto-char (match-beginning 5))
 	   (current-column
-	(string (concat " " (progn (when arg (forward-line 1))
-   (org-trim (delete-and-extract-region
-		  (line-beginning-position)
-		  (line-end-position)))
-	(unless (bobp) (delete-region (point) (1- (point
+	string)
+(goto-char beg)
+;; Join all but headline.
+(save-excursion (save-match-data (delete-indentation nil (line-beginning-position 2) end)))
+(setq string (org-trim (delete-and-extract-region (line-end-position) (line-end-position 2
 	(goto-char (or (match-end 4)
 		   (match-beginning 5)
 		   (match-end 0)))
 	(skip-chars-backward " \t")
-	(save-excursion (insert string))
+	(save-excursion (insert " " string))
 	;; Adjust alignment of tags.
 	(cond
 	 ((not tags-column))		;no tags
 	 (org-auto-align-tags (org-align-tags))
 	 (t (org--align-tags-here tags-column ;preserve tags column
-(let ((current-prefix-arg arg))
-  (call-interactively #'delete-indentation
+(funcall-interactively #'delete-indentation arg beg end)))
 
 (defun org-open-line (n)
   "Insert a new row in tables, call `open-line' elsewhere.
-- 
2.40.0


-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at .
Support Org development at ,
or support my work at 


[BUG] org-delete-indentation on region doesn't work when END is before BEGIN [9.6.1 (release_9.6.1-40-g3d817c @ /home/sbaugh/.local/src/emacs29/lisp/org/)]

2023-04-15 Thread Spencer Baugh


1. emacs -Q
2. Insert the following in an org-mode buffer
* head
a
b
3. C-x h M-^ and note that it's now formatted as:
a
b
 * head
4. Undo, then M-> C-SPC M-< C-n M-^ and note that it's now formatted as:
* head a
b
5. Undo, then M-< C-SPC M-> M-^ and note that it's now formatted
(correctly) as:
* head a b

The 3rd and 4th steps are wrong, or at least inconsistent with how
normal delete-indentation works on a region.  In 4, I assume the issue
is that org-delete-indentation doesn't check to see if a region is
active before using its special logic.  No idea what's up with 3.

Emacs  : GNU Emacs 29.0.60 (build 3, x86_64-pc-linux-gnu, X toolkit, cairo 
version 1.15.12, Xaw scroll bars)
 of 2023-03-13
Package: Org mode version 9.6.1 (release_9.6.1-40-g3d817c @ 
/home/sbaugh/.local/src/emacs29/lisp/org/)