Emacs'te Her Şey Bir Hizmet Gibi Görünür
(yummymelon.com)- Emacs, bir işletim sisteminin kendisinden ziyade çekirdek üzerindeki uygulamaları ve yardımcı araçları orkestre eder; dosya sistemi, ağ ve harici programlardan yararlanarak çeşitli hizmetlerin istemcisi olur
- Bir istemcinin ihtiyaç duyduğu UI, iletişim katmanı ve yerel veri deposu, minibuffer, buffer, URL, TCP/UDP, JSON, SQLite gibi yerleşik kütüphanelerle kurulabilir
- Dinamik bir dil olan Emacs Lisp (Elisp), Elisp fonksiyonları ile kabuk komutlarını çalışma anında birleştirerek Emacs'ın erişebildiği işlevleri esnek biçimde orkestre eder
- Örnek
wttrkomutu, bir konum alıp wttr.in'e HTTP isteği gönderir, JSON'dan bölge, sıcaklık ve hava durumunu çıkarır, ardından bunu minibuffer'da gösterip kill ring'e de kaydeder - Tam
wttr.el,clocölçümüne göre 67 satırdır; ağ isteği ve JSON işlemeyi Python gibi komut satırı araçlarına bırakılırsa, kabuk komutunun kendisini hizmet olarak kullanan daha kısa bir Elisp istemcisi de yapılabilir
İşletim sisteminin üstünde hizmetleri orkestre eden Emacs
- Emacs'ı bir işletim sistemi olarak adlandırmak tam doğru değildir, ancak işletim sistemi çekirdeğinin üzerinde uygulamaları ve yardımcı araçları orkestre edebilmesi bu benzetmeye yol açar
- Dosya sistemi ve ağ gibi işletim sistemi hizmetlerine yerleşik yeteneklerle erişebilir ve başka programları da çalıştırabilir; bu yüzden Emacs içinde istemci davranışını anında kurmak kolaydır
- Birçok hesaplama işi farklı istemci modlarıyla yürütülebildiğinden, kullanıcının “yalnızca Emacs içinde yaşaması” fikri de anlam kazanır
İstek ve yanıt üzerinden istemci-sunucu modeli
- İstemci-sunucu modeli, kaynak sağlayan bir hizmet ile bunu talep eden bir istemcinin işi paylaştığı etkileşim kalıbıdır
- İstemci bir istek gönderir
- Sunucu isteği işleyip bir yanıt döndürür
- İstek ve yanıttan oluşan işlemler ağ üzerinden ya da tek bir sistem içinde yerel olarak gerçekleştirilebilir
- Ağ tabanlı model, REST tarzı yazılım mimarisinde geniş ölçüde gelişmiştir
Emacs istemcisini oluşturan üç alan
- Tipik bir istemci şu üç alandan sorumludur
- UI: Gerektikçe kullanıcı girdisi ve çıktısını işler
- İstemci sınırı (Client Edge): Hizmetle iletişim kurar; ağ istemcilerinde bu rolü ağ alt sistemi üstlenir
- Yerel veritabanı: Sunucuyla değiş tokuş edilecek veya senkronize edilecek veriyi temsil eder; somut yönetim biçimi uygulama gereksinimlerine göre değişir
-
Kullanıcı arayüzü oluşturma
- Emacs, istemci UI'ı oluşturmak için çeşitli yerleşik yetenekler sunar
- Minibuffers
- Buffers
- Completion
- Tabulated List Mode
- Variable Pitch Table(vtable)
- Transient
-
Hizmet iletişimi ve veri dönüşümü
- Hizmete bağlanan istemci sınırında şu yeteneklerden yararlanılabilir
- Serileştirme ve serileştirmeyi çözme için yerleşik ayrıştırıcılar kullanılır
-
Yerel veri yönetimi
- Sunucu verisinin yerel temsili için Elisp koleksiyonları kullanılabilir
- Kalıcı yerel depolama gerekirse SQLite kullanılabilir
- Gerçek bir istemcinin karmaşıklığı gereksinimlere bağlıdır; ağır işlemleri üstlenen mevcut komut satırı yardımcı araçları varsa bunlar kabuk çağrısıyla erişilen bir hizmet olarak yeniden kurgulanabilir
Elisp ile işlevleri birleştirme biçimi
- Yukarıdaki kütüphanelerin tamamına Emacs Lisp (Elisp) içinden erişilebilir
- Elisp, çalışma anında yüksek düzeyde doğaçlama yapılandırmaya izin veren dinamik bir programlama dilidir
- Emacs'ın kullanabildiği davranışlar, Elisp fonksiyonlarından kabuk komutlarına kadar birleştirilerek karmaşık akışlar orkestre edilebilir
wttr.in hava durumu istemcisinin uygulanması
- wttr.in, konsol odaklı bir hava tahmini web hizmetidir ve JSON çıktısını destekler
- Emacs için
wttrkomutu şu sırayla çalışır- Kullanıcıdan bir konum alır
- wttr.in istek URL'sini oluşturur
- HTTP isteğini gönderir
- JSON yanıtını işler
- Sonucu minibuffer'da gösterip kill ring'e kaydeder
- İşleme sırasında hata oluşursa minibuffer'da hata mesajını gösterir
-
İstek URL'sini oluşturma
wttr--request-url, temel URL olarakhttps://wttr.inkullanır- Girilen konumdaki boşlukları
+ile değiştirir ve/<location>?0&format=j1biçiminde sorgu oluşturur - Oluşturulan URL daha sonra JSON getirme fonksiyonuna aktarılır
-
HTTP isteği ve JSON ayrıştırma
fetch-json-as-hash-table, URL'yiurl-retrieve-synchronouslyile eşzamanlı olarak getirir- Veri alınamazsa
Failed to fetch data from <URL>hatasını üretir - Yanıt buffer'ında HTTP meta veri başlıklarının sonrasına gider, ardından kalan içeriği
json-parse-bufferile Elisphash-tableyapısına dönüştürür - İşlem bittikten sonra indirilen ağ buffer'ı, bellek sızıntısını önlemek için her zaman kaldırılır
-
Hava durumu mesajını birleştirme
wttr--report-message, JSON verisinden şu değerleri çıkarır- En yakın bölgenin adı
- Bölge
- Ülke
- Anlık santigrat sıcaklık
temp_C - Anlık fahrenheit sıcaklık
temp_F - Hava durumu açıklaması
weatherDesc
- Boş olmayan konum öğelerini virgülle birleştirir ve
konum: santigrat, fahrenheit hava durumu açıklamasıbiçiminde sonuç üretir - Tüm uygulama wttr.el kaynağında görülebilir
Komut satırı araçlarını da hizmet olarak kullanmak
- Emacs API'si yüksek seviyeli soyutlamalar sunar ve HTTP isteğiyle JSON işlemeyi doğrudan uygulayan
wttr.elbileclocölçümüne göre 67 satırdır - Daha basit bir alternatif, gerçek ağ isteği ve JSON işlemeyi
weatheradlı bir Python betiğine bırakmaktır- Elisp'in
weatherkomutu kullanıcıdan bir konum alır - Konumu argüman olarak ekleyip
weatherkabuk komutunu oluşturur - Komutu
shell-command-to-stringile çalıştırır - Dönen sonucu kill ring'e kaydedip minibuffer'da gösterir
- Elisp'in
- Bu düzende kabuk komutu, istek alan hizmet olur ve Elisp fonksiyonu istemci rolünü üstlenir
- Elisp'in dinamik doğası sayesinde Elisp kütüphaneleri ile komut satırı yardımcı araçları gerektikçe birleştirilebilir; bu entegrasyon olanağı, Emacs içinde her şeye bir hizmet gibi yaklaşmayı mümkün kılar
1 yorum
Hacker News yorumları
Lisp Machine ailesi ana akım haline gelemediği için Emacs bir işletim sistemi gibi görünüyor
“Symbolics Lisp Machine demo”
https://www.youtube.com/watch?v=o4-YnLpLgtk
“Emacs and Lisp”
https://funcall.blogspot.com/2025/04/emacs-and-lisp.html
Lucid, erken dönem LSP fikirlerinden birini hayata geçirmek için Emacs’i XEmacs olarak fork etmişti ve o dönemdeki özelliklerin çoğu artık yeniden Emacs’e entegre edildi
https://dreamsongs.com/Cadillac.html
“Lucid Energize Demo”
https://www.youtube.com/watch?v=pQQTScuApWk
client,server,requestkavramlarını yeterince geniş tanımlarsanız her şeyi istemci/sunucu mimarisi içine sıkıştırabilirsiniz. Bu, LISP fonksiyonları tek bir işi iyi yapıyor diye Emacs’in Unix felsefesini izlediğini zorla iddia etmeye benziyorEmacs’in LISP machine fikrini takip ettiğine çoğunlukla katılabilirim ve onun üzerinde fiilen istediğiniz her şeyi inşa edebilirsiniz. CLI araçlarıyla mükemmel biçimde entegre olur, ama buna istemci/sunucu demenin ne kazandırdığı belirsiz
On yıllar boyunca çeşitli modaları takip ederek özellikleri içine aldı; içinde bugün neredeyse hiç kullanılmayan CEDET anlamsal analiz motoru bile var. Sonra LSP geldi, şimdi de ajan çağı geldi ve Emacs ajanlar için bir frontend olarak da gayet iyi iş görüyor
Emacs’i 25 yıldan uzun süredir kullanıyorum ama geçen yıl geçtiğim şirkette, Emacs’in özellikle çok uygun olduğu işler için bile kullanmama izin verilmiyor. Gerekçe, tüm ekip üyelerinin aynı araçları kullanması gerektiği; başkalarını Emacs’e geçirmek de başarısız oldu
Şimdi her iş için ayrı tek amaçlı araçları çok daha verimsiz şekilde kullanıyor, üstüne sürekli yeni arayüzler ve tuş eşlemeleri öğreniyorum
Yöneticiler yeni projede herkesin Visual Studio Code kullanmasını isteyecektir, ama kullandığımız tüketim modeli VSCode tarafından da desteklenmiyor. Git ve dağıtım süreci uyuyorsa editörü herkesin iyi bildiği şekilde seçmesi gerekir, ama muhtemelen Microsoft tarafından desteklenmeyen açık kaynak olduğu için riskli ve şirket tarafından doğrulanmamış yazılım olduğu cevabı gelecektir
Emacs her gün kullandığım temel araç; yasaklanırsa istifa etmeyi düşünürüm. Yöneticiler anlamaya ya da mantıklı değerlendirme yapmaya çalışmıyor, sadece başka bir BT departmanının talimatını izliyor
Şirket genel amaçlı metin editörünü belirlediyse Notepad açmanın da sorun olup olmadığını, kişisel yapılacaklar aracı bile belirleyip belirlemediğini görmek ilginç olabilir. Emacs’in yapabildiği ama şirketin henüz araç atamadığı bir kategori bulun ve o amaçla kurun
Emacs bir platformdur ve işletim sistemi de birçok platformdan sadece biridir. Platform, üzerinde yeni şeyler inşa edebilmeniz için tasarlanmış bir yazılım katmanıdır; dolayısıyla kurmak istediğiniz Y için hangi X platformunun uygun olduğunu sormalısınız
Benim için X çoğu zaman Emacs oluyor, ama Racket ya da Rust da olabilir. Hem uygulama olup hem de iyi bir platform olan araçlara, sıradan uygulamalardan daha fazla öğrenme yatırımı yapmak değerlidir
Emacs’i yeterince kullanıp “Emacs bir işletim sistemidir” sözünü şaka değil de gerçekten anlamlı bir kavram olarak kavradığım an, kariyerimde önemli bir dönüm noktası oldu
org mode’u denemek için birkaç yıl önce Emacs kullanmaya başladım ve aşırı yüksek esnekliği yüzünden kullanmaya devam ettim
init.eldosyamı gerçekten kendim kurcalamayı düşünüyorumEmacs, içine metin editörü gömülü bir programlama ortamına daha yakındır. Bazı Smalltalk image’larına benzetirseniz oldukça ilginç bir araç olarak görünebilir
Emacs işletim sistemi değil, daha çok bir shell gibidir; ama shell kavramının kendisi de yaygın biçimde anlaşılmıyor
viaslında shell’e daha yakındır. Çünkü birçok işi:.!ile diğer standart Unix programlarına devretmek zorundadırBuna karşılık Emacs, bir işletim sistemi gibi her türlü işlevi tek bir dev dağıtımın içine toplar
Emacs kullanmayan birine göstermek için uygun kısa bir giriş videosu yakın zamanda buldum
https://www.youtube.com/watch?v=mJZDmO5yOxE
init.eldosyasını gerçekten merak ettimEmacs’in kendisi istemci ve sunucu olarak çalıştırılabilir.
emacs --daemonile sunucuyu başlatıp ardındanemacsclientile bağlanırsanız, terminal ve GUI’deki tüm örnekler aynı sunucuyu kullanır ve açık dosyalarıyla buffer’ları paylaşırNe yazık ki bu sadece yerelde çalışıyordu; Emacs sunucu soketini ssh ile tünelleyip uzak istemciden bağlanmayı denedim ama başaramadım
emacsclientadı pek iyi değilmiş. 2026’da Emacs’le ilk kez karşılaşan biri, bunun REST istemcileri gibi ağ üzerinden istemci ve sunucunun çalışma durumunu senkronize ettiğini kolayca sanabilirBurada istemci ve sunucu, Unix yerel alanı yani dosya sistemi soketi üzerinden istemcinin basit kontrol komutları gönderdiği bir yapıyı ifade ediyor. Daha sonra ağ soketleri de desteklenmeye başlandı, ama istemcinin gönderdiği şey hâlâ yalnızca basit kontrol komutları
ssh -Xile uzak Emacs’in frame’ini yerel X sunucusunda açabilirsiniz. Ancak PGTK olmayan GTK derlemelerinde, yeni bir frame kapatıldığında uzak Emacs çökebilir; buna dikkat etmek gerekir