最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

高手過招不用鼠標(biāo),一款超好用的跨平臺(tái)命令行界面庫

2022-03-29 10:57 作者:HelloGitHub  | 我要投稿


命令行工具是程序員的秘密武器,它們安裝簡單、啟動(dòng)速度快、界面簡潔,一條指令或者快捷鍵即可完成操作,用完即走深藏不露。


而最趁手的莫過于自己親手打造的!本期 《講解開源項(xiàng)目》 就介紹一個(gè)讓你快速擁有完美命令行界面的跨平臺(tái)庫—— tui.rs


你一定有過這樣的糾結(jié):我的程序需要一個(gè)界面,但使用諸如 Qt 等框架又比較繁瑣?,F(xiàn)在 tui.rs 來了,它是 Rust 下的命令行 UI 庫,不僅上手方便內(nèi)置多種組件,而且效果炫酷支持跨平臺(tái)使用。


輕松實(shí)現(xiàn)一份代碼可以無縫運(yùn)行在 Linux/Windows/Mac 之上!

接下來你不僅可以快速上手 tui.rs,還會(huì)收獲多款基于它構(gòu)建的神兵利器!

一、安裝

tui.rs 采用 Rust 語言編寫,和所有其他 Rust 依賴的安裝方法一樣,直接在 cargo.toml 中添加依賴即可:

[dependencies]
tui = "0.17"
crossterm = "0.22"

如果需要官方示例,則直接 clone 官方倉庫:


二、快速入門

2.1 一覽芳容

我們主要使用 tui.rs 提供的以下模塊進(jìn)行 UI 編寫(所有 UI 元素都實(shí)現(xiàn)了 WidgetStatefuWidget Trait):

  • bakend 用于生成管理命令行的后端
  • layout 用于管理 UI 組件的布局
  • style 用于為 UI 添加樣式
  • symbols 描述繪制散點(diǎn)圖時(shí)所用點(diǎn)的樣式
  • text 用于描述帶樣式的文本
  • widgets 包含預(yù)定義的 UI 組件

如下代碼就可以實(shí)現(xiàn)一個(gè)很簡單的 tui 界面:


這些代碼可能看起來不少,但大部分都是固定的模板,不需要我們每次的重新構(gòu)思。下面,就讓我們來詳細(xì)了解其中的細(xì)節(jié)。

2.2 創(chuàng)作模板

官方通過 example 給出了使用 tui.rs 進(jìn)行設(shè)計(jì)的模板,我希望各位讀者在使用時(shí)也能遵守這套模板以保證程序的可讀性。

一個(gè)使用 tui.rs 程序的一生大概是這樣的:


其模塊可以大致分為:

  • App.rs 實(shí)現(xiàn) App 結(jié)構(gòu)體,用于處理 UI 邏輯,保存 UI 狀態(tài)
  • ui.rs 實(shí)現(xiàn) UI 渲染功能

但對(duì)于小型程序來講,也可以都寫在 main.rs 之中。

首先來看開始和結(jié)束部分關(guān)于 Terminal 的操作,每次運(yùn)行都會(huì)保存原始 Terminal 界面內(nèi)容并在一個(gè)新的窗體上運(yùn)行,在結(jié)束后又會(huì)恢復(fù)到原來的 Terminal 窗體中,有效地防止了搞亂原來的窗口內(nèi)容。這部分代碼模板官方已經(jīng)給出,基本無需修改


接下來是處理 UI 邏輯的 run_App 函數(shù),我們在此處理諸如 用戶按鍵、UI 狀態(tài)更改等邏輯


對(duì)于功能簡單的界面來講,這個(gè)函數(shù)作用不大。但如果我們的程序需要更新一些組件狀態(tài)(比如列表選中項(xiàng)、用戶輸入、外界數(shù)據(jù)交互等)則應(yīng)在此統(tǒng)一處理。

之后,我們會(huì)使用 terminal.draw() 方法繪制界面,其接受一個(gè)閉包:


在這里,有如下流程:

  1. 使用 Layout 按照需求給定 Constraint 切分窗體,獲取 chunks,每個(gè) chunk 也可以利用 Layout 繼續(xù)進(jìn)行分割
  2. 實(shí)例化組件,每個(gè)組件都實(shí)現(xiàn)了 default 方法,在使用時(shí)我們應(yīng)該先使用 xxx::default() 獲取默認(rèn)對(duì)象,再利用默認(rèn)對(duì)象更新組件樣式。例如 Block::default().borders(Borders::ALL) 、Style::default().bg(Color::White) 等。這也是官方推薦做法。
  3. 使用 f.render_widget 渲染組件到窗體上,對(duì)于類似 列表 等存在狀態(tài)(比如當(dāng)前選中元素)的組件,則使用 f.render_stateful_widget 進(jìn)行渲染

關(guān)于 tui.rs 其他內(nèi)置組件的使用方法,可以查看官方的 example 文件,編寫套路是一樣的,可以根據(jù)需要直接復(fù)制粘貼

需要注意到是,在此我們只關(guān)心 UI 組件的顯示方式和內(nèi)容,有關(guān)程序邏輯的內(nèi)容應(yīng)放在 run_App 中處理以免打亂程序架構(gòu)或影響 UI 繪制效果(你總不希望 UI 繪制到一半的時(shí)候因?yàn)檫M(jìn)行了某些 IO 操作而卡住了對(duì)吧?)

到這里對(duì)于 tui.rs 的介紹就結(jié)束了,實(shí)際上使用 tui.rs 編寫 UI 界面很簡單,只要根據(jù)創(chuàng)作模板結(jié)合官方例子一步步構(gòu)建,任何人都可以很快上手。

三、更多實(shí)用工具

下面將介紹介紹幾款基于 tui.rs 構(gòu)建的流行開源項(xiàng)目,它們無一例外是命令行工具里的“神兵利器“!

3.1 實(shí)時(shí)股票數(shù)據(jù)

支持查看不同時(shí)間維度以及交易量等數(shù)據(jù),股票實(shí)時(shí)數(shù)據(jù)來自雅虎。


地址:tarkah/tickrs

3.2 文件傳輸工具

支持 SCP/SFTP/FTP/S3 功能豐富的終端文件傳輸工具。


地址:veeso/termscp

3.3 網(wǎng)絡(luò)監(jiān)控工具

用于按進(jìn)程、連接、遠(yuǎn)程 IP、主機(jī)名顯示當(dāng)前網(wǎng)絡(luò)利用率。


地址:imsnif/bandwhich

限于篇幅這里就不介紹其它開源項(xiàng)目了,感興趣的小伙伴可以去項(xiàng)目首頁尋找。

四、最后

以上就是本文的所有內(nèi)容,希望您從中有所收獲。

最后,感謝您的閱讀和陪伴?。?!

這里是 HelloGitHub 分享 GitHub 上有趣、入門級(jí)的開源項(xiàng)目。您的每個(gè)點(diǎn)贊、留言、分享都是對(duì)我們最大的鼓勵(lì)!

高手過招不用鼠標(biāo),一款超好用的跨平臺(tái)命令行界面庫的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
手游| 治多县| 保定市| 乐清市| 西吉县| 九江市| 乃东县| 通榆县| 胶州市| 金阳县| 平谷区| 渝中区| 海淀区| 孝感市| 长宁县| 咸阳市| 澜沧| 天镇县| 东宁县| 安义县| 唐河县| 璧山县| 云浮市| 景洪市| 疏勒县| 关岭| 长白| 专栏| 布尔津县| 甘德县| 普兰县| 大方县| 西充县| 公安县| 灵璧县| 吕梁市| 贺兰县| 且末县| 通山县| 额尔古纳市| 瑞安市|