Releases: max-fluff/obsidian-heading-linker
Releases · max-fluff/obsidian-heading-linker
Release list
1.3.1
Added
- Excluded words (Matching, Settings). A second exclusion list, for the words in your prose rather than the headings in your sources. A line stops that spelling and nothing else; end it with
*and it stops every form behind it. Either way the heading keeps its place in the index — it still completes with[[, still counts in the status bar, still catches its other wordings — it simply stops catching that word. Until now the list of excluded headings was the only lever, and it takes the heading out altogether.
Changed
- The exclusion menu names two different acts (Menu). On a matched word the menu now offers Stop linking "word" ▸ this spelling / every form of it, and separately Add "Heading" to excluded headings. Two verbs rather than three sizes of one: the first two leave the heading in the index, the last removes it. The starred line the menu writes carries the word's base form under the current match mode — a stem with the stemmer, the whole word in exact mode.
- The exclusion lists are edited as lists (Settings). Each entry is its own box, corrected in place, with a remove button beside it and an add box below — the shape the path lists already use. The list folds away behind its count, and past ten entries it scrolls rather than pushing the rest of the tab out of reach.
Fixed
- A word that matched only through its stem had no way out. "Specifically" and "specification" reduce to one root, so the first linked to the heading named by the second, and the one exclusion item on the menu offered to drop that heading — the term the reader wanted to keep (#1).
- The candidate list offered words that were already on an exclusion list, so a word just silenced came back as one worth defining.
1.3.0
Added
- Follow heading renames (Links, Settings). Obsidian repairs links when a file is renamed, but not when a heading is: edit
## Projectileto## Projectilesand every[[Guide#Projectile]]in the vault is quietly broken. The plugin is the one thing that can notice, since it already keeps every heading it indexed — rename one and it offers to retarget the links pointing at it, through the same preview the other bulk actions use. The new Follow heading renames setting chooses between offering it, opening the preview straight away, and doing nothing. The link's target is what changes; the wording around it is your prose and is left alone, unless it repeated the old heading word for word. - Find heading links that no longer land (Commands). For a heading renamed while the plugin was off, when which heading replaced which can no longer be told: a note listing every link that names a heading its source file no longer has, so the reader decides rather than the plugin guessing.
- A breadcrumb for every heading (Matching). The Which one? picker and the autocomplete popup show where a heading sits — its file and the headings enclosing it, as
Guide › Combat › Spawn— so two same-named headings are told apart by their place, not only by their file. - A warning for headings repeated inside one file (Indexing). Only the first of them can be linked, since
File#Headingcannot say which. Rebuilding the index says how many there are and names them in the console. - A public API (Integrations). A small read-only surface at
app.plugins.plugins['heading-linker'].apifor other plugins and DataviewJS: the indexed headings, what a label or alias resolves to, the morphology keys and base form of a word, matches in arbitrary text, a per-heading usage report and the frequent words that have no heading yet. The scans behind it are cached per note, so a second call only re-reads what changed.
Fixed
- The status bar counted a heading link only when it was written the way the plugin writes it. Link resolution now goes through one helper, so a link written by hand — or completed by Obsidian with a path — is counted the same as the plugin's own.
Internal
- Notes are rewritten through
vault.processrather than a separate read and write, as Obsidian's guidelines ask: the read and the write are one step, so a note edited in between cannot be clobbered. - The wikilink grammar, the usage and candidate scans, the report writer and the settings-tab redraw all moved to the shared module the four linkers draw on.
1.2.2
Added
- Broader morphology across the built-in languages (Matching). Many more inflected forms in your text now match a heading:
- English — classical and irregular plurals (
indices↔index,criteria↔criterion,analyses↔analysis), native irregulars (mice↔mouse,feet↔foot),-f/-ves(wolves↔wolf), compounds (firemen↔fireman,salespeople↔salesperson) and Greek-sisplurals (syntheses↔synthesis). - German — finite verb forms (
macht,machte↔machen) and feminine-innenplurals (Freundinnen↔Freundin), through the CISTEM stemmer added beside the existing light one. - Russian — adjective case forms (
новым,новых↔новый), short nouns with a dropped vowel (дня↔день,сна↔сон), suppletive stems reached from any case form (человека↔люди), and-ятаyoung-animal plurals (котята↔котёнок). - Ukrainian — the same short-noun and fleeting-vowel coverage as Russian.
- French — the closed
-ail/-auxgroup and suppletive plurals (travaux↔travail,yeux↔œil). - Greek — the commonest modern plural classes (
χώρες↔χώρα,βιβλία↔βιβλίο) and-ίneuters (παιδιά↔παιδί).
- English — classical and irregular plurals (
Changed
- English now uses the Porter2 stemmer (Matching) in place of the original 1980 Porter algorithm. It over-stems less, so fewer unrelated words are drawn together —
generalandgenerous,universeanduniversity,internandinternalnow stay apart, while ordinary forms still link. Existing vaults may see a few English words start or stop linking; the index rebuilds itself.
Fixed
- Light ending-strip mode no longer eats a silent
e:notes↔note,files↔file,values↔valuenow link, as do Spanishgrandes↔grandeand Frenchchevaux↔cheval. - Two files whose names differ only in case (
Guideandguide) each open the file the row names, at its heading. Before, both rows in the Which one? list opened whichever the link resolver ranked first, so one file was unreachable.
Internal
- The Porter2 port is checked letter-for-letter against the Snowball reference vocabulary (~42,000 words). CISTEM (MIT) and the light stemmers keep their upstream attribution and licence notices.
1.2.1
v1.2.0
Added
- Aliases can now be collected from links you have already written. Right-click a heading link and choose Collect this alias to save its wording as an alias of the heading it points at; right-click a note and choose Collect heading aliases from links to do the same for every heading link in it; the command palette has Collect aliases from links: this note. The alias is written into the
%% alias: … %%comment inside the heading's own section, extending an existing comment rather than stacking a new one. A new "Collect aliases" items toggle in the context-menu settings turns all of this off. - Hovering a word that matches more than one heading now lists the candidates instead of showing a bare tooltip, and each row previews its own note on hover and opens it on click. Every row carries a second line naming the file the heading lives in — usually the only thing telling two identical headings apart — and says so when the row was reached through an alias rather than the heading's own text.
- Heading Linker now cooperates with the sibling linker plugins when more than one is installed. A word both of them match is drawn once, by whichever sits higher in the new Priority among linker plugins setting (Settings → Maintenance), and the other stands aside; the right-click menu gets one entry per action instead of one per plugin, the autocomplete popup merges both plugins' suggestions into one list, and the "which one?" dialog offers the other plugin's readings of the word alongside this one's. The setting appears only when another linker is present.
- Insert plain text, a new autocomplete setting: picking a suggestion completes the word without turning it into a link.
Changed
- Everything you can do to a highlighted word now lives in Obsidian's own right-click menu in the editor, instead of a separate menu attached to the highlight. The three ways to link — Link "word" here, in this note, in all notes — sit under one Link "word" entry with the choice inside it, and opening is a single Open "word" item rather than separate open/open-in-new-tab lines.
- Reading view no longer shows a plugin context menu on a highlighted word: a click opens it (asking which heading when there are several), and everything that edits the note is in the editor. The long-press that stood in for right-click on mobile is gone with it.
- Menu items that act on the thing under the cursor dropped the
Heading:prefix — Unlink this link, and the add/remove items for excluded headings. The prefix stays on the configuration items in the file-explorer menu, where it says which plugin's sources or scope you are changing. - The autocomplete's second line is shorter and reads as a fragment:
word form · Fileandas "wording" · Filein place of the previous sentences. - Settings wording was tightened. The scope and source lists are now labelled Paths to include and Always excluded and state that an entry can be a file or a folder; Skip after characters mentions that leaving it empty disables the check.
Fixed
- In Reading view a theme that underlines links drew a second line under every highlighted word, so the underline-style setting appeared to have no effect. The plugin's own underline is now the only one.
- Excluding a heading from the right-click menu left no way to undo it there: exclusion removes the word from the index, so the menu then found nothing under the cursor and offered nothing. The remove-from-excluded item is now shown on an already-excluded word.
- When another linker also matched the word under the cursor, the link picker offered that plugin's target even though only the plugin that owns a word can write its link. Linking now offers this plugin's headings only; opening still offers both.
Internal
- The morphology engine and its language modules, the locales, styles, dialogs, autocomplete and the prose matching core moved into the shared
obsidian-linker-sharedsubmodule, so the four linkers stay in step; the top-levellanguages/folder is gone with them. - Tests were rebuilt on the shared harness, and CI now gates on the cross-version compatibility check.
v1.1.0
Added
- Heading aliases — give a heading extra wordings (abbreviations, synonyms) in an Obsidian comment right under it:
%% alias: CNS, brain and spinal cord %%. Those words then link to that heading too, in any inflected form, and show up in the autocomplete. Comments are invisible in Reading view, so the note stays clean; usealias:oraliases:, comma-separated. New Heading aliases setting (on by default; turn it off to skip reading file bodies in very large vaults).
Internal
- Aliases are cached per file and re-read only when a file changes, so rebuilding the index never reads file bodies.
- Removed two dead code paths (unused token field and link-change list).
1.0.0
First release.
Highlights words in any inflected form and turns them into links to matching headings inside your glossary files.
- Reading-view and editor (Live Preview / Source) highlighting
- Turn into links with a preview: this note, a selection, or all notes; and unlink
- Ambiguous-heading picker when a word matches headings in more than one file
- Native hover-preview and click on the links it makes
- Autocomplete while typing (optional)
- Smart case for acronyms; per-note opt-out via
heading-linker: false - Built-in morphology: English, Russian, Ukrainian, German, Spanish, French
Install via BRAT: add max-fluff/obsidian-heading-linker as a beta plugin.