#tui #clash #api #api-server #cli

nightly bin+lib clashctl-tui

用于与Clash RESTful API交互的Tui

8个版本

0.4.1 2021年12月16日
0.4.0 2021年12月13日
0.3.2 2021年12月13日

#2873命令行工具

42 每月下载量
clashctl 中使用

MIT 协议

120KB
3.5K SLoC

Clashctl

关于

简单易用的TUI和CLI,用于与Clash RESTful API交互。

截图

状态面板

Status panel

代理面板

Proxies panel

安装

crates.io

# Full function version
$ cargo install clashctl 
# Or install the tui-only version
$ cargo install clashctl-tui

从源码编译

$ git clone https://github.com/George-Miao/clashctl.git
$ cd clashctl
$ cargo install --path ./clashctl # Note that the path here is *NOT* a mistake - It's a submodule with exact same name that contains the bin

入门

首先添加API服务器

$ clashctl server add
# Follow the prompts

使用不带子命令的命令默认打开TUI

$ clashctl

# Equals

$ clashctl tui

或使用子命令使用CLI

$ clashctl proxy list

---------------------------------------------------------
TYPE                DELAY   NAME
---------------------------------------------------------
selector            -       All

    URLTest         -       Auto-All
    ShadowsocksR    19      SomeProxy-1
    Vmess           177     SomeProxy-2
    Vmess           137     SomeProxy-3
    Shadowsocks     143     SomeProxy-4

---------------------------------------------------------

功能

  • 美观的终端UI
  • 更改代理
  • 以普通和分组模式显示代理,支持过滤和排序
  • 存储和使用多个服务器
  • 生成完成脚本(由 clap_generate 提供)
  • 管理多个服务器

完成 & TODO

  • Cli
    • 管理服务器
    • 排序代理
    • 更多功能
  • TUI
    • 状态面板
    • 代理面板
      • 更新代理
      • 测试延迟
      • 按 {原始, 延迟升序, 延迟降序, 名称升序, 名称降序} 排序
    • 规则面板
    • 连接面板
      • 排序
    • 日志面板
    • 调试面板
    • 配置面板
      • 更新Clash配置
      • 更新clashctl配置
    • 搜索
    • (可能) 支持鼠标

先决条件

您需要nightly rust环境(Cargo & rustc)来编译和安装

用法

使用TUI

  • 使用CLI配置服务器(目前)
  • 使用数字在选项卡之间导航
  • 空格键保持列表(因此可以移动列表)
  • 箭头键在保持模式下移动列表
  • [^d] 打开调试面板

使用CLI

$ clashctl -h
clashctl

George Miao <[email protected]>

Cli & Tui used to interact with Clash RESTful API

USAGE:
    clashctl [OPTIONS] [SUBCOMMAND]

OPTIONS:
    -c, --config-path <CONFIG_PATH>    Path of config file. Default to ~/.config/clashctl/config.ron
        --config-dir <CONFIG_DIR>      Path of config directory. Default to ~/.config/clashctl
    -h, --help                         Print help information
    -t, --timeout <TIMEOUT>            Timeout of requests, in ms [default: 2000]
        --test-url <TEST_URL>          Url for testing proxy endpointes [default: http://
                                       www.gstatic.com/generate_204]
    -v, --verbose                      Verbosity. Default: INFO, -v DEBUG, -vv TRACE
    -V, --version                      Print version information

SUBCOMMANDS:
    completion    Generate auto-completion scripts
    help          Print this message or the help of the given subcommand(s)
    proxy         Interacting with proxies
    server        Interacting with servers
    tui           Open TUI

作为crate使用

# cargo.toml

[dependencies]
clashctl-core = "*" # Don't add `clashctl`, that will be the binary crate. `clashctl-core` contains API stuff.

然后在您的项目中

use clashctl_core::Clash;

fn main() {
  let clash = Clash::builder("http://example.com:9090").unwrap().build();
  println!("Clash version is {:?}", clash.get_version().unwrap())
}

开发

clashctl 配套一个 justfile 来加速您的开发。特别是命令 just dev,成功在前端开发中实现了热重载功能,使用了 cargo-watch

Just 命令

just dev [ 别名: d ]

热重载开发,在 cargo-check 确认更改后自动重载,所有功能都已启用

just run {{ Args }} [ 别名: r ]

以功能 cli & ui 运行

just ui

仅运行 UI

just cli

仅运行 CLI

just build [ 别名: b ]

以功能 cli & ui 在发布模式下构建

just add

添加一个可选依赖项,需要 cargo-edit

项目结构

$ tree src -L 2
├── clashctl                # Submodule for binary - Both CLI & TUI
├── clashctl-core           # Submodule for API interaction
├── clashctl-interactive    # Submodule for common dependency of CLI & TUI
├── clashctl-tui            # TUI only binary
├── clashctl-workspace-hack # Workspace hack generated by cargo-hakari
└── ...

依赖项

~11–20MB
~301K SLoC