Бесконечный цикл в emacs lisp при использовании org-table-convert-region - PullRequest
2 голосов
/ 05 августа 2011

У меня были проблемы с бесконечным циклом в коде ниже. Он вставляет список элементов в точку, разделяя их запятыми, а затем преобразует список в таблицу org.

Это работает при выполнении по одной за раз, но если вы вызываете из функции lisp emacs более одного раза, как показано ниже, то она входит в бесконечный цикл, вставляя символы |, пока не заблокируется или не покажет сообщение ниже.

Обновление теперь блокируется, когда я делаю (test1), как показано ниже

Можно загрузить полный пример кода из pastebin здесь

Я не могу понять, что вызывает такое поведение. Закомментированные строки отражают разные способы сделать то же самое, что приводит к одной и той же ошибке.

(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)
;   (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))    

Ошибка:

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