ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

QOwnNotes 离线语法与风格检查:Harper 集成完整配置指南

QOwnNotes 离线语法与风格检查:Harper 集成完整配置指南 桌面应用【免费下载链接】QOwnNotesQOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.项目地址https://gitcode.com/gh_mirrors/qo/QOwnNotes点击查看免费下载QOwnNotes 通过内置的 Harper 支持在笔记编辑器中提供可选的离线语法与风格检查offline grammar and style checking基于harper-ls语言服务器在本地完成检测无需把笔记内容发送到任何外部服务。本文将带你完成 Harper 的启用、运输方式Transport选择、方言与 Linter 配置、连接测试并从源码层面剖析它的工作机理帮助你把这套检查能力无缝接入自己的写作流程。Harper 与现有拼写检查的关系Harper 并不是用来替代 QOwnNotes 原有拼写检查spellchecking的而是作为其补充拼写检查负责基础拼写纠错Harper 更进一步覆盖语法、风格、标点与措辞层面的问题。在 README 中QOwnNotes 将 Harper 与 LanguageTool、Markdown LSP 并列介绍三者同属于编辑器可选的语法/风格检查能力。核心功能根据 Harper 文档 与源码实现该功能包含以下能力彩色下划线标注语法、风格、标点、措辞问题按类别用不同颜色显示在编辑器内右键菜单替换建议右键点击问题文本即可看到候选替换词忽略机制支持Ignore this rule忽略某条规则与Ignore word忽略某个单词操作快速开关Edit编辑菜单提供Check grammar with Harper切换项完全本地检查通过harper-ls语言服务器以Stdio或TCP方式通信全程无需联网。设置步骤打开 QOwnNotes 的Settings设置选择Editor - Harper即可看到 harpersettingswidget.ui 中定义的完整配置界面。1. 启用功能勾选Enable offline grammar and style checking with Harper启用 Harper 离线语法与风格检查。该开关对应设置键harperEnabled默认值为false源码中由 harperchecker.cpp 的readSettings()读取。同时Edit菜单中的Check grammar with Harper动作见 mainwindow.ui也会同步该开关状态具体逻辑位于 mainwindow.cpp。2. 选择运输方式Transport选项说明默认值Stdio (recommended)由 QOwnNotes 直接启动本地harper-ls进程对应模式值 0推荐TCP连接一个已经运行的harper-ls服务器对应模式值 1—运输方式保存在设置键harperTransportMode中。源码层面harperclient.cpp 的ensureTransport()根据模式分别创建HarperStdioTransport基于QProcess或HarperTcpTransport基于QTcpSocket两种传输实现。Stdio 模式参数Command / binary path命令/二进制路径默认命令为harper-ls对应设置键harperBinaryPathAuto-detect自动检测通过QStandardPaths::findExecutable在系统PATH中查找harper-ls见 harpersettingswidget.cpp找到后会把完整路径回填到输入框Browse浏览手动选择 Harper 可执行文件。启动时Stdio 传输会以harper-ls --stdio参数拉起子进程并等待最多 2 秒确认启动成功harperclient.cpp。TCP 模式参数Server address服务器地址默认127.0.0.1对应设置键harperTcpAddressPort端口默认4000对应设置键harperTcpPortUI 中允许的范围为 1~65535。TCP 连接等待超时同为 2 秒连接失败时会记录下一次重试时间当前实现为失败后等待 2 秒再重连见ensureStarted()。3. 选择方言DialectDialect下拉框提供 5 种英语方言选项American美式默认British英式Australian澳式Canadian加式Indian印式方言值保存在harperDialect中会作为dialect字段写入发送给harper-ls的配置harperclient.cpp。4. 调整检查延迟Check delayCheck delay检查延迟控制 QOwnNotes 在停止输入后、发起检查请求前等待的毫秒数。UI 中可调范围为500~5000 ms步长 100 ms默认 1500 ms对应设置键harperCheckDelay。底层通过单次定时器QTimer实现防抖debounce并在设置读取时把定时器间隔同步为该值harperchecker.cpp。5. 选择启用的 Linter以下 12 个 Linter 均可独立勾选源码中的内部标识见括号UI 名称内部标识Spell Check拼写检查SpellCheckSentence Capitalization句首大写SentenceCapitalizationRepeated Words重复单词RepeatedWordsLong Sentences长句LongSentencesAn vs A冠词 a/an 选择AnAUnclosed Quotes未闭合引号UnclosedQuotesCorrect Number Suffix数字后缀纠正CorrectNumberSuffixSpaces空格SpacesQuote Spacing引号间距QuoteSpacingNo French Spaces无法语空格NoFrenchSpacesWrong Apostrophe错误撇号WrongApostropheSpelled Numbers拼写数字SpelledNumbers默认启用SpellCheck、AnA、SentenceCapitalization、RepeatedWords、LongSentences、Spaces、QuoteSpacing、NoFrenchSpaces、WrongApostrophe、CorrectNumberSuffix、UnclosedQuotes这 11 项SpelledNumbers默认关闭完整默认列表见 harperchecker.cpp。勾选结果保存在harperEnabledLinters中并在发送配置时以布尔开关形式写入 LSP 的linters配置对象。6. 测试连接点击Test Connection按钮验证配置是否可用Stdio 模式下会尝试启动harper-lsTCP 模式下会尝试连接配置的服务器测试时会发送一段固定测试文本This are a test sentence.harpersettingswidget.cpp收到checkFinished信号则弹窗提示连接成功并附带服务器版本号收到checkError则提示连接失败原因。页面底部还有一个Status状态区Stdio 模式下会显示找到的harper-ls路径与版本通过执行harper-ls --version查询TCP 模式下显示目标地址与端口。7. 管理忽略项设置页提供两个重置按钮Reset ignored rules重置忽略的规则清除所有通过右键菜单Ignore this rule忽略的规则Reset ignored words重置忽略的单词清除所有通过右键菜单Ignore word忽略的单词。两者点击后均会弹出确认对话框。忽略的规则保存在harperIgnoredRules、忽略的单词保存在harperIgnoredWords中。值得注意的是忽略单词时不仅会记录到 Harper 自己的集合还会同步调用QOwnSpellChecker把该词加入系统拼写词典harperchecker.cpp。工作原理Harper 在 QOwnNotes 中的工作流程由三个核心组件协作完成全部位于 services 目录HarperCheckerharperchecker.h / harperchecker.cpp编辑器侧的调度器负责决定检查哪些内容、何时发起请求、缓存与管理忽略项HarperClientharperclient.h / harperclient.cppLSP 客户端负责与harper-ls的协议通信HarperMatchharpertypes.h表示单个检查结果的数据结构包含偏移量、长度、消息、规则 ID、规则类别、替换建议与上下文文本。只检查可见区块QOwnNotes 不会把整篇文档一次性发给 Harper而是通过visibleBlocks()计算当前视口viewport内可见的文本块harperchecker.cpp。滚动编辑器时也会触发重新调度监听垂直滚动条的valueChanged。跳过无关内容shouldCheckBlock()会跳过以下类型的文本块harperchecker.cpp不可见或无效的块空白行trim 后为空标题行HeadlineEnd状态代码块CodeBlock状态以及 MarkdownHighlighter 中CodeCpp之后的所有代码状态。防抖与缓存防抖每次文本变化只启动单次定时器间隔即设置中的Check delay避免每敲一个键就发一次请求区块级缓存每个文本块以其 SHA-1 哈希作为键缓存结果内容未变化时直接复用缓存条目默认 TTL 为 300 秒、上限 500 条过期与超限条目会被清理cleanupExpiredCache()与enforceCacheLimit()结果有效性校验请求返回时会重新计算文档 SHA-1与提交时记录的哈希比对若文档在请求期间被修改则丢弃过期结果handleRequestFinished()。LSP 协议通信细节HarperClient 实现了标准的 Language Server ProtocolLSP2.0 流程包括初始化握手initialize/initialized并声明textDocument/codeAction与workspace/configuration能力通过workspace/didChangeConfiguration下发方言与 Linter 配置用textDocument/didOpen打开一个虚拟 Markdown 文档URI 形如file:///qownnotes-harper-id.mdlanguageId 为markdown接收textDocument/publishDiagnostics通知将行/列坐标换算为绝对偏移构造HarperMatch对每个诊断发起textDocument/codeAction请求从返回结果中解析Replace with: ...形式的替换建议decodeReplacementTitle()以及 workspace edit 中的newText所有请求带 5 秒超时超时或服务异常时通过checkError信号通知上层。问题高亮与右键菜单着色QOwnNotesMarkdownHighlighter的highlightHarper()qownnotesmarkdownhighlighter.cpp根据ruleCategory决定下划线颜色Spelling拼写→ 红色Style风格→ 琥珀色#c99500Punctuation标点→ 绿色#1c8f47Typography排版→ 紫色#7a3db8其余默认 Grammar 语法类→ 蓝色#2a6fdb。 高亮采用SpellCheckUnderline波浪下划线样式并附带问题消息作为 tooltip。右键菜单addHarperMenuSection()qownnotesmarkdowntextedit.cpp在光标位置命中问题时会弹出菜单包含类别与规则名不可点击的头部、最多 8 条替换建议、Ignore this rule、Ignore word ...。选择替换建议后通过applyHarperReplacement()以对应位置范围直接替换文本。不可用时的降级行为如果 Harper 无法启动或连接如harper-ls未安装QOwnNotes 会在状态栏显示带警告图标的提示消息持续约 5 秒并通过connectionError信号通知随后停止检查直到服务恢复可用harperchecker.cpp。构建前提Harper 支持是可选的取决于构建时是否启用该特性CMake 构建src/CMakeLists.txt中定义HARPER_ENABLED选项默认ONsrc/CMakeLists.txt启用后通过target_compile_definitions(... HARPER_ENABLED)传入编译器qmake 构建对应源码文件在 src/QOwnNotes.pro 中登记。若构建未启用该特性Settings - Editor - Harper页面会显示Harper support is not available in this build.且所有选项不可用Edit菜单中的Check grammar with Harper动作也会被隐藏mainwindow.cpp。与 LanguageTool 的关系Harper 与 LanguageTool 可以同时启用。两者的定位差异在于LanguageTool既可连接本地自托管服务也可连接远程服务如http://localhost:8081或https://api.languagetoolplus.com并支持按 Spelling/Grammar/Style/Punctuation/Typography 类别勾选Harper主打完全本地离线通过harper-ls以 Stdio 或 TCP 方式工作无需配置任何远程 URL。在实现上二者相互独立分别由LANGUAGETOOL_ENABLED与HARPER_ENABLED编译开关控制高亮渲染也走各自的管线因此可以放心叠加使用。常见问题harper-ls没有找到先确认已安装 Harper 命令行工具并使其位于PATH中然后点击设置页的Auto-detect或使用Browse手动指定可执行文件路径。TCP 连接失败确认harper-ls已以 TCP 服务方式启动、地址端口与设置一致默认127.0.0.1:4000再用Test Connection验证。修改配置后不生效HarperChecker 的scheduleCheck()每次触发前都会调用readSettings()重新读取设置因此改动保存后会在下一次检查时自动生效。检查结果没有出现确认已勾选启用开关、对应的 Linter 处于开启状态并且光标所在文本块不是标题或代码块这些内容会被有意跳过。相关文档拼写检查LanguageTool 语法与风格检查Markdown LSPQOwnNotes 核心概念赞分享桌面应用【免费下载链接】QOwnNotesQOwnNotes is a plain-text file notepad and todo-list manager with Markdown support and Nextcloud / ownCloud integration.项目地址https://gitcode.com/gh_mirrors/qo/QOwnNotes点击查看免费下载相关推荐QOwnNotes 集成 Harper 离线语法与风格检查完整配置指南与 harper-ls 工作原理QOwnNotes 集成 Harper 离线语法与风格检查完整配置指南与 harper ls 工作原理 QOwnNotes 通过可选集成 Harper htt桌面应用QOwnNotes 集成 Harper基于 harper-ls 的离线语法与风格检查配置指南QOwnNotes 集成 Harper基于 harper ls 的离线语法与风格检查配置指南 QOwnNotes 可在笔记编辑器中集成 Harper http桌面应用QOwnNotes 集成 Harper离线语法与风格检查的配置与实现原理QOwnNotes 集成 Harper离线语法与风格检查的配置与实现原理 QOwnNotes 通过本地 harper ls 语言服务器提供可选的 离线语法与风桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表