Elisp 語言服務器

代碼庫連結: https://github.com/jcs090218/ellsp 我最近為 Emacs Lisp 創建了一個語言伺服器。這很有趣,因為人們認為 Emacs Lisp 的語言伺服器不會提供任何價值。這個說法是正確的,我也是如此。Emacs Lisp 僅在 Emacs 編輯器內使用,Emacs 本身是一個 Emacs Lisp 解釋器。因此,Emacs Lisp 的語言伺服器很難為 Emacs 用戶帶來任何好處。 但想像一下您可以在 Emacs 之外編寫 elisp(Emacs Lisp 的縮寫)。聽起來很有趣,對吧? 🤔 🔰 重頭開始建立 好吧,我並不是完全從頭開始。我確實使用了一些庫來幫助我更快地設定東西。以下是重要的一點: lsp-mode elsa - 我用過他們的一些程式碼 我從頭開始的是 stdio 解決方案。令人難以置信的是,stdio 在 Emacs 的 batch 模式中是如此簡單。 💫 問題 1: read-from-minibuffer 和 \r/\n read-from-minibuffer 函數是在 Emacs batch 模式下接收標準輸入的一種方法。 這種方法有一個問題。它不會接收輸入,直到末尾有 \r 或 \n 字元。 這很煩人,因為語言伺服器永遠不會收到完整的資料包。這是我從語言客戶端收到的內容: Content-Length: 8203\r\n \r\n {json} 而,這是我希望看到的: Content-Length: 8203\r\n \r\n {json}\r\n 我花了幾個小時尋找解決方案。不幸的是,我找不到一個。然後,我決定使用 node....

November 19, 2023 · 1 分鐘 · 127 字 · Jen-Chieh Shen

如何使用 Eask 構建自己的 ELPA?

ELPA 是 Emacs Lisp Package Archive 的縮寫。它供 Emacs 用戶下載軟件包, 也是 Emacs Lisp 開發人員託管軟件包的地方。以下是著名 ELPA 的列表,請訪問他們的網站了解更多信息! GNU Elpa (official) NonGNU Elpa (official) MELPA ❓ 為什麼? 那麼我們為什麼要舉辦自己的 ELPA?這些 ELPA 還不夠嗎? 是的,一般來說,您不需要自己託管 ELPA,因為您需要的大多數軟件包都可以在這些 ELPA 之一中獲得(軟件包可以在 ELPA 之間共存)。 以下是您可能想要構建自己的 ELPA 的幾個原因: 您喜歡的包(尚未)出現在任何 ELPA 上 ELPA 的包裹審核需要幾天或幾個月的時間來審核(MELPA 可能是最快的) 不再維護的軟件包,您可以鏈接到新維護的分支 類似於第 3 點、你喜歡的包有bug,你可以創建一個新的fork來替換它! 用於 elisp 包開發目的。有時構建工具就是不夠用。 📝 事前準備 關於 Emacs Lisp 的一些知識 安裝 Eask CLI 🔍 步驟1.創建 ELPA 項目 使用 Eask 輕鬆構建您自己的 ELPA。您只需要幾個命令,它就會運行。 首先,我們需要創建 ELPA 項目:...

September 15, 2023 · 2 分鐘 · 354 字 · Jen-Chieh Shen

我的第一個 VSCode 插件

代碼庫連結: https://github.com/shader-ls/vscode-shader 2023 年 8 月 23 日。我創建了我的第一個 VSCode 插件 – vscode-shader。 我的意圖很簡單:在 VSCode 中為我幾個月前創建的 shader-language-server 創建一個語言服務器客戶端。🤔 🔰 簡單且良好的用戶體驗 首先,開發一個 VSCode 插件非常簡單。特別是為 VSCode 開發語言服務器的客戶端。 他們的網站上有許多示例和良好的文檔,使開發人員非常容易。我使用 uniteai 和 grammarly-language-server 作為參考。 📦 發布到 VSCode Marketplace 發佈到 VSCode 可能是最具挑戰性的步驟,因為您需要導航到 Azure DevOps, 這似乎與 VSCode Marketplace 完全無關! 🤔 然後獲取 Personal Access Token, 以便將您的包發佈到市場。它仍然很簡單,但在 Azure DevOps 部分卻相當令人困惑。 然後你只需要 npm install -g @vscode/vsce、vsce package 和 vsce publish。 發佈時,系統會要求您輸入 PAT! 您可以訪問 VSCode 的 Publishing Extensions 網站了解更多信息! 🎖️ 成就 創建了語言服務器的客戶端, vscode-shader。 我的第一個發布的 VSCode 插件包,請參閱 https://marketplace....

August 24, 2023 · 1 分鐘 · 76 字 · Jen-Chieh Shen

Shader 语言服务器

代碼庫連結: https://github.com/shader-ls/shader-language-server 2023 年 4 月 30 日。我創建了我的第一個語言服務器,它對某人確實有用。 我不久前嘗試過一個語言服務器,但它只是一個示例服務器,所以它不是很有用, 而且僅用於教育目的。 我選擇編寫的目標語言是 ShaderLab 語言。 ShaderLab 用於 Unity 引擎, 因此您可以編寫自定義著色器來風格化您的遊戲。與常規編程語言不同,ShaderLab 分析起來要簡單得多,因此語言服務器可以響應客戶端。 ❓ 為什麼選擇C#作為實現語言? 由於 Unity Engine 最受歡迎的腳本語言是 C#,因此我認為選擇 C# 是最佳選擇。 💀 C# Language Server Protocal 地獄 在開始用 C# 編寫語言服務器之前,我就已經有一種不好的預感,因為我對作者 Omnisharp 的插件一直沒有好印象。我在 VSCode Marketplace 上嘗試過他們的官方 C# 插件,但說實話, 我不會說我喜歡它。以下是一些原因: 很慢 不斷的突破性變化。下次更新就沒啥作用了! 維護者不是很活躍(但社區很友好) 儘管如此,我還是堅持嘗試一下 csharp-language-server-protocol,因為沒有其他合理的選擇。 經過幾天的挖掘,我面臨以下問題: 官方存儲庫中的示例要么損壞,要么不完整(有點無用) 過時或缺乏文檔 他們並不真正關心其他編輯。 (許多編輯器兼容問題和 PR 尚未解決) 幸運的是,我找到了 @gulbanana 創建的 thousand 語言服務器和 @tgjones 創建的 HlslTools。因此,我能夠通過看到他們的實現來完成這個項目! 😅😇 *附註: 我花了很長時間才弄清楚事情!!!*💀 ⚙️ 插入 ShaderlabVS 另一個挑戰是語言服務器的引擎。什麼解析文本文檔並向客戶提供合理的響應?然後我找到了一個已 經為我做到這一點的項目—— ShaderlabVS。這是一個理想的解決方案,因為也是用 C# 實現的。 感謝作者 @wudixiaop 這個令人驚嘆的項目! ❤️...

August 23, 2023 · 1 分鐘 · 133 字 · Jen-Chieh Shen

Emacs 的漫長旅程

⚠️這篇文章的目的是提醒自己為什麼 Emacs 不再值得我花時間了。 我從 2015 年開始使用 Emacs。我已經開發了 150 多個 elisp 包,並維護了 200 多個包(包括我的包)。 留在 Emacs 社區是一段漫長的旅程,我認為放慢自己的腳步,退一步思考這些年來我所取得的成就對我來說是有好處的。 💫 我是如何進入 Emacs 的? 很多人問我這個問題,所以我決定在這裡回答一下。 我第一次看到 Emacs 是在 2015 年,當時看到的是 Casey Muratori 的 Handmade Hero 系列。 他在 Emacs 中編碼的速度讓我震驚。他如何跳到其他窗口並且永遠不離開鍵盤對我來說都是新的。 但現在看他的配置,其實並不是那麼好。他不使用任何第三方軟件包,因此他在自己的配置文件(~/.emacs 文件) 中定義了所有內容。如果不使用那些第三方軟件包,配置仍然可以很好,但它只會限制你並重新製作可能其他人已經為你完成的輪子。 除此之外,Casey 仍然是我一生所認識的頂級程序員。 ❤️ 💫 我在 Emacs 上投入了多少時間? 就像我上面提到的,相信我。我投入了大量時間來完成我為 Emacs 社區所做的事情。如果你搜索我所有的包裹, 我在 MELPA 擁有最多的包裹。這次我已經證明了我有多喜歡 Emacs,但也證明了我對 Emacs 有多麼失望。 😥 💫 為什麼 Emacs 不再值得我花時間了? 首先,Emacs的開發沒有任何問題。他們在保持 Emacs 的活力方面做得非常出色,我喜歡他們的心態和大部分技術決策。 對我來說,問題在於 Elisp 開發生態系統(而不是 Emacs 社區本身;考慮 Elisp 開發生態系統是 Emacs 社區的子集)。 我很欣賞那些願意為 Emacs 做出貢獻的人,但我討厭他們不考慮他們的軟件包的跨平台功能。是的,我是 Windows 用戶;實際上, 我使用所有最常用的系統(Linux、macOS 和 Windows)。我討厭當我嘗試一個軟件包時,它只適用於特定係統(不包括僅 依賴於某些系統的軟件包),但它應該適用於所有系統。我感到可怕和沮喪,因為大多數 Elisp 開發人員不關心或不夠關心少數用戶 (Windows 用戶)。甚至一些著名的軟件包在 Windows 上也不能很好地工作,magit 很慢,straight....

July 8, 2023 · 1 分鐘 · 145 字 · Jen-Chieh Shen

Emacs Eask 101 - 建構工具

我開發了 50 多個 Emacs 插件, 並且維護了將近 100 多個. 對初學者來說, 開發 Emacs 插件是一件不容易的事情, 特別是對那些想把自己的插件發行到其他的 ELPA 的人來說更不容易. 哪些 ELPA? (GNU Elpa, NonGNU Elpa, MELPA, 等等.) 這是為什麼我使用 Eask 來幫助我完成這些插件的開發和維護的工作. 所以我將 在這則文章教大家如何使用這個工具來幫助你完成插件的開發! 🗨️ 善用 --help 現今的 Eask 已經有超過 50 種以上的指令集 (包含隱藏的). 這個工具已經是個有 點複雜, 所以當你遇到問題的時候請善用 --help 這個旗幟. $ eask --help 📦 建構插件 我們這裡直接切入正題, 我會默認你已經會初始化 Eask 專案, 並且只想知道如何 有效的使用這工具! 為了方便展示, 我直接使用了自己現存已開發完成的專案 [openal.el][openal]. # Clone 專案 $ git clone https://github.com/emacs-openai/openai.git # 進入到專案裡面 cd sideline # (非必要) 印出專案結構 tree /f 我們的專案結構是長這樣的:...

April 10, 2023 · 2 分鐘 · 292 字 · Jen-Chieh Shen

最快的 ELPA

所以什麼是最快的 ELPA? 讓我們來定義一下! ELPA 最能跑? 不對, 這一點都不合邏 輯. ELPA 最快服務你? 或許, 但我不知道! 在這裡我們定義"最快的 ELPA"為建構插件的速度. 也就是多久以後我們的插件會 被更新在服務器上. 就算更新了我們的插件, 也不用等上一段時間. 你可能會想說 “怎麼可能?” 還有 “怎麼做到的?”, 讓我一一解釋! 一般的 ELPA, 像是 MELPA, 他們會從 recipes 資料夾裡取得需要建構的插件目標. 這裡的時間為 O(n), 越多插件則會花越多時間. 通常簡單的解決方法就是直接提升 硬體硬件, 來促使減少建構時間. 這裡 JCS-ELPA 使用了不同的策略. 這個 ELPA 使用了一個插件 github-elpa 來使其建構我們的插件然後上傳到 GitHub Pages. 所以到底為什麼會是最快? 主要有兩個因素: 微軟擁有 GitHub. 技術上來說, 我們的 ELPA 是直接跑在微軟的服務器上 我們使用 GitHub Actions 建構插件, 定且使用了多個 jobs (如果你不熟悉 GHA, 就想說有很多台電腦在幫你做事即可) JCS-ELPA 使用這技術來達成很多 worker 幫你同時建構插件. 公式如下: 新的建構總時長 = 原本建構總時長 / 工作者 如果工作者為 1, 建構時長則保持不變 (建構時長沒有任何改善)....

April 10, 2023 · 1 分鐘 · 156 字 · Jen-Chieh Shen

💔 偏袒與被谝坦

這是一篇又來記錄我生活上問到難題的文章. 不想接收負能量請離開! 事件 前幾天我跟我姊發生了一些爭執, 姊弟吵架很正常, 但這次吵得很兇, 我們彼此都哭了. 此事情 將以我的個人為出發點去敘述始末! 衝突的開端 那天2023, 美國舊金山時間1月10號晚上, 我們剛抵達舊金山, 抵達當地的飯店後, 一起出去買晚餐, 這之前 我不知道發生什麼事情, 我姊佳欣貌似與我媽相處的並不愉快, 並抱有不滿. 屆時, 我並不知道發生什麼事. 只知道到了外帶去(我們去買晚餐), 姐姐佳欣不願意幫忙拿自己的晚餐餐盒 (共三人份). 當下我很不滿, 我和我媽的手已經沒有手付帳, 她沒有選擇幫忙. 回到飯店後, 我撈刀並出言說她是"CryBaby". 沒過一會兒, 她暴怒吼叫並出手攻擊推擠我. 我當下反應不及, 差點把他的晚餐打翻 (對, 我拿他的晚餐). 她吼道: 我脖子痛,部能夠體諒我嗎? 不要以為你是躁鬱症, 大家都要忍讓你 這飯店是我訂的, 你不要住! 滾出去! 諸如此類的發言. 當下我是驚訝的, 我沒想到一句"CryBaby"會到她如此憤怒. 我認為"自己的便當自己拿, 不是寶寶是什麼?" 感受 理性陳述事實後, 我想感性表達我的感覺, 當下我也很生氣, 我也試圖攻擊她. 但當然沒有成功, 因為她還躲在 她媽媽的保護傘下. 反倒是我被我媽抓傷, 腳也受了傷. 明明我是被攻擊者,卻被我媽說"因為我是男生"這種 性別歧視的話給制止! 我是生氣的, 我是男生難道被女生打就不還手嗎? 男生都該死嗎? 我很生氣, 當下我直接打我自己兩巴掌 (很響亮的那種) 並吼道 “那我去死好了?” 蹦痛哭覺得受委屈, 出發點為: 希望姊姊佳欣能幫忙拿晚餐 覺得自己是她弟弟, 時常拿自己憂鬱為理由, 卻不管有躁鬱症的弟弟?...

January 13, 2023 · 2 分鐘 · 278 字 · Jen-Chieh Shen

第一次遷移服務器

我一直以來的的 web hosting, 一直是使用aws. 但最近總覺得價錢太貴, 而且很多資金的使用 並不是這麼貼心. 總是莫名其妙多了一些費用. 當然, 這些並不是說aws有問題. 不過它們這方 面的機制, 我本身並不是很喜歡. 所以我決定在這個月, 換一個web hosting的公司. 更換的 理由如下: AWS收費機制不討人喜歡 價格對於小型用戶太過昂貴, 而且不是這麼需要 UI介面有夠醜, UX很糟糕 它們大量的制定他們aws服務的專有名詞, 這部分技能是無法轉移的 (EC2? Route 53? 等等) 接著, 進入細節. 📋 遷移網域名 這次遷移的目標是 jcs-profile.com 這個網域. 查一下 who.is, 註冊商是 amazon.com. 我之前是使用 AWS 裡面的網域 註冊服務 Route 53 來註冊這個網域. 不過 我想把它移置到 Namecheap. 這家並不是最便宜的, 不過他的優點大概是老牌, 介面也算乾淨好整理. 不會有些雜七雜八的東西. 不過我自己 也沒有用過很多家, 所以我也不班門弄斧了. 等我有足夠的經驗再來補充. 選擇網域註冊商, 我是參考了下面這支影片. 我原本是想選 Google Domains 的, 不過當我選擇國家的時候, 竟然沒有支援台灣!? (還在拓展中) 所以後來索性選擇了 Namecheap. 不過依然是個很棒著選擇! 😁...

September 10, 2022 · 1 分鐘 · 176 字 · Jen-Chieh Shen

Game Jam - 8月 2022

時間為2022的夏季, 在7月中旬, 我一位大學朋友 (@henrykuh) 邀請我一同參與他所主辦的 Game Jam, 在其活動的主題為驚喜 Surprise. 同時他也邀請我回 火柴共作坊 擔任程式區塊的負責人. 所以實質上, 這個 Game Jam 是用來讓我與其他在同個社群裡面的指導員 互相熟識, 以及交流的一個媒介. 這時候的我, 剛好完成了我上一份專案的開發計畫, 在沒有其他特別安排的 時期, 所以也沒有推辭, 就此決定參加很久沒參加的 Game Jam. ❓ 關於Game Jam 這個 Game Jam 的全名為 第五屆 DIY Game Jam: 驚喜 Surprise. 主辦單位為 自製遊戲公會. 時間是一個月, 比一般的 COVID-19 前的 Game Jam 的時間來的長上許多. 以往 Game Jam 時間都是 24 - 48 小時, 也就是一到兩天的時間 限制. 這是這個 Game Jam 相對比較特別的地方. 主題很明顯的, 名稱已經洩漏了, 是驚喜. 🔰 加入! 認識團隊 雖然以前我也曾短暫的待過在這 火柴共作坊 社群, 但對於其成員並不熟識....

August 29, 2022 · 1 分鐘 · 177 字 · Jen-Chieh Shen