Di Emacs, segala sesuatu tampak seperti layanan
(yummymelon.com)- Emacs bukanlah sistem operasi itu sendiri, melainkan mengorkestrasi aplikasi dan utilitas di atas kernel serta memanfaatkan sistem file, jaringan, dan program eksternal untuk menjadi klien bagi berbagai layanan
- UI, lapisan komunikasi, dan penyimpanan data lokal yang dibutuhkan klien dapat disusun dengan pustaka bawaan seperti minibuffer, buffer, URL, TCP/UDP, JSON, dan SQLite
- Sebagai bahasa dinamis, Emacs Lisp (Elisp) dapat menggabungkan fungsi Elisp dan perintah shell saat runtime, sehingga Emacs bisa mengorkestrasi kemampuan yang dapat diaksesnya secara fleksibel
- Contoh perintah
wttrmenerima input lokasi, mengirim permintaan HTTP ke wttr.in, mengekstrak wilayah, suhu, dan cuaca dari JSON, lalu menampilkannya di minibuffer sekaligus menyimpannya ke kill ring - Seluruh
wttr.elberukuran 67 baris menurutcloc, dan jika permintaan jaringan serta pemrosesan JSON diserahkan ke alat command-line seperti Python, kita juga bisa membuat klien Elisp yang lebih singkat dengan menjadikan perintah shell itu sendiri sebagai layanan
Emacs yang mengorkestrasi layanan di atas sistem operasi
- Menyebut Emacs sebagai sistem operasi memang tidak sepenuhnya tepat, tetapi perbandingan ini muncul karena kemampuannya mengorkestrasi aplikasi dan utilitas di atas kernel sistem operasi
- Karena dapat mengakses layanan sistem operasi seperti sistem file dan jaringan lewat fitur bawaan, sekaligus menjalankan program lain, Emacs memudahkan penyusunan perilaku klien secara spontan di dalam dirinya
- Karena banyak pekerjaan komputasi dapat ditangani melalui berbagai mode klien, gagasan bahwa pengguna “hidup hanya di dalam Emacs” pun menjadi masuk akal
Model klien-server dilihat dari permintaan dan respons
- Model klien-server adalah pola interaksi di mana layanan yang menyediakan sumber daya dan klien yang memintanya membagi pekerjaan
- Klien mengirim permintaan
- Server memproses permintaan lalu mengembalikan respons
- Transaksi yang terdiri dari permintaan dan respons dapat dilakukan melalui jaringan atau secara lokal dalam satu sistem
- Model berbasis jaringan berkembang luas dalam arsitektur perangkat lunak bergaya REST
Tiga area yang membentuk klien Emacs
- Klien pada umumnya menangani tiga area berikut
- UI: menangani input dan output pengguna sesuai kebutuhan
- Client Edge: berkomunikasi dengan layanan; pada klien jaringan, subsistem jaringan menjalankan peran ini
- Basis data lokal: merepresentasikan data yang dipertukarkan atau disinkronkan dengan server, dan cara pengelolaannya bergantung pada kebutuhan implementasi
-
Menyusun antarmuka pengguna
- Emacs menyediakan berbagai fitur bawaan untuk membuat UI klien
- Minibuffers
- Buffers
- Completion
- Tabulated List Mode
- Variable Pitch Table(vtable)
- Transient
-
Komunikasi layanan dan transformasi data
- Untuk client edge yang terhubung ke layanan, fitur berikut dapat dimanfaatkan
- Untuk serialisasi dan deserialisasi, gunakan parser bawaan
-
Pengelolaan data lokal
- Untuk representasi lokal data server, koleksi Elisp dapat digunakan
- Jika membutuhkan penyimpanan lokal yang persisten, SQLite dapat digunakan
- Kompleksitas klien nyata bergantung pada kebutuhannya, dan jika sudah ada utilitas command-line yang menangani pemrosesan berat, itu bisa disusun ulang sebagai layanan yang diakses lewat pemanggilan shell
Cara menggabungkan kemampuan dengan Elisp
- Semua pustaka di atas dapat diakses dari Emacs Lisp (Elisp)
- Elisp adalah bahasa pemrograman dinamis yang memungkinkan penyusunan improvisasional tingkat tinggi saat runtime
- Dari fungsi Elisp hingga perintah shell, kita dapat menggabungkan perilaku yang bisa digunakan Emacs untuk mengorkestrasi alur yang kompleks
Implementasi klien cuaca wttr.in
- wttr.in adalah layanan web prakiraan cuaca yang berpusat pada konsol dan mendukung output JSON
- Perintah
wttruntuk Emacs bekerja dalam urutan berikut- Menerima input lokasi dari pengguna
- Membuat URL permintaan wttr.in
- Mengirim permintaan HTTP
- Memproses respons JSON
- Menampilkan hasil di minibuffer dan menyimpannya ke kill ring
- Jika terjadi galat saat pemrosesan, menampilkan pesan galat di minibuffer
-
Membuat URL permintaan
wttr--request-urlmenggunakanhttps://wttr.insebagai URL dasar- Spasi pada lokasi input diubah menjadi
+, lalu dibuat kueri berbentuk/<location>?0&format=j1 - URL yang telah selesai kemudian diteruskan ke fungsi pengambil JSON
-
Permintaan HTTP dan parsing JSON
fetch-json-as-hash-tablemengambil URL secara sinkron denganurl-retrieve-synchronously- Jika data tidak dapat diambil, fungsi ini memunculkan galat
Failed to fetch data from <URL> - Setelah berpindah melewati header metadata HTTP di buffer respons,
json-parse-buffermengubah sisa isi menjadihash-tableElisp - Setelah pemrosesan selesai, buffer jaringan hasil unduhan selalu dihapus untuk mencegah kebocoran memori
-
Menyusun pesan cuaca
wttr--report-messagemengekstrak nilai-nilai berikut dari data JSON- Nama area terdekat
- Wilayah
- Negara
- Suhu saat ini dalam Celsius
temp_C - Suhu saat ini dalam Fahrenheit
temp_F - Deskripsi cuaca
weatherDesc
- Elemen lokasi yang tidak kosong digabungkan dengan koma, lalu dibentuk hasil berformat
lokasi: Celsius, Fahrenheit deskripsi cuaca - Implementasi lengkapnya dapat dilihat pada sumber
wttr.el
Memanfaatkan alat command-line juga sebagai layanan
- API Emacs menyediakan abstraksi tingkat tinggi, dan
wttr.elyang mengimplementasikan langsung permintaan HTTP serta pemrosesan JSON pun hanya 67 baris menurut pengukurancloc - Alternatif yang lebih sederhana adalah menyerahkan permintaan jaringan dan pemrosesan JSON yang sebenarnya ke skrip Python bernama
weather- Perintah
weatherdi Elisp meminta lokasi dari pengguna - Menyusun perintah shell
weatherdengan menambahkan lokasi sebagai argumen - Menjalankan perintah dengan
shell-command-to-string - Menyimpan hasil yang dikembalikan ke kill ring dan menampilkannya di minibuffer
- Perintah
- Dalam susunan ini, perintah shell menjadi layanan yang menerima permintaan dan fungsi Elisp berperan sebagai klien
- Berkat sifat dinamis Elisp, pustaka Elisp dan utilitas command-line dapat digabungkan sesuai kebutuhan, dan kemungkinan integrasi inilah yang membuat segala sesuatu di dalam Emacs dapat diperlakukan seperti layanan
1 komentar
Opini Hacker News
Emacs hanya terlihat seperti sistem operasi karena keluarga Lisp Machine tidak pernah menjadi arus utama
“Demo Symbolics Lisp Machine”
https://www.youtube.com/watch?v=o4-YnLpLgtk
“Emacs and Lisp”
https://funcall.blogspot.com/2025/04/emacs-and-lisp.html
Lucid pernah mem-fork Emacs menjadi XEmacs untuk mencoba mewujudkan salah satu gagasan awal LSP, dan sebagian besar fiturnya kini sudah digabungkan kembali ke Emacs
https://dreamsongs.com/Cadillac.html
“Demo Lucid Energize”
https://www.youtube.com/watch?v=pQQTScuApWk
Jika
client,server, danrequestdidefinisikan cukup longgar, apa pun bisa dipaksa masuk ke dalam arsitektur klien/server. Mirip seperti upaya keras mengklaim bahwa Emacs mengikuti filosofi Unix hanya karena fungsi LISP melakukan satu hal dengan baikKebanyakan orang bisa setuju bahwa Emacs mengikuti gagasan mesin LISP, dan di atasnya praktis bisa dibangun hampir apa saja. Emacs juga terintegrasi sangat baik dengan alat CLI, tetapi tidak jelas apa yang didapat dengan menyebutnya klien/server
Selama puluhan tahun ia menyerap berbagai tren dan fitur, dan di dalamnya masih ada mesin analisis semantik CEDET yang sekarang hampir tidak dipakai. Lalu LSP muncul, dan sekarang kita masuk era agen, tetapi Emacs juga cukup bagus sebagai frontend untuk agen
Saya sudah memakai Emacs lebih dari 25 tahun, tetapi di perusahaan baru tahun lalu saya bahkan tidak boleh memakainya untuk pekerjaan yang sebenarnya sangat cocok dengan Emacs. Alasannya, semua anggota tim harus memakai alat yang sama, dan saya gagal membujuk orang lain beralih ke Emacs
Sekarang saya malah memakai alat tujuan tunggal yang terpisah untuk tiap tugas dengan cara yang jauh lebih tidak efisien, sambil terus belajar UI dan pemetaan tombol baru
Admin pasti akan bilang semua orang harus memakai Visual Studio Code untuk proyek baru, padahal model konsumsi yang kami pakai juga tidak didukung VSCode. Selama Git dan prosedur deployment sesuai, mestinya editor bisa dipilih masing-masing sesuai yang paling dikuasai, tetapi saya rasa jawabannya akan tetap bahwa ini berisiko karena open source yang tidak didukung Microsoft dan perangkat lunak yang belum divalidasi perusahaan
Emacs adalah alat inti yang saya pakai setiap hari, jadi kalau dilarang saya berniat resign. Admin bukan sedang mencoba memahami atau menilai secara logis, mereka hanya mengikuti instruksi dari departemen TI lain
Jika perusahaan sudah menetapkan editor teks serbaguna, mungkin patut dicek apakah menjalankan Notepad juga jadi masalah, atau apakah mereka sampai menetapkan alat manajemen tugas pribadi. Cari kategori penggunaan yang bisa dilakukan Emacs tetapi belum ditentukan alatnya oleh perusahaan, lalu pasang Emacs untuk tujuan itu
Emacs adalah platform, dan sistem operasi juga hanyalah salah satu dari sekian platform. Platform adalah lapisan perangkat lunak yang dirancang agar hal baru bisa dibangun di atasnya, jadi pertanyaannya adalah apakah platform X cocok untuk membuat Y yang diinginkan
Bagi saya, X sering kali Emacs, tetapi bisa juga Racket atau Rust. Jika ada alat yang sekaligus merupakan aplikasi dan platform yang baik, alat itu layak mendapat investasi belajar lebih besar daripada aplikasi biasa
Setelah cukup lama memakai Emacs hingga bisa memahami ungkapan “Emacs adalah sistem operasi” bukan sebagai lelucon melainkan sebagai konsep yang sungguh bisa dipercaya, itu menjadi titik balik penting dalam karier saya
Saya mulai memakai Emacs beberapa tahun lalu karena ingin mencoba org mode, dan tetap memakainya karena fleksibilitasnya yang sangat ekstrem
init.elsendiriEmacs lebih dekat ke lingkungan pemrograman yang dibekali editor teks. Jika dianggap mirip dengan beberapa image Smalltalk, ini menjadi alat yang cukup menarik
Emacs bukan sistem operasi melainkan lebih dekat ke shell, tetapi konsep shell sendiri juga tidak dipahami luas
vijustru lebih mirip shell. Banyak fungsinya harus diserahkan ke program Unix standar lain lewat:.!Sebaliknya, Emacs seperti sistem operasi karena memasukkan segala macam fungsi ke dalam satu distribusi besar
Baru-baru ini saya menemukan video pengantar singkat yang bagus untuk ditunjukkan kepada orang yang tidak memakai Emacs
https://www.youtube.com/watch?v=mJZDmO5yOxE
init.elmilik Anon EmooseEmacs sendiri bisa dijalankan sebagai klien dan server. Jalankan server dengan
emacs --daemon, lalu hubungkan lewatemacsclient; semua instance terminal dan GUI akan memakai server yang sama serta berbagi file dan buffer yang terbukaSayangnya ini hanya bekerja secara lokal, dan saya pernah mencoba meneruskan soket server Emacs lewat ssh agar bisa terhubung dari klien jarak jauh, tetapi gagal
emacsclientkurang bagus. Orang yang pertama kali mengenal Emacs pada 2026 mungkin mudah mengira bahwa seperti klien REST, ia menyinkronkan status eksekusi klien dan server lewat jaringanDi sini klien dan server maksudnya adalah struktur Unix local domain, yaitu klien mengirim perintah kontrol sederhana melalui soket sistem berkas. Belakangan soket jaringan juga didukung, tetapi yang dikirim klien tetap hanya perintah kontrol sederhana
ssh -Xuntuk menampilkan frame Emacs jarak jauh di server X lokal. Namun hati-hati, pada build GTK non-PGTK, Emacs jarak jauh bisa crash saat frame baru ditutup