Peter Salazar <cycleofs...@gmail.com> wrote: > OK, I was able to successfully install org-mode 7.9.2. But there's something > still wrong with the > way org-mode and orgstruct-mode are handling numbered lists. > > In org-mode itself, when I enter "1. " and then hit OPTION-RETURN, it > generates the next line "2. " > but my cursor stays on the first line "1. " >
It does that for me too if I leave the item empty, but if I say 1. foo and press META-RET it generates the 2. line and goes to it. > In markdown-mode with orgstruct-mode on, I get the following error: > I don't have markdown mode, but in fundamental mode, turning on orgstruct-mode and adding a numbered list behaves properly for me. Can you try that? Is markdown mode a necessary prerequisite for the bug to occur? If so, where does one get markdown mode? I looked at the code a bit, but it's not obvious to me what's wrong. The relevant code (in org-list.el:org-list-struct-apply-struct) is ,---- | ;; 3. Shift each slice in buffer, provided delta isn't 0, from | ;; end to beginning. Take a special action when beginning is | ;; at item bullet. | (mapc (lambda (e) | (unless (zerop (nth 2 e)) (apply shift-body-ind e)) | (let* ((beg (nth 1 e)) | (cell (assq beg struct))) | (unless (or (not cell) (equal cell (assq beg old-struct))) | (funcall modify-item beg)))) | sliced-struct)) `---- in the (funcall modify-item beg) line. The modify-item function does ,---- | (looking-at org-list-full-item-re) | ;; a. Replace bullet | (unless (equal old-bul new-bul) | (replace-match new-bul nil nil nil 1)) `---- which is where it blows up. It uses match data from the previous search, the call to looking-at, but what happens if looking-at returned nil? Does it set the match data or is it then the case that the replace-match is trying to use match data from some previous unrelated search? Nick > Debugger entered--Lisp error: (args-out-of-range -1 2) > replace-match("- " nil nil nil 1) > (if (equal old-bul new-bul) nil (replace-match new-bul nil nil nil 1)) > (unless (equal old-bul new-bul) (replace-match new-bul nil nil nil 1)) > (let* ((new-ind ...) (old-ind ...) (new-bul ...) (old-bul ...) (new-box > ...)) (looking-at > org-list-full-item-re) (unless (equal old-bul new-bul) (replace-match new-bul > nil nil nil 1)) (cond > (...) (... ...) (... ... ...) (t ...)) (unless (= new-ind old-ind) > (delete-region ... ...) > (indent-to new-ind))) > (lambda (item) (goto-char item) (let* (... ... ... ... ...) (looking-at > org-list-full-item-re) > (unless ... ...) (cond ... ... ... ...) (unless ... ... ...)))(399) > funcall((lambda (item) (goto-char item) (let* (... ... ... ... ...) > (looking-at > org-list-full-item-re) (unless ... ...) (cond ... ... ... ...) (unless ... > ... ...))) 399) > (if (or (not cell) (equal cell ...)) nil (funcall modify-item beg)) > (unless (or (not cell) (equal cell ...)) (funcall modify-item beg)) > (let* ((beg ...) (cell ...)) (unless (or ... ...) (funcall modify-item > beg))) > (lambda (e) (unless (zerop ...) (apply shift-body-ind e)) (let* (... ...) > (unless ... ...)))((404 > 399 0)) > mapc((lambda (e) (unless (zerop ...) (apply shift-body-ind e)) (let* (... > ...) (unless ... ...))) > ((408 404 0) (404 399 0) (399 379 0) (379 300 0) (300 231 0) (231 147 0))) > (let (end-list acc-end itm-shift all-ends sliced-struct) (mapc (lambda ... > ...) old-struct) (setq > all-ends (sort ... ...)) (while (cdr all-ends) (let* ... ...)) (mapc (lambda > ... ... ...) > sliced-struct)) > ...