|  | @@ -805,65 +805,76 @@ children. Return t if sucessful."
 | 
	
		
			
				|  |  |    (and (org-region-active-p) (org-cursor-to-region-beginning))
 | 
	
		
			
				|  |  |    (unless (org-at-item-p)
 | 
	
		
			
				|  |  |      (error "Not on an item"))
 | 
	
		
			
				|  |  | -  (let ((origin-ind (save-excursion
 | 
	
		
			
				|  |  | +  (let ((line (org-current-line))
 | 
	
		
			
				|  |  | +	(col (current-column))
 | 
	
		
			
				|  |  | +	(pos (point))
 | 
	
		
			
				|  |  | +	(origin-ind (save-excursion
 | 
	
		
			
				|  |  |  		      (goto-char (org-list-top-point))
 | 
	
		
			
				|  |  |  		      (org-get-indentation)))
 | 
	
		
			
				|  |  |  	beg end ind ind1 ind-pos bullet delta ind-down ind-up firstp)
 | 
	
		
			
				|  |  |      (setq firstp (org-first-list-item-p))
 | 
	
		
			
				|  |  | -    (save-excursion
 | 
	
		
			
				|  |  | -      (setq end (and (org-region-active-p) (region-end)))
 | 
	
		
			
				|  |  | -      ;; If moving a subtree, don't drain other items on the way.
 | 
	
		
			
				|  |  | -      (if (and (memq last-command '(org-shiftmetaright org-shiftmetaleft))
 | 
	
		
			
				|  |  | -	       (memq this-command '(org-shiftmetaright org-shiftmetaleft)))
 | 
	
		
			
				|  |  | -	  (setq beg org-last-indent-begin-marker
 | 
	
		
			
				|  |  | -		end org-last-indent-end-marker)
 | 
	
		
			
				|  |  | -	(org-beginning-of-item)
 | 
	
		
			
				|  |  | -	(setq beg (move-marker org-last-indent-begin-marker (point)))
 | 
	
		
			
				|  |  | -	;; Determine end point of indentation
 | 
	
		
			
				|  |  | -	(if no-subtree
 | 
	
		
			
				|  |  | -	    (org-end-of-item-text-before-children)
 | 
	
		
			
				|  |  | -	  (org-end-of-item))
 | 
	
		
			
				|  |  | -	(setq end (move-marker org-last-indent-end-marker (or end (point)))))
 | 
	
		
			
				|  |  | -      ;; Get some information
 | 
	
		
			
				|  |  | -      (goto-char beg)
 | 
	
		
			
				|  |  | -      (setq ind-pos (org-item-indent-positions)
 | 
	
		
			
				|  |  | -	    bullet (cdr (car ind-pos))
 | 
	
		
			
				|  |  | -	    ind (caar ind-pos)
 | 
	
		
			
				|  |  | -	    ind-down (car (nth 2 ind-pos))
 | 
	
		
			
				|  |  | -	    ind-up (car (nth 1 ind-pos))
 | 
	
		
			
				|  |  | -	    delta (if (> arg 0)
 | 
	
		
			
				|  |  | -		      (if ind-down (- ind-down ind) 2)
 | 
	
		
			
				|  |  | -		    (if ind-up (- ind-up ind) -2)))
 | 
	
		
			
				|  |  | -      ;; Make some checks before indenting.
 | 
	
		
			
				|  |  | +    (setq end (and (org-region-active-p) (region-end)))
 | 
	
		
			
				|  |  | +    ;; If moving a subtree, don't drain other items on the way.
 | 
	
		
			
				|  |  | +    (if (and (memq last-command '(org-shiftmetaright org-shiftmetaleft))
 | 
	
		
			
				|  |  | +	     (memq this-command '(org-shiftmetaright org-shiftmetaleft)))
 | 
	
		
			
				|  |  | +	(setq beg org-last-indent-begin-marker
 | 
	
		
			
				|  |  | +	      end org-last-indent-end-marker)
 | 
	
		
			
				|  |  | +      (org-beginning-of-item)
 | 
	
		
			
				|  |  | +      (setq beg (move-marker org-last-indent-begin-marker (point)))
 | 
	
		
			
				|  |  | +      ;; Determine end point of indentation
 | 
	
		
			
				|  |  | +      (if no-subtree
 | 
	
		
			
				|  |  | +	  (org-end-of-item-text-before-children)
 | 
	
		
			
				|  |  | +	(org-end-of-item))
 | 
	
		
			
				|  |  | +      (setq end (move-marker org-last-indent-end-marker (or end (point)))))
 | 
	
		
			
				|  |  | +    ;; Get some information
 | 
	
		
			
				|  |  | +    (goto-char beg)
 | 
	
		
			
				|  |  | +    (setq ind-pos (org-item-indent-positions)
 | 
	
		
			
				|  |  | +	  bullet (cdr (car ind-pos))
 | 
	
		
			
				|  |  | +	  ind (caar ind-pos)
 | 
	
		
			
				|  |  | +	  ind-down (car (nth 2 ind-pos))
 | 
	
		
			
				|  |  | +	  ind-up (car (nth 1 ind-pos))
 | 
	
		
			
				|  |  | +	  delta (if (> arg 0)
 | 
	
		
			
				|  |  | +		    (if ind-down (- ind-down ind) 2)
 | 
	
		
			
				|  |  | +		  (if ind-up (- ind-up ind) -2)))
 | 
	
		
			
				|  |  | +    ;; Make some checks before indenting.
 | 
	
		
			
				|  |  | +    (cond
 | 
	
		
			
				|  |  | +     ((< (+ delta ind) 0)
 | 
	
		
			
				|  |  | +      (goto-char pos)
 | 
	
		
			
				|  |  | +      (error "Cannot outdent beyond margin"))
 | 
	
		
			
				|  |  | +     ;; Apply indent rules if activated.
 | 
	
		
			
				|  |  | +     ((cdr (assq 'indent org-list-automatic-rules))
 | 
	
		
			
				|  |  |        (cond
 | 
	
		
			
				|  |  | -       ((< (+ delta ind) 0) (error "Cannot outdent beyond margin"))
 | 
	
		
			
				|  |  | -       ;; Apply indent rules if activated.
 | 
	
		
			
				|  |  | -       ((cdr (assq 'indent org-list-automatic-rules))
 | 
	
		
			
				|  |  | -	(cond
 | 
	
		
			
				|  |  | -	 ;; 1. If at top-point move the whole list. Moreover, if
 | 
	
		
			
				|  |  | -	 ;; *-list is going to column 0, change bullet to "-".
 | 
	
		
			
				|  |  | -	 ((= (point-at-bol) (org-list-top-point))
 | 
	
		
			
				|  |  | -	  (when (and (= (+ delta ind) 0) (equal bullet "*")) (org-fix-bullet-type "-"))
 | 
	
		
			
				|  |  | -	  (setq end (set-marker org-last-indent-end-marker (org-list-bottom-point))))
 | 
	
		
			
				|  |  | -	 ;; 2. Do not indent before top-item.
 | 
	
		
			
				|  |  | -	 ((< (+ delta ind) origin-ind)
 | 
	
		
			
				|  |  | -	  (error "Cannot outdent beyond top level item"))
 | 
	
		
			
				|  |  | -	 ;; 3. Do not indent the first item of a list.
 | 
	
		
			
				|  |  | -	 ((and firstp (> delta 0))
 | 
	
		
			
				|  |  | -	  (error "Cannot indent the beginning of a sublist"))
 | 
	
		
			
				|  |  | -	 ;; 4. Do not outdent item that has children without moving.
 | 
	
		
			
				|  |  | -	 ;; In the case of a subtree, make sure the check applies to
 | 
	
		
			
				|  |  | -	 ;; its last item.
 | 
	
		
			
				|  |  | -	 ((and (< delta 0)
 | 
	
		
			
				|  |  | -	       (save-excursion (goto-char (1- end)) (org-item-has-children-p)))
 | 
	
		
			
				|  |  | -	  (error "Cannot outdent an item having children")))))
 | 
	
		
			
				|  |  | -      ;; Proceed to reindentation.
 | 
	
		
			
				|  |  | -      (while (< (point) end)
 | 
	
		
			
				|  |  | -	(beginning-of-line)
 | 
	
		
			
				|  |  | -	(skip-chars-forward " \t") (setq ind1 (current-column))
 | 
	
		
			
				|  |  | -	(delete-region (point-at-bol) (point))
 | 
	
		
			
				|  |  | -	(or (eolp) (org-indent-to-column (+ ind1 delta)))
 | 
	
		
			
				|  |  | -	(beginning-of-line 2)))
 | 
	
		
			
				|  |  | +       ;; 1. If at top-point move the whole list. Moreover, if
 | 
	
		
			
				|  |  | +       ;; *-list is going to column 0, change bullet to "-".
 | 
	
		
			
				|  |  | +       ((= (point-at-bol) (org-list-top-point))
 | 
	
		
			
				|  |  | +	(when (and (= (+ delta ind) 0) (equal bullet "*")) (org-fix-bullet-type "-"))
 | 
	
		
			
				|  |  | +	(setq end (set-marker org-last-indent-end-marker (org-list-bottom-point))))
 | 
	
		
			
				|  |  | +       ;; 2. Do not indent before top-item.
 | 
	
		
			
				|  |  | +       ((< (+ delta ind) origin-ind)
 | 
	
		
			
				|  |  | +	(goto-char pos)
 | 
	
		
			
				|  |  | +	(error "Cannot outdent beyond top level item"))
 | 
	
		
			
				|  |  | +       ;; 3. Do not indent the first item of a list.
 | 
	
		
			
				|  |  | +       ((and firstp (> delta 0))
 | 
	
		
			
				|  |  | +	(goto-char pos)
 | 
	
		
			
				|  |  | +	(error "Cannot indent the beginning of a sublist"))
 | 
	
		
			
				|  |  | +       ;; 4. Do not outdent item that has children without moving.
 | 
	
		
			
				|  |  | +       ;; In the case of a subtree, make sure the check applies to
 | 
	
		
			
				|  |  | +       ;; its last item.
 | 
	
		
			
				|  |  | +       ((and (< delta 0)
 | 
	
		
			
				|  |  | +	     (save-excursion (goto-char (1- end)) (org-item-has-children-p)))
 | 
	
		
			
				|  |  | +	(goto-char pos)
 | 
	
		
			
				|  |  | +	(error "Cannot outdent an item having children")))))
 | 
	
		
			
				|  |  | +    ;; Proceed to reindentation.
 | 
	
		
			
				|  |  | +    (while (< (point) end)
 | 
	
		
			
				|  |  | +      (beginning-of-line)
 | 
	
		
			
				|  |  | +      (skip-chars-forward " \t") (setq ind1 (current-column))
 | 
	
		
			
				|  |  | +      (delete-region (point-at-bol) (point))
 | 
	
		
			
				|  |  | +      (or (eolp) (org-indent-to-column (+ ind1 delta)))
 | 
	
		
			
				|  |  | +      (beginning-of-line 2))
 | 
	
		
			
				|  |  | +    ;; Get back to original position, shifted by delta
 | 
	
		
			
				|  |  | +    (goto-line line)
 | 
	
		
			
				|  |  | +    (move-to-column (max (+ delta col) 0))
 | 
	
		
			
				|  |  | +    ;; Fix bullet type
 | 
	
		
			
				|  |  |      (org-fix-bullet-type
 | 
	
		
			
				|  |  |       (and (> arg 0)
 | 
	
		
			
				|  |  |  	  (cdr (assoc bullet org-list-demote-modify-bullet))))
 | 
	
	
		
			
				|  | @@ -878,6 +889,9 @@ children. Return t if sucessful."
 | 
	
		
			
				|  |  |      (save-excursion
 | 
	
		
			
				|  |  |        (org-end-of-item-list)
 | 
	
		
			
				|  |  |        (org-maybe-renumber-ordered-list))
 | 
	
		
			
				|  |  | +    ;; Get back to original position, shifted by delta
 | 
	
		
			
				|  |  | +    (goto-line line)
 | 
	
		
			
				|  |  | +    (move-to-column (+ delta col))
 | 
	
		
			
				|  |  |      t))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  (defun org-item-indent-positions ()
 |