2026-07-26 11:21:18 -04:00

103 lines
4.4 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Embed Search — Notebook Grouping Fork
A fork of [ambrt/joplin-plugin-embed-search](https://github.com/ambrt/joplin-plugin-embed-search), a Joplin plugin that lets you embed a live search inside a note and have the results render right there in the preview pane.
This fork adds the ability to group results by notebook, and fixes a bug where restricting a search to the current notebook would also pull in results from its subnotebooks.
## What it does
Add a fenced `search` code block to any note:
````markdown
```search
your search terms
```
````
When you view the note, the plugin runs that search and replaces the block with a live list of matching notes, each one a clickable link back to the note. To-do items get a checkbox you can tick right from the results list.
## Search modifiers
Add any of these on their own line inside the `search` block, alongside your search terms:
| Modifier | What it does |
|---|---|
| `sort:asc` | Sort results alphabetically by title, A → Z |
| `sort:desc` | Sort results alphabetically by title, Z → A |
| `content:true` | Show a preview of each note's body content below its title |
| `notebook:this` | Restrict results to the current note's notebook only *(fixed in this fork — no longer pulls in subnotebooks)* |
| `group:notebook` | **New in this fork.** Group results under bold notebook-name headers, sorted alphabetically by notebook, with notes sorted by title within each group |
### Examples
Show every note tagged with a keyword, sorted AZ:
````markdown
```search
budget sort:asc
```
````
Restrict to notes in the current notebook only, with content previews:
````markdown
```search
budget notebook:this content:true
```
````
Group everything across your whole workspace by notebook — handy for a dashboard note that surveys many notebooks at once:
````markdown
```search
tag:reference group:notebook
```
````
## What changed from the original plugin
- **Added:** `group:notebook` — groups search results under notebook headers instead of one flat list.
- **Fixed:** `notebook:this` previously appended a `notebook:"<title>"` filter to the Joplin search query. Joplin's own `notebook:` filter has no way to exclude subnotebooks, so this leaked in results from child notebooks. This fork instead filters results in-plugin by exact `parent_id` match against the current note's notebook, so only notes directly in that notebook are returned.
- **Fixed:** the original code asked Joplin for a folder's `name` field when resolving `notebook:this` — Joplin folders don't have a `name` field, only `title`, so this silently broke the feature. Fixed to request `title`.
All credit for the original plugin, the fence-block rendering approach, and the to-do checkbox handling goes to [ambrt](https://github.com/ambrt).
## Installation
1. Download the latest `.jpl` file from the [Releases](../../releases) page (or build it yourself — see below).
2. In Joplin: **Tools → Options → Plugins → gear icon → Install from file**.
3. Select the `.jpl` file and restart Joplin if prompted.
## Building from source
Requires Node.js and npm.
```bash
git clone https://gitea.skeletonworks.online/vwiebe/joplin-plugin-embed-search-fork.git
cd joplin-plugin-embed-search-fork
npm install
npm run dist
```
The built plugin will appear at `publish/com.victorwiebe.embed-search-notebook-grouping.jpl`.
### If `npm run dist` fails
This project's build tooling (webpack 4) predates a change in Node's OpenSSL defaults. If your Node version is 17 or newer, `npm run dist` (or `npm publish`, which runs it internally) can fail with an error that includes `ERR_OSSL_EVP_UNSUPPORTED` or `digital envelope routines::unsupported`. This is not a problem with the code — it's an old build tool meeting a newer Node.
This is already worked around in `package.json` — the `dist` script runs through `cross-env NODE_OPTIONS=--openssl-legacy-provider`, so a plain `npm run dist` and a plain `npm publish` should both just work as long as you've run `npm install` first (which pulls in the `cross-env` package the fix depends on).
If you still hit the error after `npm install`, delete `node_modules` and reinstall from scratch:
```bash
rm -rf node_modules package-lock.json
npm install
npm run dist
```
**Not sure which Node version you have?** Run `node --version`. Anything starting with `v17` or higher can hit this; `v16` and earlier won't.
## License
MIT, same as the original plugin.