[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 | www.seic.com
> -----Original Message-----
> From: help-gnu-emacs-bounces+mparker=seic.com@gnu.org [mailto:help-gnu-
> emacs-bounces+mparker=seic.com@gnu.org] On Behalf Of Xah
> Sent: Wednesday, October 15, 2008 5:16 PM
> To: help-gnu-emacs@gnu.org
> 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.
>
> http://xahlee.org/emacs/elisp_perl_wrapper.html
>
> 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.
>
> THE PROBLEM
>
> 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.
>
> SOLUTION
>
> 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
> ∑ http://xahlee.org/
>
> ☄