让搜索结果再走一步

#

站内搜索已经能检索公开日志、项目介绍和代码,但从结果打开全文后,仍可能需要寻找具体章节。0.341.0 在原有全文入口下增加「直达命中章节」,把搜索与正文的位置接起来。

原标题继续进入完整文章,结果数量、相关性顺序和翻页保持原样;本页结果 TOML 仍使用正式的全文地址。这个补充入口是原生链接,关闭脚本或用键盘 Enter 也能使用,不会把搜索框里尚未提交的文字带进目标页。

搜索公开日志中的「代码」 →搜索与章节入口参考 →

只定位确实命中的章节

#

章节匹配使用已应用的关键词:按空白分词、忽略大小写,在同一章节的标题、正文、代码语言和代码内容中核对全部词。多个章节都符合时,取文档顺序中的第一个。

如果不同词分别出现在不同章节,或只命中文章标题与标签,就不猜测一个位置;没有关键词也不显示章节直达。下面是当前 Rust 搜索模块 matching_section 函数的原文。它只从公开配置中的日志与项目查找章节,不读取草稿或私有正文,也不会改变搜索结果的原始地址。

代码示例 · 27 行
rust
fn matching_section<'a>(c: &'a Config, item: &SearchItem, q: &str) -> Option<(usize, &'a str)> {
    if q.trim().is_empty() {
        return None;
    }
    let sections = if let Some(slug) = item.href.strip_prefix("/journal/") {
        &c.journal.iter().find(|entry| entry.slug == slug)?.sections
    } else if let Some(slug) = item.href.strip_prefix("/projects/") {
        &c.details
            .iter()
            .find(|project| project.slug == slug)?
            .sections
    } else {
        return None;
    };
    let words = q.to_lowercase();
    sections.iter().enumerate().find_map(|(index, section)| {
        let mut hay = format!("{} {}", section.title, section.body);
        for code in &section.code {
            hay.push_str(&format!(" {} {}", code.language, code.content));
        }
        let hay = hay.to_lowercase();
        words
            .split_whitespace()
            .all(|word| hay.contains(word))
            .then_some((index, section.title.as_str()))
    })
}
查找本篇的 Rust 实现 →

把全文留作离线文件

#

0.340.0 给公开文章底部增加「下载正文 TXT」。文件包含标题、正式地址、日期、分类、标签、摘要、章节正文、完整代码与相关链接;正文和代码保留空行、缩进和字面字符,换行统一为 LF,站内相关链接补成正式地址。

页面中已经折叠的代码仍会完整下载。文件来自当前已发布的服务端内容,页面上临时改写的 DOM、草稿、历史、阅读偏好和章节位置都不会进入文件;未发布或撤回的文章返回普通 404。这个下载与「下载文章 TOML」各自保留,也与阅读清单只含标题和链接的 TXT 区分开。

下载一篇公开文章的正文 TXT →查看 home 项目的完整介绍 →回到代码示例的设计记录 →

留在工作台的三篇文章

#

0.342.0 的本机工作台增加「稍后阅读」预览。它从既有收藏资料中,按加入顺序倒序显示最近三篇仍可公开的文章,并保留全部可用篇数;点击标题打开全文,完整清单入口继续提供查找和其他排序方式。

下方是独立编写的收藏 TOML 结构示例,并非实际浏览器资料。导入时沿用文件顺序;工作台的最近加入预览独立于阅读清单的最新发布、最早发布等显示偏好。未知或暂不公开的标识不占三个位置,也不自动删除。

预览不新增存储键,不自动更改收藏;跨标签页修改和页面恢复会刷新显示。当前聚焦文章被移除或挤出前三篇时,焦点转向完整清单入口;没有可用文章时,转向工作台上方的阅读清单入口。没有收藏、关闭脚本或存储不可用时隐藏预览,公开入口仍然可用。

代码示例 · 6 行
toml
# 独立结构示例,不是任何浏览器资料的实际导出。
version = 1
favorites = [
  "journal:writing-with-code",
  "journal:start-with-your-everyday",
]
打开工作台(先加入稍后阅读才显示预览) →查看完整阅读清单 →收藏与迁移说明 →

在恢复副本里核对整条路径

#

这几次改动沿用 Rust、TOML 与原生链接的基础:搜索给出位置,正文负责阅读和离线下载,本机工作台负责把已经留待稍后的文章带回来。它们分别使用公开配置和已有浏览器资料,不需要把私有文字加入公开索引。

本篇发布前,0.342.0 已通过 384 项 Rust 测试;该版本的恢复检查点把对应程序、源码和应用备份配对,在隔离副本中完成全部 50 组公开检查。专项结果包括正文 TXT 16 项、搜索章节 38 项、工作台 24 项和常用入口折叠 25 项;私有待办的 80 项流程检查只使用独立测试数据。

恢复验证期间,线上 521 个受保护文件的内容、权限和服务进程号保持不变,旧检查点完整保留。这证明了本机应用副本的恢复路径;异机副本和整机恢复仍待安排。本篇作为独立内容更新发布,不表示在发布后又重新运行了一遍全部应用测试。

查看 home 的功能与后续方向 →查看开发计划 →