Hacker News 中文摘要

RSS订阅

我制作了一个终端分页器 -- I made a terminal pager

文章摘要

作者Leo Robinovitch开发了一个名为"lore"的终端分页器工具,基于他自研的Go语言可复用组件"viewport"。该工具支持交互式浏览多页文本,现已作为日常工具使用。文章分享了开发过程中的功能设计思路和经验总结。

文章总结

我开发了一款终端分页工具

作者Leo Robinovitch在个人博客The Leo Zone分享了他开发的终端分页工具lore及其核心技术viewport组件的开发历程。

终端分页工具简介

终端分页工具(如lessmore)允许用户交互式浏览多页文本内容。作者基于自研的viewport组件开发了lore分页工具,现已作为日常工具使用。

终端应用开发

作者开发过多款终端用户界面(TUI)应用,如用于查看Kubernetes日志的kl和管理Nomad的wander。这些应用的核心功能都涉及大段文本的浏览与交互。

viewport组件设计

该Go语言组件具有以下核心功能: - 灵活调整显示区域大小 - 支持文本滚动和位置百分比显示 - 提供横向平移和文本换行选项 - 实现搜索和高亮匹配功能 - 支持ANSI转义码和Unicode字符 - 保持高性能处理大量文本

组件由三个模块组成: 1. item:处理字符串显示,考虑终端宽度和换行状态 2. viewport:实现文本导航功能 3. filterableviewport:增加搜索功能

Unicode处理方案

组件通过Item接口处理Unicode字符的终端显示宽度问题,包括: - 构建代码点到字节偏移的映射 - 计算累计终端单元格宽度 - 支持组合字符(如带重音符号的字母) - 实现MultiItemMultiLineItem处理前缀和多行内容

搜索与选择功能

提供三种搜索模式: - 精确匹配(/键) - 正则表达式(r键) - 不区分大小写(i键)

支持项目选择功能,可通过泛型实现不同类型对象的选取。

lore分页工具特点

相比传统less工具,lore: - 提供更符合作者使用习惯的操作方式 - 集成到日常工作流(通过设置PAGER环境变量) - 保持代码透明度和可改进性

作者表示将继续优化viewport核心功能和相关TUI应用开发。

查看完整文章 | 项目GitHub

评论总结

总结评论内容如下:

  1. 对项目实用性的质疑
    有评论认为该项目相比现有工具(如less)优势不明显,更像是一个学习项目。
    引用:
    "lore supports only a subset of what less does, but in a more intuitive and useful manner"
    "What was the main limitation in existing pagers like less that pushed you to build a new one?"

  2. 对技术解释的赞赏
    部分用户赞赏文章对UTF-8字符串特性的清晰解释。
    引用:
    "I think it's the clearest explanation I've seen of the different characteristics of utf-8 strings"

  3. 幽默调侃
    有用户对项目名称进行趣味联想,或调侃界面元素不足。
    引用:
    "From the title I thought it’s about a dead man’s switch"
    "For a bubbletea application I'd expect more bubbles and tea"

  4. 现有工具推荐
    多位用户推荐bat等现有分页工具,并讨论其功能优势。
    引用:
    "bat is the king of pagers"
    "I've been using bat as a pager...it covers most of what I need"

  5. 功能需求建议
    用户提出期待现代分页工具应具备刷新等新特性。
    引用:
    "I think the killer feature for me would be refresh"
    "fzf supports both refresh and piped input"

  6. 相关项目分享
    有开发者分享自己开发的类似工具并寻求反馈。
    引用:
    "I made a typescript library to wrap pickers recently"
    "Would love if anyone has thoughts or suggestions"