[dk-tug] [OT] mere elisp

Lars Madsen <[email protected]>
Newsgroups gmane.comp.tex.danish
Message-ID <[email protected]>
I mange af mine substitutions makroer anvender jeg overlays til at 
markere dele af det en regexp har fanget (så jeg visuelt kan tjekke at 
den har gjort det rigtigt, der er grænsetilfælde som endnu ikke er løst 
til visse makroer), interfacet stiller mig så et spørgsmål og fjrner så 
overlayet efterfølgende.

Overlays laves med f.eks.

(setq match-overlay (make-overlay (match-beginning 1) (match-end 1)))
(overlay-put match-overlay 'face '(:background "CornflowerBlue"))

og fjernes med

(delete-overlay match-overlay)

Dvs. som pseudokode har jeg noget lignende

- regexp søgning
- marker fangst med overlay
- spørgsmål y-n
- reager på spørgsmål
- slet overlay

Hvis jeg nu ved spørgsmålet stopper makroen med C-g, så fortsætter 
overlayet med at eksistere.

Nogen der ved hvordan man får C-g til også at sørge for at eventuelle 
overlays automatisk fjernes?

--

Som tak, en makro til at erstatte \[ ... \] med \begin/end{equation*}

(defun bs-osqb-bs-csqb-replace ()
   "Replace \[ ... \] with \begin/end{equation*}"
   (interactive)
   (save-excursion
     (beginning-of-buffer)
     ;; loop over buffer to find \[ and \]
     (while (re-search-forward
	    (concat "\\(\\\\" ; match \
		    "\\(?:"  ; grouping
		    "\\["  ; open square bracket
		    "\\|"  ; OR
		    "\\]"  ; closing
		      "\\)\\)"  ; end grouping
		      ) nil t)
	; easy one first
       (when (string= (match-string 1) "\\]")
	(replace-match
	 (concat (regexp-quote TeX-esc) "end{equation*}"))
	)

       (when (string= (match-string 1) "\\[")
       ; this is a little more evil
       ; make sure we did not match \\[
	(unless (string= "\\" (string (char-before (match-beginning 0))))
	  (replace-match
	   (concat (regexp-quote TeX-esc) "begin{equation*}"))
	  )
	)
       )
     )
   )


bemærk at LaTeX-fill-buffer kan ikke finde ud af at indrykke \[...\] og 
$$...$$, derfor sørger jeg altid for at erstatte disse.

Iøvrigt kan det være en ide at kigge på LaTeX-indent-environment-list, 
så man kan styre i hvilke environments der må ombrydes tekst, hvilke der 
må rykkes ind men ikke ombrydes (f.eks. tikzpicture) og hvilke der skal 
blive stående (f.eks. verbatim).


-- 

/Lars Madsen
DK-TUG formand, tug.dk
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.