Emacs Lisp

A HupWiki-ből...

Az Emacs Lisp (röviden Elisp) a GNU Emacs és XEmacs szövegszerkesztőkben használt LISP dialektusú programozási nyelv. Az Emacs funkcionalitásának túlnyomó részét Elispben, a maradékot (és a Lisp értelmezőt is) C-ben írták. A teljes Emacs keretrendszer testreszabható és bővíthető Elispben. Az Emacs konfigurációs állománya (.emacs) is Elisp nyelvű.

Az Elisp főbb különbségei a Common Lisp-től: alapértelmezetten dinamikus hatókör; nincsenek csomagok (packages); csak interpretált (nem fordul gépi kódra, csak Emacs bytecode-ra).

Az Elisp forráskódokat megegyezés szerint .el kiterjesztésű fájlokban tároljuk. A forráskódok lefordíthatók bájtkódra, ezek a fájlok .elc-re végződnek. Abból kifolyólag, hogy az Emacs nagyrészt Elisp kódbázison alapszik, teljes mértékben támogatja az Elisp nyelvű fejlesztést: tartalmaz természetesen dedikált major-mode-ot (M-x emacs-lisp-mode), beépített nyomkövetőt és hibakeresőt, kontextus-érzékeny súgót, Elispben programozható shellt.

Az Elispben írt programok az Emacs bináris --script kapcsolójával is futtathatók – ebben az esetben nem indul el az alkalmazás felhasználói felülete, az Elisp programunk egy Python/Perl/stb. szkripthez hasonlóan fog viselkedni (pl. szabványos bemeneteti, kimeneti és hiba csatornát fogja használni).

Példa forráskód

Álljon itt egy egyszerű Elisp függvény, amely a kurzor alatti szót kikeresi a SZTAKI angol–magyar szótárában.

(defun slink-sztaki-phrase-lookup ()
  "Look up the phrase under cursor in SZTAKI and echo translation if any."
  (interactive)
  (let* ((phrase (downcase (thing-at-point 'word)))
         (url (concat "http://szotar.sztaki.hu/dict_search.php"
                      "?O=HUN&E=1&L=ENG%3AHUN%3AEngHunDict&in_emacs=1&W="
                      (w3m-url-encode-string phrase)))
         (match (format "phrase '%s' not found" phrase)))
    (with-temp-buffer
      (w3m-process-with-wait-handler
        (w3m-retrieve-and-render url nil nil nil nil handler))
      (when (re-search-forward (concat phrase ":.*") nil t)
        (setq match (match-string 0))))
    (message (concat "SZTAKI: " match))))