ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

扩展 dotcommon:如何为 Fish、Termite 等配置文件添加自定义统计器?

扩展 dotcommon:如何为 Fish、Termite 等配置文件添加自定义统计器? 扩展 dotcommon如何为 Fish、Termite 等配置文件添加自定义统计器【免费下载链接】dotcommonWhat do people have in their dotfiles?项目地址: https://gitcode.com/gh_mirrors/do/dotcommondotcommon 是一个开源的dotfiles 配置统计工具它会爬取 GitHub 上最近编辑的 1000 份配置文件并自动统计出最常见的 Bash 别名、Vim 插件、Fish 导出项等榜单。今天我们就来手把手教你扩展 dotcommon为 Fish、Termite 等配置文件添加自定义统计器让它按你的需求统计任意配置写法。整个项目只有 4 个核心文件 10 个配置模块结构非常清晰非常适合拿来练手和理解爬虫 统计的完整流程。一、先搞懂 dotcommon 的统计原理 dotcommon 的统计链路很简单只有三步爬取crawl()通过 GitHub Code Search 按文件名如config.fish搜索最新配置统计count_atoms()把每个文件的文本喂给统计器atomizer用Counter累加输出write_header()和write_table()把结果写成易读的 RST 表格核心代码就藏在三个小文件里src/dotcommon/crawl.py负责搜索与调度的主入口src/dotcommon/count_atoms.py负责逐文件调用统计器并计数src/dotcommon/write.py负责格式化输出排行榜# src/dotcommon/crawl.py 的核心签名 def crawl(header, filename, *atomizers, countNone, pathNone): ... files g.search_code(queryfilename: filename, sortindexed, orderdesc) counters_atomizers count_atoms(files, atomizers)关键参数很好理解filename指定要搜的配置文件名path限定目录比如只搜termite目录count限制抓取数量*atomizers就是你要传入的自定义统计器。二、统计器atomizer到底长什么样统计器本质就是一个纯函数输入一段配置文件文本输出一堆原子要统计的字符串。它的 docstring 会直接变成结果表格的小标题。dotcommon 还内置了一个高频工具函数lines_starting_with()专门用来按行前缀提取# src/dotcommon/util.py def lines_starting_with(start, text): for line in text.splitlines(): stripped line.rstrip() if stripped.startswith(start): yield stripped下面这个来自src/fish.py的统计器就是最标准的写法def aliases(text): Aliases # ← docstring 会成为表格标题 return lines_starting_with(alias , text)一个函数 一个统计维度。想统计什么就写一个这样的函数然后把它传给crawl()即可。三、实战一为 Fish 添加自定义统计器 src/fish.py目前只有aliases别名和exports导出项两个统计器。假如你想知道大家最常给 Fish 配置哪些abbr缩写只需加一个函数def abbreviations(text): Abbreviations return lines_starting_with(abbr , text) crawl(Fish, config.fish, aliases, exports, abbreviations)再把abbreviations追加到crawl()的参数列表里运行python src/fish.py输出的榜单里就会多出一张 Abbreviations 表格。 同理你还可以为 Fish 添加functions函数定义、set变量设置等自定义统计器。四、实战二为 Termite 添加自定义统计器 ️src/termite.py目前只统计font字体而且它展示了统计器的进阶玩法——先处理再统计def font(text): Font fonts lines_starting_with(font , text) return (font.lower() for font in fonts) # 统一转小写再计数这样Font Hack 10和font hack 10会被合并成同一个条目统计更准确。想扩展 Termite 的统计维度加一个scrollback回滚行数统计器就行def scrollback(text): Scrollback return lines_starting_with(scrollback , text) crawl(Termite, config, font, scrollback, pathtermite)注意这里用了pathtermite参数——因为config文件名太通用必须限定目录才能精准命中 Termite 的配置文件。五、实战三高阶玩法——统计组合状态 有的统计器不满足于逐行计数而是要把多个配置组合成一个结论。src/bspwm.py里的gap_border就是绝佳范例它同时读取window_gap和border_width两行配置拼成一个间隙/边框的元组再计数def gap_border(text): Window gap/border width gap unset border unset for line in text.splitlines(): stripped line.rstrip() if stripped.startswith(bspc config window_gap ): gap stripped[stripped.rfind( ) 1:] elif stripped.startswith(bspc config border_width ): border stripped[stripped.rfind( ) 1:] return (f{gap}/{border},) # 返回元组这种思路可以迁移到任何多行联动的统计场景比如统计 i3wm 里modShiftr这类组合键或统计 Vim 中set shiftwidth4搭配set expandtab的常见组合。六、如何运行你的自定义统计器克隆仓库并安装依赖git clone https://gitcode.com/gh_mirrors/do/dotcommon cd dotcommon pip install PyGithub tabulate准备 GitHub Token在项目根目录创建token.gh文件填入一个有 Code Search 权限的 GitHub Tokencrawl.py会读取它。运行对应模块python src/fish.py # 统计 Fish 配置 python src/termite.py # 统计 Termite 配置控制抓取规模如果 1000 份太多或太少在crawl()调用里传入count100即可调整样本量。七、常见问题FAQ❓Q统计结果可信吗A项目 README 明确提醒结果基于GitHub 上最近编辑的 1000 份配置只代表趋势不代表全体用户请勿过度解读。Q可以统计任意配置文件吗A可以只要知道文件名比如vimrc、zshrc、bspwmrc、config.fish就能为它写专属统计器。参考src/vim.py、src/zsh.py、src/i3wm.py等现有模块的写法即可。Q统计器必须按行匹配吗A不必。atomizer 只是输入文本、输出原子列表的函数你可以用正则、按块解析、甚至做 NLP 分词自由发挥。QToken 无效或搜不到结果怎么办A确认 Token 开启了code权限且配额未用尽再检查文件名和path参数是否写对。八、小结 扩展 dotcommon 添加自定义统计器本质就是三步写一个接受文本、返回原子列表的函数 → 把函数传给crawl()→ 运行模块看榜单。从 Fish 的abbr到 Termite 的scrollback再到 bspwm 的组合状态统计你已经掌握了从入门到进阶的全部套路。现在就打开项目参照src/fish.py和src/termite.py的代码给你的 dotfiles 配置写一个专属统计器吧【免费下载链接】dotcommonWhat do people have in their dotfiles?项目地址: https://gitcode.com/gh_mirrors/do/dotcommon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表