Egy beteg srác naplója

emacs

A kiterjeszthető szövegeditor felépítéséről

Az Emacs erőssége abban rejlik, hogy programozható editor. Persze bármelyik editor programozható, akár a Gedithez (neked Vim) is írhatsz Pythonban bővítményeket, és még meg sem kell tanulnod egy új nyelvet, pláne nem egy Lispet (sic!). Az Emacs erőssége és bonyolultsága viszont tényleg abban rejlik, hogy magát az editort programozhatod. Másképp fogalmazva – fejlesztői szempontból – az Emacs egy hatalmas kódtár; ha úgy tessék, egy Elisp API. Ez persze nem teljesen igaz. Nem igaz abban a formában, hogy az API az alkalmazás fölé emelt, jól definiált réteg, amin keresztül külső bővítmények (pluginok) az API alatt meghúzódó alkalmazással kommunikálhatnak, annak szolgáltatásait használhatják, és azokra épülve egészíthetik ki annak tudását. (Az ábrák Benjamin Ferrari: Emacs is different értekezése nyomán.)

Ábra: átlagos szövegeditorok felépítése Plugin API-val

Az Emacsban az API maga az Emacs. Emacsban – amikor API-ról beszélek – magát az Emacsot értem, nem egy mezsgyéjét a kódoknak, hanem az editor teljes forráskódját, amelynek bármelyik része elérhető, módosítható, kiterjeszthető. A te kódod (bővítményed) ugyanabban a szegmensben lesz, mint a mag fejlesztőinek kódja, nincs egy éles határ (ld. API) húzva a kettő közé.

Ábra: az Emacs szövegeditor felépítése Plugin API nélkül

Tényleg nyílt forrású, és abban az értelemben is, hogy nem csak tanulmányozhatod a kódot, hanem tetszés szerint, futás időben is változtathatod annak működését. (Nem forkolod az alkalmazást, hanem testreszabod.) Gedithez is írható Last.fm plugin, sőt, meg merem kockáztatni, hogy talán még triviálisabb is: import LastFm. Az Emacs előnye akkor jelentkezik, amikor olyan funkcionalitást vagy úgy szeretnél, amire nem vagy nem úgy kínál megoldást a (plugin) API, és ez a gondolat elvezethető egészen olyan szélsőséges esetekig, mint amikor a CVS Emacsban megjelent bugot átmenetileg egy advise-zal (neked decorator) orvoslod.

Éppen ezért emacsos kiegészítő (terminussal élve: mode) fejlesztésekor külön azzal foglalkozni nem szükséges, hogy rögzítsük az alkalmazás program-interfészét. A lispes alulról felfele építkezés és az a tény, hogy bármelyik függvényünk vagy változónk mások fejlesztése során felhasználásra kerülhet, kikényszeríti, hogy a teljes kiegészítő rugalmas és biztonságos legyen, és szükség szerint API-ként funkcionáljon egyéb komponensek felé.

Listening to Last.fm in Emacs

During the backup process before I had upgraded my notebook to Fedora 10, I decided not to copy back my Music folder to the fresh installation, but start using Last.fm whenever I’d like to listen to music. The question came quite straight—so how to play Last.fm streams in Emacs?

Emacs has its great multimedia system, which has Last.fm support in development stage. Following the instructions on EMMS’s homepage and rizoma’s dotemacs, soon I got Last.fm working under my Emacs.

(To be exact, I used the EMMS source code patched by tsdh. It has some convenient addons.)

Put the following to into your dotemacs:

(add-to-list 'load-path "~/elisp/emms/")
(require 'emms-setup)
(emms-devel)
(emms-default-players)
(emms-lastfm-enable)

At this point, you’re almost ready to play the radio. You still need to set your Last.fm username and password. For the former, you may simply customize `emms-lastfm-username‘ for future sessions, but for the latter, I don’t recommend you to store your password in a plain text file—you’d rather add the following advise into your dotemacs, that asks you interactively for your Last.fm password every time you start the radio.

(defadvice emms-lastfm-radio (before read-passwd (lastfm-url))
  (if (string= emms-lastfm-password "")
      (setq emms-lastfm-password (read-passwd "Password: "))))

(ad-activate 'emms-lastfm-radio)

Go listening to Last.fm!

M-x emms-lastfm-radio-similar-artists RET angelspit

With the offical code, try this:

M-x emms-lastfm-radio RET lastfm://artist/Imperial brothers/similarartists

A LinuxPortál bemutatja: Bevezetés az Emacs használatába

A LinuxPortál nyíltforrású technológiákat érintő és szabadszoftveres közösségeket, projekteket népszerűsítő tévéműsor 348. adásában Bevezetés az Emacs használatába címen előadtam. A bemutató logikus folytatása a korábbi műsorban tartott Emacs apéritif prezentációmnak. Ezúttal az Emacssal ismerkedők számára az alkalmazás alapvető használatához szükséges fogásokat ismertettem. A továbbiakban az előadás szöveges kivonata olvasható. A tévéműsor felvétele megtekinthető a Bevezetés az Emacs használatába címmel a Google Video felületén.

To dear Emacs Planet readers: some weeks ago, I hold my second presentation on Emacs in the hungarian FLOSS related TV programme LinuxPortál. I talked about the basic steps needed to feel convenient in Emacs. I highlighted the main reasons to choose GNU Emacs 23, explained its user interface, keybinding conventions, terminology, mentioned the modes, and covered a lot of other things a user meets when she starts Emacs for the first time.

A LinuxPortál bemutatja: Bevezetés az Emacs használatába című írás tovább is van »

Ubuntu Konferencia 2008, benne: Emacs és Vim fej-fej mellett

A második magyarországi Ubuntu konferencián Horák György barátommal Emacs és Vim fej fej mellett c. előadásunkat tartottuk meg. Köszönjük a nagy számú érdeklődést, valamint a hasznos visszajelzéseket*. Köszönjük a konferencia kérdőívét kitöltők közül azoknak, akik az ötös skálán hatossal pontozták előadásunkat, és végül köszönjük a konferencia szervezőinek a színvonalas rendezvényt.

With my friend, Horák György, we gave a 20-minutes talk at the second hungarian Ubuntu conference. We presented two high-tech text editors—Emacs and Vim—to the audience. We tried to convince them, it’s time to switch to a better editing tool.

Konferenciakitűzők az Ubuntu Konferenciáról

Előadásunk tárgya nem két rivális eszköz közötti feszültség élezése, hanem a GNU Emacs (továbbiakban: Emacs) és Vim szolgáltatásainak bemutatása volt. Úgy véljük, hogy az Emacs és Vim együtt versenytársai más texteditoroknak. Az alábbiakban a prezentáción elhangzottak Emacs-vetületének szövegezése olvasható.

Az Ubuntu Konferencia 2008, benne: Emacs és Vim fej-fej mellett című írás tovább is van »

Hey Emacs-w3m, meet IDNs!

Despite IDNA support is bundled with Emacs since 2003 (C-h f idna-*), Emacs-w3m does not handle international domains. It simply encodes all non-ASCII characters in the given URL, which makes in the context of IDNs non-sense. But advising the function w3m-url-transfer-encode-string—responsible for urlencoding unsafe data—to pre-encode IDNs may help a lot. My solution below has a known limitation, so that after activating encode-idna, w3m-url-transfer-encode-string will refuse invalid URL schemes.

(defadvice w3m-url-transfer-encode-string
  (around encode-idna (url &optional coding))
  (let* ((host (w3m-http-url-host
                (w3m-parse-http-url (w3m-canonicalize-url url))))
         (url (replace-regexp-in-string host (idna-to-ascii host) url)))
    ad-do-it))

(ad-activate 'w3m-url-transfer-encode-string)

From now, you can w3m-goto-url my slides at gábor.20y.hu.

A LinuxPortál bemutatja: GNU Emacs apéritif

A nyílt forrású technológiákat bemutató LinuxPortál tévéműsor 344. adásában lehetőségem nyílt áttekintést nyújtani a GNU Emacsról. Az előadás célja egy átfogó kép kialakítása volt. Várhatók további Emacs tárgyú bemutatók a jövőbeni adásokban.

For the English-readers out there, I gave a talk in the hungarian TV programme LinuxPortál focused on open source technologies. I showed off the main features of GNU Emacs. In the future, there’ll be more presentations on specific areas of Emacs.

Az alábbiakban az előadás kivonatos tartalma olvasható. A LinuxPortál bemutatja: GNU Emacs apéritif című írás tovább is van »

Érvénytelen karakterkódolású fájlnevek kivédése Emaccsal

Az informatikai kultúrát sajnos az iwiwezésből nem lehet elsajátítani, de mit is beszélek!, legyünk haladó szelleműek, a fájlnevek igenis kezdődhessenek három szóközzel, tartalmazhassanak tetszőleges unikód karaktert, zárójellel csoportosíthassunk kedvünkre a betűket és így tovább, a konzervatív fájlnév konvenciójukhoz ragaszkodó kopaszodó informatikusok pedig menjenek csak a Szimplába, és egy (kettő) sör mellett sírják el bánatukat. Ha te, nyájas olvasóm, ennek most felültél, akkor csókolom a kezeidet, és tiszta szívemből kívánom, hogy életed értékes percekkel rövidítsék meg azok a feledhetetlen pillanatok, amikor a vegyes kódolású karakterhalmazból próbálsz meg egy normalizált stringet produkálni, amin nem hasal el az eszközök zöme.

Érvénytelen kódolású karakterek terminálban

Javarészt ezidáig a safename fedőnevű skriptben összefogott replace rutinok hada segített át a fennebb említett pillanatokon, amely kiválóan kezelte a legtöbb esetet, azonban már nem UTF-8 kódolású adatcsokornál bohóckodni kellett, hogy a script felé az mégis UTF-8-ként jelenjen meg – kényelmetlen.

Minap fedeztem fel az Emacsban (az Emacs csupa meglepetés!), hogy a dired mód menüjében szerepel egy Edit file names menüpont, amely a háttérben a wdired-change-to-wdired-mode-ot hívja meg. A mode szerkeszthető tartalmú pufferként nyitja meg újra az aktuális könyvtárat*, így a továbbiakban az egyszerű szövegként kezelhető, végrehajthatók rajta tetszőleges Elisp kódok. A legkényelmesebb benne pedig, hogy az Emacs 23-mal érkező kimunkált karakterkódolási környezet (coding system) leveszi a vállunkról az össze-vissza karakterkódolások kezelésének terhét. Installálom!


* A kézikönyv szerint: ‘Put a dired buffer in a mode in which filenames are editable.’

Unique lines in an Emacs buffer

I needed to unique lines in a buffer’s content—the same functionality that shell command uniq provides—but could not find the proper Elisp equivalent for it, though. Even EmacsWiki suggests using the shell command to delete duplicate lines. Here goes my implementation for Lisp programs, it may come in useful.

Updated: regex quoting fixed.
Updated again: Aaron S. Hawley pointed me a much cleaner duplicate lines solution.

(defun uniq-lines (beg end)
  "Unique lines in region.
Called from a program, there are two arguments:
BEG and END (region to sort)."
  (interactive "r")
  (save-excursion
    (save-restriction
      (narrow-to-region beg end)
      (goto-char (point-min))
      (while (not (eobp))
        (kill-line 1)
        (yank)
        (let ((next-line (point)))
          (while
              (re-search-forward
               (format "^%s" (regexp-quote (car kill-ring))) nil t)
            (replace-match "" nil nil))
          (goto-char next-line))))))

Spice up your life!

Let me show you what I’ve got.

Emacs color theme »Pink Bliss«

For coding—while working on my laptop—I found color theme Bharadwaj the best. At home on a TFT display I use Schematic mainly. Recently I came across Alex’s brand new Pink Bliss color theme for Emacs. There’s no word to express my vibes about it. It’s simply gay!

Hello Planet Emacs from my Emacs buffer

I keep my blog posts since more than a year in a version controlled plain text file. I write off all my drafts in blog.txt, and publish them from it. Inspite of It’s All Text supplies a convenient way from moving the text to WordPress’ admin, I felt it such annoying to visit a website just for this purpose, and by the way, why should I copy the already written text to anywhere, why can’t I post directly from my Emacs buffer? A Hello Planet Emacs from my Emacs buffer című írás tovább is van »