ralph@laas.fr (Ralph P. Sobek) (12/06/90)
I have not looked into the problem of mis-specified REGEXPs. But, I have patched gin-mode to properly indent paragraphs and I even added gin-indent-region. The problem with the original gin-mode is that it uses the free (or special) variable `fill-prefix', and when one gin-fill's a paragraph or a region it eventually calls fill-paragraph or fill-region respectively. When one gin-fill's one wants to add the gin guessed prefix (gin-fill-prefix) to all lines in the paragraph that do *not* already have it. The problem is in paragraph.el: both forward-paragraph and backward paragraph use fill-prefix in order to isolate the paragraph. And gin-mode has already assigned fill-prefix from its gin-fill-prefix. I would suggest that fill-prefix become an optional argument to all the functions that use it rather than be a specail variable. I do *not* know if this might break some other code!! In the mean time, here are the context diffs for gin-mode that work for me. Let me know if you have problems. Basically, I just inserted the source code for fill-paragraph and fill-region directly into gin-mode. *** /usr/local/emacs/lisp/local/gin.el Fri Nov 2 20:46:59 1990 --- gin.el Mon Nov 12 15:46:44 1990 *************** *** 43,48 **** --- 43,51 ---- ;; * what line beginnings are really hanging indents. The ;; standard setup recognizes the stars used right here, ;; enumerations, and some more... + + ;; Change History: + ;; Nov 9, 1990 - Ralph P.Sobek - Added gin-fill-region. ;; The guessing stuff *************** *** 98,107 **** With arg, also justify." (interactive "P") (if gin-mode ! (let ((fill-prefix (gin-guess-prefix))) ! (funcall 'gin-old-fill-paragraph arg)) (funcall 'gin-old-fill-paragraph arg))) (defun gin-do-auto-fill() (if gin-mode (let ((fill-prefix (gin-guess-prefix))) --- 101,138 ---- With arg, also justify." (interactive "P") (if gin-mode ! (let ((gin-fill-prefix (gin-guess-prefix)) ! end) ! (save-excursion ! (forward-paragraph) ! (or (bolp) (newline 1)) ! (setq end (point)) ! (backward-paragraph) ! (let ((fill-prefix gin-fill-prefix)) ! (fill-region-as-paragraph (point) end arg)))) (funcall 'gin-old-fill-paragraph arg))) + (defun gin-fill-region (from to &optional justify-flag) + "fill-region in Gin mode, tries to guess the appropriate fill-prefix. + Prefix arg (non-nil third arg, if called from program) + means justify as well." + (interactive "r\nP") + (if gin-mode + (let ((gin-fill-prefix (gin-guess-prefix))) + (save-restriction + (narrow-to-region from to) + (goto-char (point-min)) + (while (not (eobp)) + (let* ((initial (point)) + (end (progn + (forward-paragraph 1) (point))) + (fill-prefix gin-fill-prefix)) + (forward-paragraph -1) + (if (>= (point) initial) + (fill-region-as-paragraph (point) end justify-flag)) + (goto-char end))))) + (funcall 'gin-old-fill-region from to justify-flag))) + (defun gin-do-auto-fill() (if gin-mode (let ((fill-prefix (gin-guess-prefix))) *************** *** 115,120 **** --- 146,154 ---- (defconst gin-old-fill-paragraph nil "Keeps the true fill-paragraph function during Gin mode.") + (defconst gin-old-fill-region nil + "Keeps the true fill-region function during Gin mode.") + (defconst gin-old-do-auto-fill nil "Keeps the true do-auto-fill function during Gin mode.") *************** *** 121,131 **** --- 155,167 ---- (defun gin-overlay-functions() "Undermine emacs with Gin stuff." (fset 'fill-paragraph (symbol-function 'gin-fill-paragraph)) + (fset 'fill-region (symbol-function 'gin-fill-region)) (fset 'do-auto-fill (symbol-function 'gin-do-auto-fill))) (defun gin-restore-originals () "Throw gin-mode functions out everywhere." (fset 'fill-paragraph (symbol-function 'gin-old-fill-paragraph)) + (fset 'fill-region (symbol-function 'gin-old-fill-region)) (fset 'do-auto-fill (symbol-function 'gin-old-do-auto-fill))) (if (boundp 'gin-mode) *************** *** 137,142 **** --- 173,179 ---- (make-variable-buffer-local 'gin-left-hang-indent-re) (make-variable-buffer-local 'gin-retain-indent-re) (fset 'gin-old-fill-paragraph (symbol-function 'fill-paragraph)) + (fset 'gin-old-fill-region (symbol-function 'fill-region)) (fset 'gin-old-do-auto-fill (symbol-function 'do-auto-fill)) (gin-overlay-functions)) *************** *** 151,160 **** two regexps 'gin-left-hang-indent-re' and 'gin-retain-indent-re', see their documentation. ! When Gin mode is active, auto-filling and fill-paragraph will both use ! a \"guessed\" value as fill-prefix." (interactive "P") (setq gin-mode (if (null arg) (not gin-mode) (> (prefix-numeric-value arg) 0))) --- 188,197 ---- two regexps 'gin-left-hang-indent-re' and 'gin-retain-indent-re', see their documentation. ! When Gin mode is active, auto-filling, fill-paragraph, and fill-region ! will both use a \"guessed\" value as fill-prefix." (interactive "P") (setq gin-mode (if (null arg) (not gin-mode) (> (prefix-numeric-value arg) 0))) -- Ralph P. Sobek Disclaimer: The above ruminations are my own. ralph@laas.fr Addresses are ordered by importance. ralph@laas.uucp, or ...!uunet!laas!ralph If all else fails, try: sobek@eclair.Berkeley.EDU =============================================================================== Reliable software should kill people reliably! -Andy Mickel, Pascal News #13,78