如何在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()
使用方法
- 给脚本添加执行权限:
chmod +x caps-prefix.py
- 启动带前缀注入的终端环境:
python caps-prefix.py bash
- 在该环境内运行任意程序,所有大写字母都会自动添加
~前缀;退出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
使用方法
- 添加执行权限:
chmod +x caps-hack.sh
- 后台运行脚本:
./caps-hack.sh &
- 停止脚本时执行:
pkill -f caps-hack.sh
注意事项
- 实时PTY方案会拦截所有终端输出,可能导致部分TUI程序布局轻微偏移,但不影响核心功能。
- 定时刷新方案可能存在轻微闪烁,无法处理快速滚动的内容,但实现简单无需额外依赖。
- 两种方案均可在
gnome-terminal中直接运行,无需修改终端配置。
内容的提问来源于stack exchange,提问作者Ed Rogers
相关产品推荐
相关产品推荐

