Add documentation for: - Graph caching system with mtime-based invalidation - Layout algorithm optimizations (Barnes-Hut, reduced iterations) - New commands: :IdeaGraph rebuild, :IdeaGraphClearCache - File scanning improvements
135 lines
5.7 KiB
Markdown
135 lines
5.7 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to ideaDrop.nvim will be documented in this file.
|
|
|
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
|
## [Unreleased]
|
|
|
|
### Added
|
|
|
|
#### 🕸️ Graph Visualization (Obsidian-style)
|
|
|
|
A new force-directed graph view that visualizes connections between your notes:
|
|
|
|
- **Graph Data Model**: Parses `[[Note Name]]` wiki-style links from markdown files
|
|
- Supports `[[link|alias]]` format
|
|
- Builds bidirectional edges (undirected graph)
|
|
- Extracts tags and folder metadata for filtering
|
|
|
|
- **Force-Directed Layout**: Implements Fruchterman-Reingold algorithm
|
|
- Spring forces attract connected nodes
|
|
- Repulsion forces prevent node overlap
|
|
- Gravity pulls high-degree nodes toward center
|
|
- Inverse gravity pushes orphan nodes to periphery
|
|
- Temperature-based cooling for stable convergence
|
|
- Supports both synchronous and animated layout modes
|
|
|
|
- **Visual Rendering**:
|
|
- Dark background canvas for visual clarity
|
|
- Node size scales with degree (number of connections)
|
|
- Color-coded nodes: blue (default), purple (hubs), gray (orphans), red (selected)
|
|
- Semi-transparent edge lines showing connections
|
|
- Labels for selected and high-degree nodes
|
|
|
|
- **Interactive Features**:
|
|
- `h/j/k/l` navigation between nodes
|
|
- `Enter` to open selected note in right-side buffer
|
|
- `t` filter by tag, `f` filter by folder, `r` reset filter
|
|
- `+/-` zoom in/out, `c` center graph
|
|
- `L` toggle labels, `?` toggle help overlay
|
|
- `q/Esc` close graph, `R` refresh graph data
|
|
- Smooth layout reflow when nodes are filtered
|
|
|
|
- **New Commands**:
|
|
- `:IdeaGraph` - Opens the graph visualization
|
|
- `:IdeaGraph animate` - Opens with animated layout
|
|
- `:IdeaGraph refresh` - Refreshes graph data
|
|
- `:IdeaGraph rebuild` - Force full cache rebuild
|
|
- `:IdeaGraph close` - Closes the graph window
|
|
- `:IdeaGraphFilter tag <name>` - Filter graph by tag
|
|
- `:IdeaGraphFilter folder <name>` - Filter graph by folder
|
|
- `:IdeaGraphClearCache` - Clear the graph cache file
|
|
|
|
- **New Configuration Options**:
|
|
- `graph.animate` - Enable animated layout (default: false)
|
|
- `graph.show_orphans` - Show nodes without connections (default: true)
|
|
- `graph.show_labels` - Show node labels by default (default: true)
|
|
- `graph.node_colors` - Custom colors by folder/tag
|
|
|
|
- **New Files**:
|
|
- `lua/ideaDrop/ui/graph/types.lua` - Type definitions
|
|
- `lua/ideaDrop/ui/graph/data.lua` - Graph data model
|
|
- `lua/ideaDrop/ui/graph/layout.lua` - Force-directed layout algorithm
|
|
- `lua/ideaDrop/ui/graph/renderer.lua` - Character-based canvas renderer
|
|
- `lua/ideaDrop/ui/graph/init.lua` - Main graph module
|
|
- `lua/ideaDrop/ui/graph/cache.lua` - Caching system for fast loading
|
|
|
|
#### ⚡ Graph Performance Optimizations
|
|
|
|
Fast loading system similar to Obsidian's caching approach:
|
|
|
|
- **Caching System** (`cache.lua`):
|
|
- Stores parsed links and tags per file in `.ideadrop-graph-cache.json`
|
|
- Only re-parses files that have been modified (mtime-based invalidation)
|
|
- First load scans all files, subsequent loads are nearly instant
|
|
- Cache stored in idea_dir alongside your notes
|
|
|
|
- **Layout Algorithm Optimizations**:
|
|
- Reduced max iterations (300 → 100) for faster convergence
|
|
- Barnes-Hut approximation for large graphs (100+ nodes)
|
|
- Skip distant node pairs in repulsion calculations
|
|
- Local math function caching for speed
|
|
- Tuned force parameters for faster stabilization
|
|
|
|
- **File Scanning**:
|
|
- Uses `vim.fs.find` for faster directory scanning (Neovim 0.8+)
|
|
- Fallback to glob for older versions
|
|
- Better path handling with environment variable expansion
|
|
|
|
#### Other Additions
|
|
|
|
- Added `CHANGELOG.md` to track project changes
|
|
- Added `llms.txt` for AI/LLM context about the project
|
|
- Added graph-related constants and settings in `constants.lua`
|
|
- Added graph-related notification messages
|
|
|
|
### Changed
|
|
|
|
- Updated help documentation (`doc/ideaDrop.txt`) to include all commands: `IdeaBuffer`, `IdeaRight`, `IdeaTree`, tag commands, and search commands
|
|
- Improved nvim-tree integration to preserve user's existing nvim-tree configuration
|
|
- Updated `README.md` with comprehensive graph visualization documentation
|
|
- Extended configuration options to include graph settings
|
|
|
|
### Fixed
|
|
|
|
- **Critical**: Fixed glob pattern bug where files were not being found due to missing path separator (`/`) between directory and pattern in `list.lua`, `tags.lua`, and `search.lua`
|
|
- **Critical**: Fixed nvim-tree integration that was overriding user's nvim-tree configuration on every `:IdeaTree` call. Now uses nvim-tree API directly without calling `setup()`
|
|
- Fixed deprecated Neovim API usage: replaced `vim.api.nvim_buf_set_option()` and `vim.api.nvim_win_set_option()` with `vim.bo[]` and `vim.wo[]` in `sidebar.lua`
|
|
- Fixed missing arguments in `sidebar.open()` call in `list.lua` which could cause unexpected behavior
|
|
- Removed unused variable in `tags.lua` (`filename` in `show_files_with_tag` function)
|
|
|
|
## [1.0.0] - Initial Release
|
|
|
|
### Added
|
|
|
|
- Multiple view modes: floating window, current buffer, right-side buffer
|
|
- Smart tagging system with `#tag` format
|
|
- Advanced fuzzy search through titles and content
|
|
- nvim-tree integration for file browsing
|
|
- Markdown support with syntax highlighting
|
|
- Auto-save functionality
|
|
- Date-based file organization
|
|
- Nested folder support
|
|
|
|
### Commands
|
|
|
|
- `:Idea` - Open idea in floating window
|
|
- `:IdeaBuffer` - Open idea in current buffer
|
|
- `:IdeaRight` - Open idea in right-side buffer
|
|
- `:IdeaTree` - Open file tree browser
|
|
- `:IdeaTags` - Browse and filter by tags
|
|
- `:IdeaAddTag` / `:IdeaRemoveTag` - Manage tags
|
|
- `:IdeaSearch` / `:IdeaSearchContent` / `:IdeaSearchTitle` - Search functionality
|