darlal/obsidian-switcher-plus

[Feature Request] Search all blocks with `^block-ids` by their content

Opened this issue ยท 4 comments

I'd like the ability to search all blocks with ^block-ids by their content.

I'm imagining this working the same way that the this plugin's symbols work (like # to search headings), but for blocks which already have ^block-ids.

I was actually surprised to see this wasn't already in this plugin, so I'm hoping it's a feature the community would be interested in.

If maintainers are open to it and can maybe share some relevant parts of the codebase to enable this, I might be able to contribute the feature myself. I am already a contributor to the Readwise plugin and familiar with how Obsidian plugins generally work.

While not comprehensive logic for identifying blocks with IDs, this is a simplistic/naiive approach that gets all content on the same line as a block-id:

async getBlocksWithIds(app: App): Promise<string[]> {
	const blocksWithIds: string[] = [];
                                                                       
	// Get all markdown files in the vault
	const files = app.vault.getMarkdownFiles();
                                                                       
	for (const file of files) {
		const content = await app.vault.read(file);
		const lines = content.split('\n');
                                                                       
		for (let i = 0; i < lines.length; i++) {
			const line = lines[i];
			if (line.match(/\^[\w-]+/)) {
				blocksWithIds.push(line);
			}
		}
	}
                                                                       
	return blocksWithIds;
}

Emphasis on this being simplistic/naiive, as it will over-match a lot of lines (really any that contain the ^word) and not match many cases where it should (eg when the ^block-id is on the next line)

I have discovered that Obsidian can kind of search all these references natively.

Just type [[^^ -- the double caret notation is important. I'd only tried single caret. It'll show more than just the blocks with ^block-ids, but it WILL show blocks with block-ids from all files, which is still useful.

I'll leave the request open anyway as this idea may still be a compelling feature for this plugin.

I've made a plugin which does this: https://github.com/tyler-dot-earth/obsidian-blockreffer

Though I still think it would be awesome in Quick Switcher!

I have discovered that Obsidian can kind of search all these references natively.

I believe core Obsidian also supports a search operator for blocks already. So searching block content is already supported out-of-the-box as part of the core search functionality.

[[^^ -- the double caret notation is important. I'd only tried single caret. It'll show more than just the blocks with ^block-ids, but it WILL show blocks with block-ids from all files, which is still useful.

I imagine this capability is to enable users to define new block-ids without interrupting their workflow i.e. you can define a new block-id and link directly to it in one step.

I've made a plugin which does this .. Though I still think it would be awesome in Quick Switcher!

Cool! ๐Ÿ‘ it's also perfectly reasonable to let this new plugin evolve independently ๐Ÿ˜„

Have you seen the Omnisearch plugin? It provides full-text search in a quick-switcher type modal. Your plugin is similar but scope to Blocks, I think the capability you've build could fit in better with Omisearch as well.