[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Applying macro to lines which match regexp

From: Parker, Matthew
Subject: RE: Applying macro to lines which match regexp
Date: Wed, 15 Oct 2008 19:09:38 -0400

That will come in very handy. Thanks!

Matthew Parker

SEI  | 1 Freedom Valley Drive | Oaks, PA 19456 | p: 610-676-1279 | f: 
484-676-1279 |
> -----Original Message-----
> From: address@hidden [mailto:help-gnu-
> address@hidden On Behalf Of Xah
> Sent: Wednesday, October 15, 2008 5:16 PM
> To: address@hidden
> Subject: Re: Applying macro to lines which match regexp
> alright, i took sometime to write this tutorial about how to wrap
> elisp around perl scripts.
> It was much easier then i thought. Hope it is useful.
> text version follows:
> -------------------------------------
> Elisp Wrapper For Perl Scripts
> Xah Lee, 2008-10
> This page shows a example of writing a emacs lisp function that
> process text on the current region, by calling a external perl script.
> So that you can use your existing knowledge in a scripting language
> for text processing as emacs commands.
> Elisp is great and powerful, but if you are new, it may take several
> months for you to actually become productive in using it for text
> processing. However, you are probably familiar with a existing
> language, such as Perl, PHP, Python, Ruby. It would be great if you
> can use your existing knowledge to write many text processing scripts,
> and make them available in emacs as commands, so that you can just
> select a section of text, press a key, then the selected text will be
> transformed according to one of your script.
> Basically, all your elisp function has to do is to grab the current
> region, then pass the text to a external program. The external program
> will take the input thru Stdin↗, then produce the processed result in
> Stdout. The elisp function will grab the text from the script's
> Stdout, then replace the current region by that text. Lucky for us,
> the elisp function shell-command-on-region already does this exactly.
> For your script, its should takes input from Stdin and oput to Stdout.
> For simplicity, let's assume your script is the unix program “wc”,
> which takes input from Stdin and output a text to Stdout. (the “wc”
> command counts the number of words, lines, chars in the text.) For
> example, try this: “cat ‹file name› | wc”.
> Here's the elisp wrapper:
> (defun my-process-region (startPos endPos)
>   "Do some text processing on region.
> This command calls the external script “wc”."
> (interactive "r")
>   (let (scriptName)
>     (setq scriptName "/usr/bin/wc") ; full path to your script
>     (shell-command-on-region startPos endPos scriptName nil t nil t)
>     ))
> You can assign a keyboard shortcut to it:
> (global-set-key (kbd "<F6>") 'my-process-region)
> Put the above code in your “.emacs” then restart emacs. To use your
> function, first select a region of text, then press the F6 key.
> With the above, you can write many little text processing scripts in
> your favorite language, and have them all available in emacs as
> commands.
> For how to define keyboard shortcuts with other keys, see: How to
> Define Keyboard Shortcuts in Emacs.
>   Xah

reply via email to

[Prev in Thread] Current Thread [Next in Thread]