Joel og vennerne spørger, hvorfor er Emacs så populær?
Folket svarer, og lister alle de gammelkendte argumenter - Emacs kan udvides til døde, findes på samtlige platforme, understøtter selv de mest obskure programmeringssprog, etc.
Old hat.
Jeg var engang Emacs-junkie, XEmacs var mit fix. Jeg skrev meget kode, virkelig mange linier PHP, Python, Unix shell, Java og ikke mindst Lisp, Emacs’ eget udvidelsessprog. Halvdelen af det kode jeg skrev, var nemlig blot for at konfigurere Emacs til et nogenlunde brugbart niveau; ikke et højtravende Turing-maskinelt niveau, men blot for at opnå de muligheder, andre mere moderne IDE’r tilbød out of the box:
- Integration med operativsystemet og filtypeassociering
- Syntaxfarvekodning og tab-completion af nøgleord, automatisk genkendt ud fra filtypen
- Funktions- og definitionsoversigt, gerne i selvstændigt vindue
- Samling af flere filer i et projekt, gerne grupperet efter type og vist i selvstændigt vindue
- Automatisk genåbning af de filer, der var åbne da applikationen sidst blev brugt
- Mulighed for at åbne filer på fjerne servere, eksempelvis via SSH eller FTP
Det var ikke umuligt at opnå, men krævede blot en anseelig indsats i at finde de passende og kompatible Lisp-udvidelser og integrere disse i de i forvejen mangfoldige konfigurationsfiler.
Det var ikke for sjov, at man som Emacs-bruger havde sine konfigurationsfiler og Lisp-udvidelser under versionskontrol, det var simpelthen en nødvendighed.
For dem, der aldrig har stiftet bekendtskab med Emacs og Lisp, er nedenstående et uddrag af Emacs’ konfigurationsfil. Det er nu, børnene skal sendes udenfor og lege, inden det bliver grimt:
(custom-set-variables '(column-number-mode t) '(gnuserv-frame t) '(line-number-mode t) '(toolbar-visible-p nil)) (custom-set-faces '(default ((t (:size "12pt" :family "Lucidatypewriter"))) t))
Emacs er som meget andet Open Source, skruen uden ende. Man kan som bruger, blive ved med at finpudse og forbedre indtil fingrene falder af. Muligheden for at tilpasse og udvide, er netop en af Open Sources traditionelle salgsargumenter, men det er en akilleshæl i forklædning; Fnidderiet og tilpasningen er sjældent valgfri, men nødvendigt for at produktet kan konkurrere med kommercielt udbudt programmel, hvor nogen har gjort en indsats for at gøre produktet brugbart for andre end dem selv.
Misforstå ikke mine tirader, jeg er ivrig tilhænger af Open Source. Men jeg er ingenlunde tilhænger af den (sub)kultur, der følger med, hvor nye features vægtes højere end brugervenlighed og målrettethed.
Det er tydeligt, Emacs er lavet af programmører til programmører.
Nu om dage er jeg Mac-junkie, mit liv er for kort til bitfnidderi og uendelige tilpasninger; jeg køber færdige programmer, der bare virker som jeg vil ha’ det.
- og jeg er ikke alene.
Fodnote til dem, der stadig læser med: Det er iøvrigt ganske svært at opdrive en ægte Emacs til MacOS X, gad vide hvorfor…
GNU Screen er et fantastisk værktøj, der ganske ufortjent henslæber en stærkt ignoreret tilværelse.
(yderligere beskrivelser af Screens dyder må vente til når foråret engang kommer… hvis det kommer)
Det er dog ikke alle aspekter ved Screen, der er lige fantastiske; default-konfiguration byder på katastrofale tastaturgenveje for Emacs-junkier som undertegnede. Eksempelvis er attention-funktionen automatisk defineret som Ctrl-a, hvilket i fornuftigt programmel (Emacs, Korn shell og venner) flytter markøren til starten af linien. Efter at have talt grimt om upålidelige trådløse tastaturer og slidte Control-taster, gik denne hijacking af Control-tasten op for undertegnede. Løsningen var dog simpel idet Screen på følgende vis kan overbevises til at benytte mere fornuftige tastaturgenveje såsom Ctrl-w via kommandolinieparametren “-e”:
screen -e^Wa
Det anbefales at gemme eventuelle ændringer som et alias i shellens konfigurationsfil; Jeg har eksempelvis just tilføjet følgende linie til ~/.profile for at undgå yderligere raserianfald.
alias screen=”screen -e^Wa”
… og nu har jeg det meget bedre.
(ovenstående er testet i en tudsegammel Linux med Screen-3.9.9-3 og i Mac OS X med Screen-4.00.02)