Hi Philip, thanks for the comments. I'll look at wrapping anything approach when time permits... Meanwhile, following your comment, I'd propose something like --- cut here --- (defun surround-region-or-point (before after &optional put-after) "Insert `before' before mark or region, `after' after mark or region and put mark after `after' if `put-after' is not nil" ;; insert the first string before the mark or region-beginning (if (use-region-p) (with-restriction (region-beginning) (region-end) ;; Insert `before' before region (goto-char (point-min)) (insert before) (goto-char (point-max))) (insert before)) ;; Insert the second string after the point or mark (if put-after (insert after) ; put point after second string (save-excursion (insert after)))) ; put point before second string --- cut here --- Wouldn't it serve a couple of scenarios? Best, /PA On Tue, 6 Feb 2024 at 09:14, Philip Kaludercic wrote: > Pedro Andres Aranda Gutierrez writes: > > > Hi, > > I really don't know if this is useful for more people or it's just me. In > > the elisp I write, I have ended up more than once wrapping the point or > the > > active region with two strings. > > There are certainly some cases where less generic code like this was > written, e.g. in rcirc we have `rcirc-format'. > > > I normally use a yasnippet for this, so I really don't use elisp ;-) > > > > But when I need this for a package, I end up replicating the following > > function where I need it: > > > > --- cut here --- > > (defun surround-region-or-point (before after &optional put-after) > > "Insert `before' before mark or region, > > `after' after mark or region and > > put mark after `after' if `put-after' is not nil" > > (if (use-region-p) > > (with-restriction (region-beginning) (region-end) > > ;; Insert `before' before region > > (goto-char (point-min)) > > (insert before) > > (goto-char (point-max)) > > ;; Insert `after' after region > > (if put-after > > (insert after) ; put point after inserted string > > (save-excursion (insert after)))) ; put point after region > > Can't you pull this code out of the if > > > (progn > > ... and then drop the progn? > > > (insert before) > > (if put-after > > (insert after) ; put point after both strings > > (save-excursion (insert after)))))) ; put point between strings > > --- cut here --- > > Also interesting, if you want to be generic, why not use an approach > like `isearch-forward-thing-at-point' and allow wrapping anything that > defines `bounds-of-thing-at-point'? > > > I was wondering if it would make sense to have this in the emacs lisp > > library once and for good. > > > > Best, /PA > -- Fragen sind nicht da, um beantwortet zu werden, Fragen sind da um gestellt zu werden Georg Kreisler Headaches with a Juju log: unit-basic-16: 09:17:36 WARNING juju.worker.uniter.operation we should run a leader-deposed hook here, but we can't yet