Sterowanie Emacsem z Firefoxa
Od jakiegoś czasu miałem na tapecie głębsze zapoznanie się z GreaseMonkey. Dla tych co nie wiedzą, jest to takie sprytne rozszerzenie pozwalające na wykonywanie własnych skryptów w JavaScripcie przy oglądaniu stron. Głównym celem tych skryptów jest naprawianie bądź rozszerzanie funkcjonalności używanych aplikacji webowych. Kiedyś użyłem tego rozszerzenie do naprawienia konsoli mojego rutera.
Tym razem postanowiłem ulepszyć swoje środowisko developerskie. Zamarzyła mi się integracja Firefoxa i Emacsa. Miałem dwa pomysły:
- edycja zawartości pól typu
textarea, do sprawnego pisania bloga i maili w gmailu - otwieranie plików z szablonami użytych do zbudowania oglądanego ekranu aplikacji (brzmi skomplikowanie)
Opiszę ten pierwszy.
W dokumentacji GreaseMonkey znalazłem możliwość wykonywania zapytań ajaxopodobych. A jakimś przypadkiem wcześniej znalazłem elserv. Jest to serwer HTTP uruchamiany w Emacsie. Zatem mam transport i to mój ulubiony.
Się zacząłęm zastanawiać jakiego to użyć protokołu RPC. Pomysły typu SOAP, XML-RPC odpadają z racji alergii na XML (objawia się tylko w domu :-)). Myślę sobie użyję JSON, jest lekki, przyjemny i działa :-). Na szczęście jest implemetnacja w elispie json.el, więc nie obejdzie się bez pisania kodera/dekodera. Zatem mam wszystko co trzeba. Pozostanie tylko napisać kawałek kodu “kleju”, lepiącego elserv z json.
Poszukując inspiracji w źródłach elserva znalazłem plik o obiecującej nazwie remote.el. Po uruchomieniu go i skierowaniu przeglądarki na podpowiedziany adres, oczom mym ukazał się następujący obrazek:

Sushi, Wazabi. Arigato. ???
Nic nie zrozumiem po japońsku, ale zrozumiałem po htmlowemu i elispowemu. Jest to prosty formularz, pozwalający przekazywać Emacsowi kod do wykonania. :-). Ha! To jest to! Proste, zawsze działające wołanie po czystym HTTP.
Procesu lepienia nie opiszę. Opiszę za to proces instalacji i użycia w aplikacji Railsowej
Oto co należy zainstalować:
- w Firefoxie greasemonkey
- w OSie elserv (jest w Debianie)
- w Firefoxie emacs-ctrl.user.js
- ten fragment kodu emacs-ctrl.el wkleić do swojego
.emacs
Po zrestartowaniu Emacs i Firefoxa możemy przystąpić do przystosowania aplikacji:
- w pliku
config/environments/development.rbdodajemy definicję stałej określającą bezwzględną ścieżkę do naszej aplikacji:PROJECT_ROOT = '/home/rafal/work/labs.nablaone.net/secmail/'
Nie jest to eleganckie rozwiązanie.
- do domyślnego layoutu dodajemy zawartość tego pliku layout.rhtml
Po uruchomieniu aplikacji, na ekranie pojawią się linki otwierające stosowne pliki w Emacsie. Jak w przykładzie:

Jak to działa pozostawiam w gestii czytelnika. Ostrzegam, zawiera małe hack-value.
Oczywiście jestem otwarty na współpracę celem wdrożenia tego mechanizmu w Twojej organizacji