Emacs में हर चीज़ service जैसी दिखती है
(yummymelon.com)- Emacs, operating system खुद होने के बजाय, kernel के ऊपर applications और utilities को coordinate करता है, और file system, network व external programs का उपयोग करके अलग-अलग services का client बन जाता है
- Client के लिए ज़रूरी UI, communication layer और local data store को minibuffer, buffer, URL, TCP/UDP, JSON, SQLite जैसी built-in libraries से बनाया जा सकता है
- Dynamic language Emacs Lisp(Elisp), चलते समय Elisp functions और shell commands को जोड़कर, Emacs जिन capabilities तक पहुंच सकता है उन्हें flexible तरीके से coordinate करता है
- उदाहरण वाला
wttrcommand location input लेकर wttr.in को HTTP request भेजता है, JSON से area, temperature और weather निकालकर minibuffer में दिखाता है और kill ring में भी save करता है - पूरा
wttr.el,clocके हिसाब से 67 lines का है; और अगर network request व JSON processing को Python जैसे command-line tools पर छोड़ दिया जाए, तो shell command को ही service मानने वाला और छोटा Elisp client भी बनाया जा सकता है
Operating system के ऊपर services coordinate करने वाला Emacs
- Emacs को operating system कहना सटीक नहीं है, लेकिन operating system kernel के ऊपर applications और utilities को coordinate करने की उसकी क्षमता के कारण यह तुलना की जाती है
- File system और network जैसी operating system services तक built-in features से पहुंच सकता है और दूसरे programs भी चला सकता है, इसलिए Emacs के अंदर client behavior को मौके पर compose करना आसान है
- कई client modes के जरिए बहुत-से computing tasks संभाले जा सकते हैं, इसलिए user के “सिर्फ Emacs के अंदर ही रहने” का विचार भी संभव हो जाता है
Request और response से समझा client-server model
- Client-server model एक interaction pattern है, जिसमें resources देने वाली service और उन्हें request करने वाला client काम बांटते हैं
- Client request भेजता है
- Server request process करने के बाद response लौटाता है
- Request और response से बनी transaction network के जरिए या एक ही system के अंदर locally की जा सकती है
- Network-based model REST style software architecture में व्यापक रूप से विकसित हुआ है
Emacs client बनाने वाले तीन हिस्से
- सामान्य client ये तीन हिस्से संभालता है
- UI: जरूरत के अनुसार user input और output संभालता है
- Client Edge: service से communication करता है; network client में यह भूमिका network subsystem निभाता है
- Local Database: server से exchange या sync किए जाने वाले data को represent करता है; management का具体 तरीका implementation requirements पर निर्भर करता है
-
User interface बनाना
- Emacs client UI बनाने के लिए कई built-in features देता है
- Minibuffers
- Buffers
- Completion
- Tabulated List Mode
- Variable Pitch Table(vtable)
- Transient
-
Service communication और data conversion
- Service से जुड़ने वाले client edge में इन features का इस्तेमाल किया जा सकता है
- Serialization और deserialization के लिए built-in parsers का इस्तेमाल होता है
-
Local data management
- Server data के local representation के लिए Elisp collections का उपयोग किया जा सकता है
- अगर persistent local storage चाहिए, तो SQLite इस्तेमाल किया जा सकता है
- वास्तविक client की complexity requirements के अनुसार बदलती है, और अगर heavy processing संभालने वाली मौजूदा command-line utility हो, तो उसे shell call से access की जाने वाली service के रूप में फिर से compose किया जा सकता है
Elisp से functions को जोड़ने का तरीका
- ऊपर की सभी libraries Emacs Lisp(Elisp) से access की जा सकती हैं
- Elisp एक dynamic programming language है जो runtime में high-level ad-hoc composition की अनुमति देती है
- Elisp functions से लेकर shell commands तक, Emacs जिन actions का उपयोग कर सकता है उन्हें जोड़कर complex flows coordinate किए जा सकते हैं
wttr.in weather client implementation
- wttr.in console-centric weather forecast web service है और JSON output support करती है
- Emacs के लिए
wttrcommand इस क्रम में काम करता है- User से location input लेता है
- wttr.in request URL बनाता है
- HTTP request भेजता है
- JSON response process करता है
- Result minibuffer में दिखाता है और kill ring में save करता है
- Processing के दौरान error हो तो minibuffer में error message दिखाता है
-
Request URL बनाना
wttr--request-url,https://wttr.inको base URL के रूप में इस्तेमाल करता है- Input की गई location में spaces को
+से बदलता है और/<location>?0&format=j1form की query बनाता है - तैयार URL बाद में JSON fetch function को दिया जाता है
-
HTTP request और JSON parsing
fetch-json-as-hash-table,url-retrieve-synchronouslyसे URL को synchronously fetch करता है- अगर data नहीं मिलता, तो
Failed to fetch data from <URL>error पैदा करता है - Response buffer में HTTP metadata header के बाद जाता है, फिर
json-parse-bufferसे बाकी content को Elisphash-tableमें convert करता है - Processing पूरी होने पर downloaded network buffer को हमेशा हटाता है ताकि memory leak रोका जा सके
-
Weather message compose करना
wttr--report-messageJSON data से ये values निकालता है- सबसे नज़दीकी area का नाम
- Region
- Country
- मौजूदा Celsius temperature
temp_C - मौजूदा Fahrenheit temperature
temp_F - Weather description
weatherDesc
- खाली न होने वाले location elements को comma से जोड़ता है और
location: Celsius, Fahrenheit weather descriptionformat का result बनाता है - पूरा implementation wttr.el source में देखा जा सकता है
Command-line tools को भी service की तरह इस्तेमाल करना
- Emacs API high-level abstraction देती है, और HTTP request व JSON processing को directly implement करने वाला
wttr.elभीclocmeasurement के हिसाब से 67 lines का है - एक और आसान alternative यह है कि असली network request और JSON processing को
weatherनाम की Python script पर छोड़ दिया जाए- Elisp का
weathercommand user से location input लेता है - Location को argument के रूप में जोड़कर
weathershell command बनाता है shell-command-to-stringसे command चलाता है- Returned result को kill ring में save करता है और minibuffer में दिखाता है
- Elisp का
- इस setup में request लेने वाली service shell command बन जाती है और Elisp function client की भूमिका निभाता है
- Elisp की dynamic nature की वजह से Elisp libraries और command-line utilities को जरूरत के अनुसार जोड़ा जा सकता है, और यही integration capability Emacs के अंदर हर चीज़ को service की तरह handle करना संभव बनाती है
1 टिप्पणियां
Hacker News की राय
Lisp Machine परिवार मुख्यधारा में जगह नहीं बना पाया, इसलिए Emacs ऑपरेटिंग सिस्टम जैसा दिखता है
“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 ने शुरुआती LSP विचारों में से एक को लागू करने की कोशिश में Emacs को XEmacs के रूप में fork किया था, और उस समय की ज्यादातर सुविधाएं अब फिर से Emacs में merge हो चुकी हैं
https://dreamsongs.com/Cadillac.html
“Lucid Energize Demo”
https://www.youtube.com/watch?v=pQQTScuApWk
client,server,requestको काफी व्यापक रूप से define करें, तो किसी भी चीज़ को client/server architecture में फिट किया जा सकता है। यह उस कोशिश जैसा है जिसमें सिर्फ इसलिए Emacs को Unix philosophy का पालन करने वाला बताया जाता था, क्योंकि LISP function एक काम अच्छी तरह करता हैइस बात पर ज्यादातर लोग सहमत हो सकते हैं कि Emacs LISP मशीन के विचारों का अनुसरण करता है, और उसके ऊपर व्यावहारिक रूप से जो चाहें implement किया जा सकता है। यह CLI tools के साथ शानदार तरीके से integrate होता है, लेकिन इसे client/server कहकर क्या हासिल होता है, यह स्पष्ट नहीं है
कई दशकों में इसने अलग-अलग trends से गुजरते हुए features absorb किए हैं, और इसके अंदर अब लगभग इस्तेमाल न होने वाला CEDET semantic analysis engine भी है। बाद में LSP आया, और अब agents का दौर है; Emacs agents के लिए frontend के रूप में भी काफी अच्छा है
Emacs को 25 साल से ज्यादा इस्तेमाल किया, लेकिन पिछले साल जिस कंपनी में नौकरी बदली, वहां Emacs खास तौर पर जिन कामों के लिए अच्छी तरह फिट बैठता है, उनमें भी उसे इस्तेमाल करने नहीं दिया गया। वजह यह थी कि सभी team members को एक ही tools इस्तेमाल करने चाहिए, और मैं दूसरों को Emacs पर switch कराने में असफल रहा
अब हर काम के लिए अलग-अलग single-purpose tools कहीं ज्यादा inefficient तरीके से इस्तेमाल कर रहा हूं, और साथ में नए UI और key mappings भी लगातार सीख रहा हूं
administrator कहेगा कि नए project में सब Visual Studio Code इस्तेमाल करें, लेकिन जिस consumption model का उपयोग हो रहा है, उसे VSCode भी support नहीं करता। Git और deployment procedure मिल जाएं, तो editor हर कोई वही चुन सकता है जिसमें वह अच्छा है; लेकिन शायद जवाब मिलेगा कि यह Microsoft द्वारा supported open source नहीं है, इसलिए risky है और कंपनी द्वारा validate न किया गया software है
Emacs मेरा रोज़ का core tool है, इसलिए अगर इसे ban किया गया तो resign करने का सोचूंगा। administrator समझने या logically judge करने की कोशिश नहीं करता, बस किसी दूसरे IT department के निर्देशों का पालन करता है
अगर कंपनी ने general-purpose text editor तय किया है, तो जांचना चाहिए कि Notepad चलाने पर भी समस्या है या नहीं, और क्या personal to-do management tool तक तय किया गया है। ऐसी category खोजें जिसे Emacs कर सकता हो और जिसके लिए कंपनी ने अभी tool तय न किया हो, और उसी उपयोग के लिए इसे install करें
Emacs एक platform है, और ऑपरेटिंग सिस्टम भी कई platforms में से एक है। platform software layer है जिसे उसके ऊपर नई चीज़ें बनाने के लिए design किया जाता है, इसलिए पूछना चाहिए कि जिस Y को बनाना है उसके लिए कौन-सा platform X उपयुक्त है
मेरे लिए X अक्सर Emacs होता है, लेकिन Racket या Rust भी हो सकता है। अगर कोई tool application होने के साथ अच्छा platform भी है, तो उसमें simple application की तुलना में ज्यादा learning investment करना worth it है
Emacs को पर्याप्त इस्तेमाल करके “Emacs एक ऑपरेटिंग सिस्टम है” वाली बात को joke नहीं, बल्कि वास्तव में believe करने योग्य concept के रूप में समझने का क्षण career का अहम turning point बन गया
org mode आज़माने के लिए कुछ साल पहले Emacs शुरू किया था, और इसकी अत्यधिक flexibility के कारण इस्तेमाल जारी रखा
init.elखुद configure करने का सोच रहा हूंEmacs text editor embedded वाले programming environment के ज्यादा करीब है। कुछ Smalltalk images जैसा समझें, तो यह काफी दिलचस्प tool है
Emacs ऑपरेटिंग सिस्टम नहीं, बल्कि shell के ज्यादा करीब है, लेकिन shell की अवधारणा खुद ही व्यापक रूप से समझी नहीं जाती
viबल्कि shell के ज्यादा करीब है। क्योंकि कई features को:.!के जरिए दूसरे standard Unix programs पर छोड़ना पड़ता हैइसके उलट Emacs ऑपरेटिंग सिस्टम की तरह तरह-तरह की features को एक विशाल distribution में शामिल करता है
Emacs न इस्तेमाल करने वाले लोगों को दिखाने लायक एक छोटा introductory video हाल में मिला
https://www.youtube.com/watch?v=mJZDmO5yOxE
init.elसच में जानने की उत्सुकता हो रही हैEmacs को खुद client और server के रूप में चलाया जा सकता है।
emacs --daemonसे server शुरू करने के बादemacsclientसे connect करें, तो terminal और GUI के सभी instances वही server इस्तेमाल करते हैं और खुले files तथा buffers share करते हैंअफसोस, यह केवल local पर काम करता था; Emacs server socket को ssh से forward करके remote client से connect करने की कोशिश की, लेकिन असफल रहा
emacsclientनाम अच्छा नहीं था। 2026 में Emacs से पहली बार परिचित होने वाला व्यक्ति आसानी से उम्मीद कर सकता है कि REST client की तरह client और server की execution state network के जरिए synchronize होगीयहां client और server का मतलब Unix local domain, यानी file-system socket के जरिए client द्वारा simple control commands भेजने वाली संरचना है। बाद में network sockets का support भी आया, लेकिन client जो भेजता है वह अब भी सिर्फ simple control commands ही हैं
ssh -Xसे remote Emacs का frame local X server पर दिखाया जा सकता है। हालांकि non-PGTK GTK build में नया frame बंद करते समय remote Emacs crash हो सकता है, इसलिए सावधान रहें