--- /home/ggole/src/emacs/lisp/align.el 2009-01-05 12:18:39.000000000 +0900 +++ loopfix-align.el 2009-01-22 08:15:59.000000000 +0900 @@ -1307,6 +1307,7 @@ (rulesep (assq 'separate rule)) (thissep (if rulesep (cdr rulesep) separate)) same (eol 0) + search-origin group group-c spacing spacing-c tab-stop tab-stop-c @@ -1412,6 +1413,7 @@ ;; while we can find the rule in the alignment ;; region.. (while (and (< (point) end-mark) + (setq search-origin (point)) (if regfunc (funcall regfunc end-mark nil) (re-search-forward regexp @@ -1436,7 +1438,8 @@ ;; if the search ended us on the beginning of ;; the next line, move back to the end of the ;; previous line. - (if (bolp) + (if (and (bolp) + (> (point) search-origin)) (forward-char -1)) ;; lookup the `group' attribute the first time @@ -1576,7 +1579,12 @@ ;; the next line; don't bother searching ;; anymore on this one (if (and (not repeat) (not (bolp))) - (forward-line))))) + (forward-line)) + + ;; if the search did not change point, + ;; move forward to avoid an infinite loop + (if (= (point) search-origin) + (forward-char))))) ;; when they are no more matches for this rule, ;; align whatever was left over