[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: replace-in-string and backward-delete-char [help request!]
From: |
Michael Slass |
Subject: |
Re: replace-in-string and backward-delete-char [help request!] |
Date: |
Mon, 18 Nov 2002 19:01:52 GMT |
User-agent: |
Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 |
Joe Corneli <jcorneli@mail.ma.utexas.edu> writes:
>Hello --
>
>I am running XEmacs version 21.5 (beta4) "bamboo" for
>darwin 6.0. I expect that won't be hugely relevant but
>thought I should mention it before proceeding.
>
>I wrote the following code (below). It has 2 problems. The first
>is that replace-in-string does not seem to have any effect.
>The second is that backward-delete-char copies the deleted stuff
>to the kill ring even though I ask it not to (at least
>I think that I'm interpreting the documentation properly by
>adding an explicit "nil" at the end. -- Behavior is the same
>for me when I put nothing after the "3").
>
>Suggestions? I'm open to someone rewriting the code entirely
>if he or she has a better way to do this. I just want it
>to work....
>
>Thanks,
>Joe Corneli
>
>(defun cite-last-n-words (n)
>"Copy last ARG words to point and wrap with TeX citation markup."
> (interactive "p")
> (backward-kill-word n)
> (yank)
> (insert " \\cite{")
> (kill-new
> ; stuff I can't get to work properly--------
> (replace-in-string
> (replace-in-string
> (prin1-to-string (yank))
> " " "_")
> "[\n]" "_")
> ; --------stuff I can't get to work properly
> )
> (yank)
>
> ;; need to rid of trailing nil... but I don't like it being added to
> ;; kill ring even though I indicate I don't want it there.
> (backward-delete-char 3 nil)
> (delete-horizontal-space)
> (insert "} ")
> )
>
>
>
I'm not sure if you're trying to wrap the current n word in \cite{...}
in place, or trying to place such a string on the kill ring. Here's a
solution for each. The only magic is the (save-excursion ...) form, for
which you should read the docs,
(defun cite-last-n-words (word-count)
"Wrap WORD-COUNT words before the point in TeX \\cite{...}"
(interactive "p")
(insert "}")
(save-excursion
(backward-word word-count)
(insert "\\cite{")))
(defun add-last-n-words-citation-to-kill (word-count)
"Add to kill ring: \"\\cite{<last WORD-COUNT words>}\""
(interactive "p")
(let* ((beg
(save-excursion
(backward-word word-count)
(point)))
(entry (concat "\\cite{"
(buffer-substring beg (point))
"}")))
(kill-new entry)
(message "Created kill ring entry: %s" entry)))
--
Mike Slass