开发者

Infinite loop in emacs lisp when using org-table-convert-region

开发者 https://www.devze.com 2023-03-25 06:40 出处:网络
I\'ve been having trouble with an infinite loop in the code below. It inserts a list of items at point, comma separating them, and then converts the list to an org table.

I've been having trouble with an infinite loop in the code below. It inserts a list of items at point, comma separating them, and then converts the list to an org table.

This works when executing one at a time, but if you call from an emacs lisp function more than once, as below, then it goes into an infinite loop inserting |'s until it locks up or shows the message below.

Update it now locks up when I do (test1) as below

Can dowload a full example of the code from pastebin here

I can't quite figure out what's causing this behaviour. The commented lines reflect different ways to do the same thing that cause the same bug.

(defun org-table-from-list(l)
  "Create an org-table from a list"
  (if (listp l)
      (let ((beg (point)))
    (insert-list l)
;   (message (format "beg end %d %d\n" beg (point)))
    (org-table-convert-region beg (point) '(4))
;   (set-mark beg)
开发者_Python百科;   (end-of-line)
;   (org-table-create-or-convert-from-region '(4))
    (forward-line))))


(defun insert-list(l)
  "insert a list L into the current buffer"
  (let ((str ""))
    (dolist (i l)
      (setf str (concat str i ",")))
    (let ((len (length str)))
      (insert (subseq str 0 (1- len))))))

(defun test1 () (interactive) (org-table-from-list '("apple" "carrot" "coke" "smile")))

(progn 
       (test1)
       (test1))    

The error:

Warning (undo): Buffer `test3.txt' undo info was 12711518 bytes long.
The undo info was discarded because it exceeded `undo-outer-limit'.
0

精彩评论

暂无评论...
验证码 换一张
取 消