農林漁牧網

您現在的位置是:首頁 > 漁業

如何使用 Java 構建命令列文字編輯器(第 1 部分)

2022-09-23由 skysevenqi 發表于 漁業

終端視窗是什麼

想知道文字編輯器是如何工作的、shell 指令碼如何改變終端文字顏色、在不滾動的情況下更新行或移動游標?在這裡,學習如何。

您是否想知道文字編輯器是如何工作的,或者 shell 指令碼如何更改終端文字顏色、在不滾動的情況下更新行或移動游標?驚喜,驚喜:即使作為 Java 開發人員,我們也可以做到這一點!

在本系列中,我將引導您使用Java構建基於終端的文字編輯器。

在第 1 部分中,學習如何使用 ANSI 轉義碼和原生 C 庫透過 Java 進行精美的文字輸出、與終端互動以及構建檔案檢視器框架。

如何使用 Java 構建命令列文字編輯器(第 1 部分)

影片中有什麼

我們將透過解釋一般專案設定來開始影片。事實上,要讓我們的文字編輯器工作,您唯一需要做的就是安裝 Java。我們將從一個空白的 Java 類開始,從那裡開始我們將朝著工作檔案檢視器框架的方向努力。

作為一個簡短的說明,該影片側重於 Unix/macOS 終端。Windows 支援將在以後的劇集中新增。

要了解文字編輯器的工作原理,您首先需要了解ANSI 轉義碼是什麼。它們是您輸出到終端的特定字串,可讓您刪除螢幕、單行、定位游標、更改文字顏色等等。更好的是,所有現代終端都預設理解它們。

接下來是瞭解如何將終端設定為“原始模式”。預設情況下,您的終端會逐行處理文字,回顯我們鍵入的每個字元等等。我們不想要所有這些。但是,要進入原始模式,我們需要了解原生Unix API 以及如何使用 Java 訪問它們。

Termios API 就是這樣一種 API。它可以有效地讓您將終端設定為原始模式;因此,我將向您展示如何使用 JNA訪問 Termios API — 並執行相當多的按位與運算以使您的終端進入正確的模式。

有了 ANSI 轉義碼和終端原始模式知識,我們終於可以建立終端編輯器骨架了。當我們啟動編輯器時,我們希望看到一個清晰的螢幕。此外,所有空行都應該以“~”符號開頭,我們還應該在螢幕底部有一個漂亮的小狀態列——是時候實現了!

然而,為了正確實現狀態列和“~”符號,我們需要終端視窗實際有多少行和多少列的資訊。您無法使用 Termios API 獲取該資訊,因此我們需要為此使用另一個原生 Unix API:IOCTL API。呼叫 IOCTL 時需要注意一些注意事項,因此我們將重點關注這一點。最終,連線 IOCTL API 後,我們的終端骨架實際上可以按預期工作,使用整個終端的寬度和高度。

我們快到了這一集的結尾,要不是因為一些微小的、討厭的錯誤,比如螢幕閃爍和錯誤的游標定位。因此,我們將最佳化負責該行為的方法呼叫。

那是我們剛剛經歷的很多概念!這就是為什麼我們現在要結束,看看接下來會發生什麼:載入和顯示文字檔案,以及能夠移動游標。

https://youtu。be/kT4JYQi9w4w