writing emacs commands with your fav lang

Discussion in 'Ruby' started by xahlee@gmail.com, Oct 16, 2008.

  1. Guest

    Here's a little tutorial that lets you write emacs commands for
    processing the current text selection in emacs in your favorite lang.

    Elisp Wrapper For Perl Scripts

    plain 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

    For how to define keyboard shortcuts with other keys, see: How to
    Define Keyboard Shortcuts in Emacs.

    ∑ http://xahlee.org/

    , Oct 16, 2008
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
  2. Jan Burse

    Fav. Memory Stream Impl.

    Jan Burse, Nov 25, 2011, in forum: Java
    Gene Wirchenko
    Feb 8, 2012
  3. Replies:
    Forrest Chang
    Aug 19, 2005
  4. Adam Funk
    Adam Funk
    Jan 29, 2007
  5. Replies: