You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在gnome-terminal输出的每个大写字母前加字符适配盲文显示器

终端大写字母前缀注入方案

一、实时TUI兼容方案(推荐)

通过创建伪终端(PTY)代理拦截所有终端输出,修改后再转发到真实终端,完美支持nano、vi、mc这类TUI程序,使用方式类似screen。

实现代码(Python脚本)

创建名为caps-prefix.py的文件,内容如下:

import pty
import os
import sys
import re

# 替换规则:每个大写字母前添加~
def modify_output(data):
    try:
        text = data.decode('utf-8')
        # 仅替换可见大写字母,避免破坏终端控制码
        modified = re.sub(r'([A-Z])', r'~\1', text)
        return modified.encode('utf-8')
    except UnicodeDecodeError:
        # 无法解码的二进制数据直接返回
        return data

def main():
    if len(sys.argv) < 2:
        print("用法: python caps-prefix.py <命令> [参数]")
        print("示例: python caps-prefix.py nano")
        print("示例: python caps-prefix.py bash")
        sys.exit(1)
    
    command = sys.argv[1]
    args = sys.argv[1:]
    
    # 创建PTY代理
    pid, fd = pty.fork()
    if pid == 0:
        # 子进程执行目标命令
        os.execvp(command, args)
    else:
        # 父进程拦截并修改输出
        while True:
            try:
                # 读取子进程输出并修改后写入终端
                data = os.read(fd, 1024)
                if not data:
                    break
                os.write(sys.stdout.fileno(), modify_output(data))
                # 读取用户输入并转发给子进程
                input_data = os.read(sys.stdin.fileno(), 1024)
                os.write(fd, input_data)
            except OSError:
                break

if __name__ == "__main__":
    main()

使用方法

  1. 给脚本添加执行权限:
chmod +x caps-prefix.py
  1. 启动带前缀注入的终端环境:
python caps-prefix.py bash
  1. 在该环境内运行任意程序,所有大写字母都会自动添加~前缀;退出bash即可关闭该环境。

二、轻量定时刷新方案(适合非实时场景)

基于你提供的Shell代码片段优化,通过定时扫描终端内容并修改,适合静态输出、ping流等对实时性要求不高的场景。

实现脚本(Shell脚本)

创建名为caps-hack.sh的文件,内容如下:

#!/bin/bash

# 设置终端宽度(适配Canute 360的40字符)
TERM_WIDTH=40

# 获取终端总行数
get_term_lines() {
    tput lines
}

# 循环刷新终端内容
while true; do
    LINES=$(get_term_lines)
    for ((i=1; i<=LINES; i++)); do
        # 读取当前行内容
        original_line=$(tput cup $i 0; tput sc; tput el; cat /dev/tty | head -n1; tput rc)
        # 替换大写字母并截断到指定宽度
        modified_line=$(echo "$original_line" | sed -E 's/([A-Z])/~\1/g' | cut -c1-$TERM_WIDTH)
        # 写回修改后的内容
        tput cup $i 0
        printf "%s" "$modified_line"
    done
    # 控制刷新频率(单位秒,可按需调整)
    sleep 0.1
done

使用方法

  1. 添加执行权限:
chmod +x caps-hack.sh
  1. 后台运行脚本:
./caps-hack.sh &
  1. 停止脚本时执行:
pkill -f caps-hack.sh

注意事项

  • 实时PTY方案会拦截所有终端输出,可能导致部分TUI程序布局轻微偏移,但不影响核心功能。
  • 定时刷新方案可能存在轻微闪烁,无法处理快速滚动的内容,但实现简单无需额外依赖。
  • 两种方案均可在gnome-terminal中直接运行,无需修改终端配置。

内容的提问来源于stack exchange,提问作者Ed Rogers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 16:10:25