Skip to content

theseus-sputik/sputik

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sputik

根据linux用户的特点设计图形界面和配置系统,以及shell扩展 保持尽量低的内存占用和高可扩展、复用,简易外观等 对于llm的输出,将使用可靠的日志记录数据库(键值对?),通过数据库进行内容生成,且具备至少一个联网模型,进行实时搜索 nasm(对于intel x86的开发方式的非正规称呼)用于硬件抽象、syscall、FFI hook注入控制 c/cpp用于通信处理、字符串解析

.-----------------------------.    .-----------------------------.    .-----------------------------.   .-----------------------------.    .-----------------------------.   .-----------------------------.   .-----------------------------.  .-----------------------------.
|         main                |    |         xinit               |    |         run                 |   |         draw                |    |       xdrawline             |   |       Input Handling        |   |       TTY Handling          |  |       Selection Handling    |
|                             |    |                             |    |                             |   |                             |    |                             |   |                             |   |                             |  |                             |
|    Initializes terminal     |    | Initializes X11 display,    |    | Main event loop             |   | Renders terminal content    |    | Draws a single line         |   | Processes keyboard/mouse    |   | Manages terminal I/O        |  | Manages copy/paste          |
|    Calls xinit:  run:       |    | window, fonts, and colors   |    | Handles X11 and TTY events  |   | Calls xdrawline   for each  |    | Handles glyph rendering     |   |                             |   |                             |  |                             |
'-----------------------------'    |                             |    |                             |   | line                        |    |                             |   | Key Functions:              |   | Key Functions:              |  | Key Functions:              |
                                   | Calls:                      |    | Calls:                      |   |                             |    | Calls:                      |   |   - kpress                  |   |   - ttynew                  |  |   - selinit                 |
                                   |   - xloadfonts              |    |   - ttynew                  |   | Calls:                      |    |   - xmakeglyphfontspecs     |   |   - bpress                  |   |   - ttyread                 |  |   - selpaste                |
                                   |   - xloadcols               |    |   - ttyread                 |   |   - xstartdraw              |    |   - xdrawglyphfontspecs     |   |   - brelease                |   |   - ttywrite                |  |   - clipcopy                |
                                   |   - XCreateWindow           |    |   - draw                    |   |   - xdrawline               |    '-------------.---------------'   |   - bmotion                 |   |   - ttyresize               |  |   - clippaste               |
                                   |   - xhints                  |    |   - handler                 |   |   - xfinishdraw             |                                      |                             |   '-----------------------------'  |   - xsetsel                 |
                                   '-------------.---------------'    '-------------.---------------'   '-------------.---------------'                                      | Uses:                       |                                    '-----------------------------'
                                                                                                                                                                             '-----------------------------'

1. 程序初始化

  • 功能:启动终端,配置初始环境,准备运行。
  • 逻辑流程
    1. 解析命令行参数,获取用户指定的选项(如字体、窗口大小、执行命令等)。
    2. 初始化终端数据结构,设置默认行列数(80列,24行)。
    3. 设置 X11 显示环境,创建窗口,加载字体和颜色配置。
    4. 初始化终端的输入输出通道(TTY),确定默认 shell(如 /bin/sh)。
    5. 设置选择(剪贴板)机制,准备处理文本复制粘贴。
    6. 进入主事件循环,等待用户输入或系统事件。

2. 窗口与显示初始化

  • 功能:创建并配置终端的图形界面。
  • 逻辑流程
    1. 连接到 X11 显示服务器,创建终端窗口。
    2. 加载用户指定的字体(如 Liberation Mono,大小 12),支持常规、粗体、斜体等变体。
    3. 配置颜色表(16种基本颜色 + 256色扩展),设置前景、背景、游标颜色。
    4. 设置窗口属性(如大小、边框、最小尺寸),支持嵌入其他窗口(如通过 -w 参数)。
    5. 初始化输入法支持,允许处理复杂字符输入(如中文)。
    6. 设置鼠标游标样式和颜色,初始化绘图上下文。

3. 主事件循环

  • 功能:持续处理用户输入和系统事件,保持终端运行。
  • 逻辑流程
    1. 监听 X11 事件(键盘、鼠标、窗口调整等)和 TTY 输入。
    2. 如果有新事件(如按键、鼠标点击),调用对应的事件处理函数。
    3. 如果有 TTY 数据输入(来自 shell 或命令),读取并更新终端内容。
    4. 根据事件或输入,触发屏幕重绘以更新显示。
    5. 使用延迟机制(2ms 至 33ms)优化渲染,减少闪烁,确保流畅显示。
    6. 处理闪烁属性(如光标或文本闪烁),根据超时时间切换显示状态。

4. 终端内容渲染

  • 功能:将终端的文本内容绘制到窗口。
  • 逻辑流程
    1. 检查是否需要绘制(窗口是否可见)。
    2. 遍历终端的每一行文本,逐字符生成绘图指令(glyph 规格)。
    3. 对于每个字符:
      • 确定字体(常规、粗体、斜体),根据字符属性选择。
      • 如果字体不支持该字符,使用备用字体(通过字体缓存或动态查找)。
      • 计算字符位置(基于行列和像素坐标)。
      • 应用颜色(前景、背景,支持反显、闪烁等属性)。
      • 处理特殊样式(如下划线、删除线)。
    4. 绘制光标(支持块状、下划线、竖线或自定义形状,如雪人)。
    5. 清理边框区域,确保无残留像素。
    6. 将绘制内容从缓冲区复制到窗口,完成渲染。

5. 输入处理

  • 功能:处理键盘和鼠标输入,转换为终端命令或操作。
  • 逻辑流程
    1. 键盘输入
      • 捕获按键事件,识别按键符号(如字母、功能键、方向键)。
      • 检查修饰键(如 Shift、Control、Alt),匹配预定义快捷键。
      • 如果是快捷键(例如 Ctrl+Shift+C 复制),执行对应功能。
      • 如果是普通按键,转换为字符序列,发送到 TTY。
      • 支持输入法,处理复杂字符(如多字节字符)。
    2. 鼠标输入
      • 捕获鼠标按下、释放、移动事件。
      • 如果启用鼠标模式,发送鼠标事件到应用程序(如 vim)。
      • 否则,处理选择操作(拖动选择文本)或触发快捷键(如中键粘贴)。
    3. 支持特殊键序列(如方向键、F1-F12),根据终端模式(应用键模式、游标模式)生成不同输出。

6. TTY 输入输出管理

  • 功能:管理终端与 shell 或命令的交互。
  • 逻辑流程
    1. 创建 TTY 通道,启动默认 shell 或用户指定的命令。
    2. 读取 shell 输出,更新终端的文本缓冲区。
    3. 将用户输入(键盘或粘贴内容)写入 TTY,传递给 shell。
    4. 调整 TTY 大小以匹配窗口尺寸变化,确保显示一致。
    5. 支持特殊 TTY 设置(如无回显、原始模式)以优化交互。

7. 选择与剪贴板管理

  • 功能:支持文本选择、复制和粘贴。
  • 逻辑流程
    1. 初始化选择状态,跟踪用户选择的文本区域。
    2. 当用户拖动鼠标或使用快捷键选择文本:
      • 记录选择的行列范围。
      • 支持矩形选择(按 Alt 键)。
    3. 复制操作:将选中文本存储到主剪贴板(Primary)或系统剪贴板(Clipboard)。
    4. 粘贴操作:从剪贴板读取文本,发送到 TTY 或插入到终端。
    5. 处理 X11 剪贴板事件,确保与其他应用程序的兼容性。
    6. 清除选择状态(例如,窗口失去焦点时)。

8. 窗口与状态管理

  • 功能:管理窗口状态和终端属性。
  • 逻辑流程
    1. 处理窗口事件(如调整大小、获得/失去焦点、关闭)。
    2. 调整窗口大小时,重新计算行列数,更新 TTY 和显示缓冲区。
    3. 设置窗口标题(基于命令或用户指定)。
    4. 处理紧急通知(如终端未聚焦时的铃声提醒)。
    5. 支持屏幕保护状态查询和模式切换(如反显、闪烁)。

About

emulated terminal(developing....)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published