Gå til innhold

Emacsblog - en liten demonstrasjon av hvor fantastisk Emacs faktisk er


Anbefalte innlegg

Jeg har i lengre tid gått og irritert meg over at det ikke finnes et godt alternativ for en dag-til-dag-blog. Online editorer og det aller meste som finnes av "blog-software" suger stort. Jeg startet derfor å leke med tanken på at det måtte være mulig å blogge direkte i Emacs.

 

Jeg fikk endelig satt meg ned siste par dagene og realisert drømmen, og resultatet ble blog.vanntett.net.

 

Følgende teknologi er brukt: Emacs, org-mode, org-remember, git og jekyll.

 

Slik fungerer bloggen i praksis:

Inne i Emacs trykker jeg C-c 5 r c hvor C-c 5 r kjører org-remember og c velger min blog-template. Deretter skriver jeg blog-innlegget og trykker C-c C-c som lagrer innlegget i min blog.org-fil. Deretter trykker jeg C-c 5 p og blog-innlegget publiseres.

 

Jeg kan også gjøre det samme i Conkeror (altså nettleseren jeg bruker - fantastisk nettleser som bruker Emacs-commandoer, samt at tekst redigeres direkte i Emacs. Jeg sitter og skriver dette innlegget i Emacs). Forskjellen er da at URL-en til nettsiden i fokus automatisk tas med i innlegget.

 

Slik fungerer det "under panseret":

org-remember brukes for å for å skrive til diverse .org-filer ved hjelp av templates (jeg har også andre templates som jeg bruker i emacs og/eller conkeror slik som lagre URL-er til urls.org, lagre todos i todo.org, lagre masteroppgavetodos i todo.org etc.)

 

Videre har jeg skrevet noen magisk lisp-metoder i .emacs som først konverterer innleggene i blog.org til post-filer som jekyll forstår seg på og deretter synkroniserer blog.org til org-git-repoet mitt og post-filene til blog-git-repoet mitt.

 

Til slutt har jeg skrevet en hook til gitosis på serveren som automatisk "pull-er" blog-repoet straks det er blitt "commitet" til, og deretter kjører jekyll som genererer HTML-koden til selve bloggen.

 

Dermed blogger jeg like enkelt som jeg skriver todo-notater både i Emacs og Conkeror.

 

Med andre ord et glimrende eksempel på hvor fantastisk mye kult man kan gjøre med Emacs, om man bare gidder. :D

Lenke til kommentar
Videoannonse
Annonse

Emacs er kult, det! Det eneste den mangler er en tekst editor :tease:

Og en oppstartstid som er konkurransedyktig med andre operativsystemer, etter at man har kjørt all elisp-kode, som er nødvendig for at Emacs skal ligne på noe som er halvveis brukbart.

 

Hehe

Lenke til kommentar

Bilael, er ikke uten grunn at et populært utsagn om EMACS er at det er et godt operativsystem, men mangler en god teksteditor.

 

Tunge EMACS brukere, som cyclo, har en tendens til å gjøre ALT inne i EMACS. Mangler'u noe kan'u laga til det sjøl med elisp og hvis det trengs kan EMACS også psykoanalysere deg ;)

 

 

Lenke til kommentar

Og en oppstartstid som er konkurransedyktig med andre operativsystemer, etter at man har kjørt all elisp-kode, som er nødvendig for at Emacs skal ligne på noe som er halvveis brukbart.

Nja... Oppstartstiden i X er rimelig lang ja, nesten like lang som for conkeror, men Emacs i terminal syns jeg starter mer enn raskt nok (dog ikke sammenlignbart med vim(p)). I det siste har jeg stort sett bare kjørt emacs i terminal.

Lenke til kommentar

Bilael, er ikke uten grunn at et populært utsagn om EMACS er at det er et godt operativsystem, men mangler en god teksteditor.

 

Tunge EMACS brukere, som cyclo, har en tendens til å gjøre ALT inne i EMACS. Mangler'u noe kan'u laga til det sjøl med elisp og hvis det trengs kan EMACS også psykoanalysere deg ;)

Du tenker på M-x psychoanalyze-pinhead kanskje? eller M-x doctor? :)

 

Finnes mye rart i Emacs. F. eks. M-x butterfly (som naturligvis ble inkludert takket være xkcd), M-x dissociated-press, M-x animate-birthday-present, M-x view-hello-file (eller C-h h), M-x yow, for ikke å glemme alle spillene.

Lenke til kommentar
  • 2 uker senere...

Hvilken del av conkeror-konfigurasjonen er det du tenker på? Dette med at man kan integrere org-mode?

 

I tilfelle så skal følgende i .conkerorrc:

define_key(content_buffer_normal_keymap,"C-c 5 r","org-remember");

function org_remember(url, window) {                                                                                                                                                                                                           
   var cmd_str = 'emacsclient --eval \'(th-org-remember-conkeror "' + url + '")\'';                                                                                                                                                           
   if (window != null) {                                                                                                                                                                                                                      
       window.minibuffer.message('Issuing ' + cmd_str);                                                                                                                                                                                       
   }                                                                                                                                                                                                                                          
   shell_command_blind(cmd_str);                                                                                                                                                                                                              
}                                                                                                                                                                                                                                              

interactive("org-remember", "Remember the current url with org-remember",                                                                                                                                                                      
           function (I) {                                                                                                                                                                                                                     
               org_remember(I.buffer.display_URI_string, I.window);                                                                                                                                                                           
           });

 

og følgende i .emacs:

(defun th-org-remember-conkeror (url)                                                                                                                                                                                                          
 "Used to call org-remember from inside conkeror and include current URL"                                                                                                                                                                     
 (interactive "s")                                                                                                                                                                                                                            
 (org-remember)                                                                                                                                                                                                                               
 (save-excursion                                                                                                                                                                                                                              
   (insert "\n      [[" url "]]")))

 

Dessuten må man putte følgende i .emacs:

(server-start)

Lenke til kommentar

Og en oppstartstid som er konkurransedyktig med andre operativsystemer, etter at man har kjørt all elisp-kode, som er nødvendig for at Emacs skal ligne på noe som er halvveis brukbart.

 

: pangea tmp; echo '(save-buffers-kill-emacs)' > quit.el
: pangea tmp; time emacs -load quit.el
real    0m2.742s
user    0m0.748s
sys     0m0.184s

 

2,7 sekunder (inkluderer da også avslutning) under X11 og da kjører min X11 på en 600MHz VIA processor.

 

: pangea tmp; time emacs -nw -load quit.el
real    0m1.012s
user    0m0.640s
sys     0m0.184s

 

Uten X11 er det 1 sekund. Det er vel ikke Windows boot tid du sammenlikner med? Jeg starter en del kode for Java, Common Lisp, VHDL, Verilog, LaTeX, e-post (mew), osv.

 

Dessuten så starter jeg stort sett en Emacs og lar den gå i mange måneder. Det er typisk etter en strømstans jeg starter en ny Emacs. Så oppstartstiden på 2,7 sekunder skaper ikke særlig problemer for meg, selv om det går selvsagt raskere å starte uten oppstartskode:

 

: pangea tmp; time emacs -q -nw -load quit.el
real    0m0.075s
user    0m0.048s
sys     0m0.020s

Lenke til kommentar

det er slike ting som gjør at jeg *ikke* vil bruke Emacs. det strider med alt jeg har lært om og finner fornuftig med programvare. do one thing and do it well.

 

Det Emacs gjør bra er å ha en brukerinterface for å skrive tekst. Mye av jobb og hobby går ut på å skrive tekst som e-post, programkode i et dusin forskjellige språk, dokumentasjon, web, usenet osv. Alt dette gjør jeg i Emacs og alle modusene har forholdsvis lik brukerinterface.

 

I tillegg så gjør Emacs mange ting enklere ved at jeg kan starte ting inne fra Emacs, f.eks .sende, motta og arkivere e-post (i mew), starte kompilering og/eller simulering i VHDL eller Verilog, starte kompilering av C eller Java program, debugge Common Lisp kode. Bruk av GIT er ekstremt effektivt vha. egg, da kan jeg sjekke inn filer, lage brancher, gjøre commit, laste opp, osv. bare ved noen enkle tastetrykk.

Lenke til kommentar

(i mew)

Brukte mew før, men jeg klarte aldri bli helt fornøyd med den. Særlig fordi den pratet ganske dårlig med gpg. Oppdaget da wanderlust, og har ikke sett meg tilbake. Kan absolutt anbefale Wanderlust om man ikke er blitt så vandt med mew at man ikke klarer å leve uten.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...