|
@@ -714,15 +714,15 @@ Assume point is at an item."
|
|
|
;; equally indented than BEG-CELL's cdr. Also, store ending
|
|
|
;; position of items in END-LST-2.
|
|
|
(catch 'exit
|
|
|
- (while t
|
|
|
- (let ((ind (+ (or (get-text-property (point) 'original-indentation) 0)
|
|
|
+ (while t
|
|
|
+ (let ((ind (+ (or (get-text-property (point) 'original-indentation) 0)
|
|
|
(org-get-indentation))))
|
|
|
- (cond
|
|
|
- ((>= (point) lim-down)
|
|
|
+ (cond
|
|
|
+ ((>= (point) lim-down)
|
|
|
;; At downward limit: this is de facto the end of the
|
|
|
;; list. Save point as an ending position, and jump to
|
|
|
;; part 3.
|
|
|
- (throw 'exit
|
|
|
+ (throw 'exit
|
|
|
(push (cons 0 (funcall end-before-blank)) end-lst-2)))
|
|
|
;; At a verbatim block, move to its end. Point is at bol
|
|
|
;; and 'org-example property is set by whole lines:
|
|
@@ -1092,13 +1092,16 @@ This function modifies STRUCT."
|
|
|
(between-A-no-blank-and-B (buffer-substring end-A-no-blank beg-B))
|
|
|
(sub-A (cons beg-A (org-list-get-subtree beg-A struct)))
|
|
|
(sub-B (cons beg-B (org-list-get-subtree beg-B struct)))
|
|
|
- ;; Store visibility status.
|
|
|
- (overlays (mapcar
|
|
|
- (lambda (ov) (cond ((not ov) 'subtree)
|
|
|
- ((cdr ov) 'children)
|
|
|
- (t 'folded)))
|
|
|
- (list (overlays-in beg-A end-A)
|
|
|
- (overlays-in beg-B end-B)))))
|
|
|
+ ;; Store overlays responsible for visibility status. We
|
|
|
+ ;; also need to store their boundaries as they will be
|
|
|
+ ;; removed from buffer.
|
|
|
+ (overlays (cons
|
|
|
+ (mapcar (lambda (ov)
|
|
|
+ (list ov (overlay-start ov) (overlay-end ov)))
|
|
|
+ (overlays-in beg-A end-A))
|
|
|
+ (mapcar (lambda (ov)
|
|
|
+ (list ov (overlay-start ov) (overlay-end ov)))
|
|
|
+ (overlays-in beg-B end-B)))))
|
|
|
;; 1. Move effectively items in buffer.
|
|
|
(goto-char beg-A)
|
|
|
(delete-region beg-A end-B-no-blank)
|
|
@@ -1132,12 +1135,19 @@ This function modifies STRUCT."
|
|
|
(setcar (nthcdr 6 e) (+ end-e (- size-B size-A))))))))
|
|
|
struct)
|
|
|
(setq struct (sort struct (lambda (e1 e2) (< (car e1) (car e2)))))
|
|
|
- ;; Restore visibility status, if needed.
|
|
|
- (unless (eq (car overlays) 'subtree)
|
|
|
- (org-list-set-item-visibility
|
|
|
- (+ beg-B (- size-B size-A)) struct (car overlays)))
|
|
|
- (unless (eq (nth 1 overlays) 'subtree)
|
|
|
- (org-list-set-item-visibility beg-A struct (nth 1 overlays)))
|
|
|
+ ;; Restore visibility status, by moving overlays to their new
|
|
|
+ ;; position.
|
|
|
+ (mapc (lambda (ov)
|
|
|
+ (move-overlay
|
|
|
+ (car ov)
|
|
|
+ (+ (nth 1 ov) (- (+ beg-B (- size-B size-A)) beg-A))
|
|
|
+ (+ (nth 2 ov) (- (+ beg-B (- size-B size-A)) beg-A))))
|
|
|
+ (car overlays))
|
|
|
+ (mapc (lambda (ov)
|
|
|
+ (move-overlay (car ov)
|
|
|
+ (+ (nth 1 ov) (- beg-A beg-B))
|
|
|
+ (+ (nth 2 ov) (- beg-A beg-B))))
|
|
|
+ (cdr overlays))
|
|
|
;; Return structure.
|
|
|
struct)))
|
|
|
|
|
@@ -1357,8 +1367,8 @@ If DEST is a buffer position, the function will assume it points
|
|
|
to another item in the same list as ITEM, and will move the
|
|
|
latter just before the former.
|
|
|
|
|
|
-If DEST is `begin' \(respectively `end'\), ITEM will be moved at
|
|
|
-the beginning \(respectively end\) of the list it belongs to.
|
|
|
+If DEST is `begin' (respectively `end'), ITEM will be moved at
|
|
|
+the beginning (respectively end) of the list it belongs to.
|
|
|
|
|
|
If DEST is a string like \"N\", where N is an integer, ITEM will
|
|
|
be moved at the Nth position in the list.
|
|
@@ -1414,10 +1424,7 @@ This function returns, destructively, the new list structure."
|
|
|
(t dest)))
|
|
|
(org-M-RET-may-split-line nil)
|
|
|
;; Store visibility.
|
|
|
- (visibility (let ((ovs (overlays-in item item-end)))
|
|
|
- (cond ((not ovs) 'subtree)
|
|
|
- ((cdr ovs) 'children)
|
|
|
- (t 'folded)))))
|
|
|
+ (visibility (overlays-in item item-end)))
|
|
|
(cond
|
|
|
((eq dest 'delete) (org-list-delete-item item struct))
|
|
|
((eq dest 'kill)
|
|
@@ -1453,9 +1460,12 @@ This function returns, destructively, the new list structure."
|
|
|
(+ end shift)))))))
|
|
|
moved-items))
|
|
|
(lambda (e1 e2) (< (car e1) (car e2))))))
|
|
|
- ;; 2. Restore visibility if appropriate.
|
|
|
- (unless (eq visibility 'subtree)
|
|
|
- (org-list-set-item-visibility (point) struct visibility))
|
|
|
+ ;; 2. Restore visibility.
|
|
|
+ (mapc (lambda (ov)
|
|
|
+ (move-overlay ov
|
|
|
+ (+ (overlay-start ov) (- (point) item))
|
|
|
+ (+ (overlay-end ov) (- (point) item))))
|
|
|
+ visibility)
|
|
|
;; 3. Eventually delete extra copy of the item and clean marker.
|
|
|
(prog1 (org-list-delete-item (marker-position item) struct)
|
|
|
(move-marker item nil)))
|