naim@nucsrl.UUCP (Naim Abdullah) (01/28/88)
I am a reformed vi user, trying to switch completely to GnuEmacs
and MicroGnu (mg). One thing I frequently find myself needing to
do is prefix a region with some character. Mg has a nice function
called "prefix-region" to do that but surprisingly I could not
find an equivalent in GnuEmacs 18.48. So when I am running GnuEmacs,
I have to pipe the region through a "sed s/./>&/p", yank it
out of the other window and paste it into my buffer and kill
the old region.
Can some mlisp guru post the function "prefix-region" (as
found in mg) in mlisp so that I can put it in my load path ?
As they used to say, thanks in advance for your help.
Naim Abdullah
Dept. of EECS,
Northwestern University
Internet: naim@eecs.nwu.edu
Uucp: {ihnp4, chinet, gargoyle}!nucsrl!naimwolfgang@mgm.mit.edu (Wolfgang Rupprecht) (01/29/88)
In article <3910015@nucsrl.UUCP> naim@nucsrl.UUCP (Naim Abdullah) writes: >Can some mlisp guru post the function "prefix-region" (as >found in mg) in mlisp so that I can put it in my load path ? How about: (defun prefix-region (point mark string) "Prefix the region between POINT and MARK with STRING." (interactive "*r\nsPrefix: ") (save-excursion (save-restriction (narrow-to-region point mark) (goto-char point) (replace-regexp "^" string)))) -- Wolfgang Rupprecht ARPA: wolfgang@mgm.mit.edu (IP 18.82.0.114) Freelance Consultant UUCP: mit-eddie!mgm.mit.edu!wolfgang Boston, Ma. VOICE: Hey_Wolfgang!_(617)_267-4365 Wolfgang Rupprecht ARPA: wolfgang@mgm.mit.edu (IP 18.82.0.114) Freelance Consultant UUCP: mit-eddie!mgm.mit.edu!wolfgang Boston, Ma. VOICE: Hey_Wolfgang!_(617)_267-4365
Ram-Ashwin@cs.yale.edu (Ashwin Ram) (01/29/88)
In article <3910015@nucsrl.UUCP>, naim@nucsrl (Naim Abdullah) writes: > One thing I frequently find myself needing to > do is prefix a region with some character. Mg has a nice function > called "prefix-region" to do that [...] The following function should do what you want: (defun prefix-region (begin end prefix) "Prefix every line in the region between BEGIN and END with the string PREFIX." (interactive "r\nsPrefix: ") (save-excursion (save-restriction (narrow-to-region begin end) (goto-char (point-min)) (while (re-search-forward "^" nil t) (replace-match prefix t t))))) One problem is that if the region starts from a point in the middle of a line (rather than at the beginning of a line), the prefix will be inserted at that point in the middle of the line too. This is pretty easy to fix if it's a problem (I don't know what MG's prefix-region does in this situation). -- Ashwin Ram -- ARPA: Ram-Ashwin@cs.yale.edu UUCP: {decvax,ucbvax,harvard,cmcl2,...}!yale!Ram-Ashwin BITNET: Ram@yalecs
gore@nucsrl.UUCP (Jacob Gore) (01/29/88)
/ nucsrl:comp.emacs / Ram-Ashwin@cs.yale.edu (Ashwin Ram) / Jan 28, 1988 / >One problem is that if the region starts from a point in the middle of a line >(rather than at the beginning of a line), the prefix will be inserted at that >point in the middle of the line too. This is pretty easy to fix if it's a >problem (I don't know what MG's prefix-region does in this situation). It (mg) treats the entire line as part of the region. Jacob Gore Gore@EECS.NWU.Edu Northwestern Univ., EECS Dept. {oddjob,gargoyle,ihnp4}!nucsrl!gore
jr@LF-SERVER-2.BBN.COM (John Robinson) (01/29/88)
Regular expression replacing in GNU emacs will handle this. Here's a
sample function:
(defun prefix-region ()
(save-excursion
(save-restriction
(narrow-to-region (point) (mark))
(goto-char (point-min))
(replace-regexp "^.*$" ">\\&"))))
The doubled backslash becomes one in the stored string; the & has to
be escaped. Look at the dociumentation for replace-regexp, and in
Info under regular expressions.
/jr
jr@bbn.com or jr@bbn.uucpwohler@spam.istc.sri.com (Bill Wohler) (02/02/88)
while the prefix-region function that people have been posting is
nice, this function that i wrote (with your help) last year is more
general. to perform a prefix-region, you would say, "M-x
re-replace-region RET ^ RET whatever RET".
(defun re-replace-region (begin end old new)
"Replace occurrences of REGEXP with TO-STRING in region."
(interactive "*r\nsReplace string: \nswith: ")
(save-excursion
(save-restriction
(narrow-to-region begin end)
(goto-char (point-min))
(while (re-search-forward old (point-max) t)
(replace-match new t t)))))
this has a feature of combining all the changes so that one undo
will undo all of them.
--bwrbj@ICST-CMR.ARPA (Root Boy Jim) (02/24/88)
From: Naim Abdullah <nucsrl!naim@ODDJOB.UCHICAGO.EDU>
Mg has a nice function
called "prefix-region" to do that but surprisingly I could not
find an equivalent in GnuEmacs 18.48. So when I am running GnuEmacs,
I have to pipe the region through a "sed s/./>&/p", yank it
out of the other window and paste it into my buffer and kill
the old region.
Not really. The function `shell-command-on-region', when given a prefix
arg, replaces the region with the command output. So you can type
^U ESC | sed 's/^/>/' RET. Note also the simpler regexp.
Naim Abdullah Dept. of EECS, Northwestern University
Internet: naim@eecs.nwu.edu Uucp: {ihnp4, chinet, gargoyle}!nucsrl!naim
(Root Boy) Jim Cottrell <rbj@icst-cmr.arpa>
National Bureau of Standards
Flamer's Hotline: (301) 975-5688
We are now enjoying total mutual interaction in an imaginary hot tub...wilkes@mips.COM (John Wilkes) (02/25/88)
In article <8802232111.AA14048@icst-cmr.arpa.ARPA> rbj@ICST-CMR.ARPA (Root Boy Jim) writes: > > From: Naim Abdullah <nucsrl!naim@ODDJOB.UCHICAGO.EDU> > > Mg has a nice function > called "prefix-region" to do that but surprisingly I could not ... >^U ESC | sed 's/^/>/' RET. Note also the simpler regexp. No need to pipe the region to sed... Try this: query-replace-regexp: Replace some things after point matching REGEXP with TO-STRING. As each match is found, the user must type a character saying what to do with it. For directions, type C-h at that time. John -- -- @work: -- {decwrl,ames,pyramid,prls}!mips!wilkes -- OR, for those of great faith: -- wilkes@mips.com
lrs@esl.UUCP (Lynn Slater) (02/25/88)
Posting-Front-End: GNU Emacs 18.44.12 of Mon Nov 16 1987 on esl (berkeley-unix) > Mg has a nice function > called "prefix-region" to do that but surprisingly I could not > find an equivalent in GnuEmacs 18.48. I am not sure if this is what you are asking for, but here is my own fix. (defun insert-box (start end text) "Insert a text prefix at a column in all the lines in the region. Called from a program, takes three arguments, START, END, and TEXT. The column is taken from that of START." (interactive "r\nsText To Insert: ") (save-excursion (let (cc) ;; the point-marker stuff is needed to keep the edits from changing ;; where end is (goto-char end) (setq end (point-marker)) (goto-char start) (setq cc (current-column)) (while (< (point) end) ;; modified 2/2/88 ;; I should here check for tab chars (insert text) (forward-line 1) (move-to-column cc)) (move-marker end nil)))) (defun insert-end (start end text) "Insert a text prefix at the end in all the lines in the region. Called from a program, takes three arguments, START, END, and TEXT." (interactive "r\nsText To Insert: ") (save-excursion (let (cc) ;; the point-marker stuff is needed to keep the edits from changing ;; where end is (goto-char end) (setq end (point-marker)) (goto-char start) (end-of-line) (while (< (point) end);; modified 2/2/88 ;; I should here check for tab chars (insert text) (forward-line 1) (end-of-line) ) (move-marker end nil)))) =============================================================== Lynn Slater ESL/TRW (408) 738-2888 x 4482 lrs@esl.COM ===============================================================