Bernardo Magri bernardo

bernardo a împins spre master la bernardo/Lumacs

2 săptămâni în urmă

bernardo a împins spre master la bernardo/Lumacs

  • b9976750bd fix(build): resolve GTK3/GTK4 symbol conflict by splitting binaries - Split build into 'lumacs' (GTK) and 'lumacs-raylib' (Raylib) targets. - Refactor 'gtk_editor' to isolate GTK headers and dependencies from main.cpp. - Update CMakeLists.txt to manage separate targets and dependencies. - Update main.cpp to auto-select backend based on available build configuration. - Add Phase 8 to PLAN.md.

2 săptămâni în urmă

bernardo a împins spre main la bernardo/Bibliotheca

  • a131ca4124 Add built-in reader, folder watching, and metadata editing Phase 5 features implemented: Built-in Reader (ReaderView): - PDF viewing with Poppler/Cairo rendering - EPUB viewing with libzip/tinyxml2 parsing and Pango text layout - Chapter-by-chapter navigation for EPUBs - Reading progress persistence per book - Keyboard navigation (Left/Right, PageUp/PageDown, Escape) Folder Watching (FolderScanner): - Scan folders recursively for EPUB/PDF files - Watched folder setting in Settings dialog - Auto-import on application startup Metadata Editing (BookDetails): - Edit button to enter edit mode - Editable fields for title, author, and description - Save/Cancel buttons for confirming or discarding changes - Description field added to database schema with migration Bug fix: - Fix deadlock in load_all_books() by adding get_tags_for_book_unlocked() internal method to avoid recursive mutex acquisition 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
  • 6e0cc311f2 Add accessibility improvements and update documentation Accessibility (Phase 4.2): - Add descriptive tooltips to all header bar buttons - Add title/author tooltips to book tiles for screen readers - Add tooltips to batch action bar buttons - Add tooltips to BookDetails and SettingsDialog buttons Documentation updates: - Update PLAN.md with Phase 4 completion status - Update README.md with implemented features summary - Update database_manager.md with new API methods and schema 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
  • 9120e72405 Add settings panel and file change detection Settings Panel (Phase 3.4): - SettingsDialog with tile size adjustment (80-300px) - Default import folder selection with file chooser - Settings persisted in SQLite via DatabaseManager - Live reload of shelf view when tile size changes File Change Detection (Phase 3.5): - DatabaseManager::get_all_book_files() for scanning - DatabaseManager::remove_books_by_ids() for batch removal - BookList::findMissingBooks() detects deleted files - BookList::removeMissingBooks() cleans up library - "Remove Missing Files" button in Settings dialog - Toast notifications for scan results 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
  • eeab8f50b9 Add tag management UI with rename, delete, and cleanup - Add TagManagerDialog for comprehensive tag management - Display all tags with usage counts (books using each tag) - Implement rename tag with automatic merge if target exists - Implement delete individual tags - Add "Clean Up Unused" button to remove orphan tags - Add DatabaseManager methods: get_all_tags(), rename_tag(), delete_tag(), delete_unused_tags() - Add Tags button to header bar for quick access 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
  • fc04955e9a Add batch operations for multi-book management - Switch BookShelf to MultiSelection for multi-select support - Enable rubberband selection in grid view - Add getSelectedBooks() and getSelectionCount() methods - Add signalSelectionChanged() for tracking selection state - Add batch action bar that appears when books are selected - Implement batch tag assignment via popover - Implement batch delete functionality - Add Select All / Clear selection buttons 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 14 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • bcbdff2d8c feat(packages): add monorepo support to package manager - Registry now supports 'path' field for packages in monorepos - Install function clones monorepo to cache, copies specific package - Update function handles monorepo packages by re-syncing from cache - Updated bundled registry to point to lumacs/packages monorepo This allows all official packages to be hosted in a single repository while still being installed individually. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 31fa1c8dbd feat(packages): add package manager and quick-win packages Package Manager (lua/core/): - package.lua: Core package loading, installation, registry support - package-commands.lua: M-x commands for package management - registry.json: Bundled package registry Quick-win Packages (lua/packages/): - goto-line: Jump to specific line (M-g g) - recentf: Track recently opened files (C-x C-r) - bookmarks: Named bookmarks and quick marks - visual-line: Soft word wrap mode The package manager supports: - Installing from git URLs - Loading from local directories - Registry-based short names - User packages.lua configuration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 2 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

1 lună în urmă

bernardo a împins spre main la bernardo/lumacs-packages

1 lună în urmă

bernardo a creat o ramură nouă main la bernardo/lumacs-packages

1 lună în urmă

bernardo a creat un repozitoriu bernardo/lumacs-packages

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 9883ee5180 fix(which-key): handle nil command in binding Fix nil reference error when binding.command is nil by providing a fallback value. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 7982163864 feat(packages): add projectile and company-mode packages Add two new Lua packages: projectile.lua - Project management and navigation: - Project root detection via markers (.git, Makefile, etc.) - Project file listing with caching - Recent projects tracking - Commands: projectile-find-file (C-c p f), projectile-switch-project (C-c p p), projectile-project-info (C-c p i), projectile-run-command, etc. company.lua - Text completion framework: - Multiple backends: buffer (words in buffer), words (common keywords), path - Echo area popup display with selection - Auto-completion option (disabled by default) - Commands: company-complete (M-Tab), company-mode toggle - Context-aware keybindings (C-n/C-p select candidates when active) Also updates: - LuaApi::call_idle_hooks() now calls company idle check - init.lua loads both new packages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • a3c7258d5a feat(packages): add idle hooks and extended echo area for which-key Add infrastructure for Lua packages to display content in an extended echo area (multi-line minibuffer) and react to idle time: Core additions (EditorCore): - set_echo_area_lines() / clear_echo_area_lines() for multi-line display - echo_area_lines() to get current lines - idle_time_ms() to check time since last user activity - notify_user_activity() to reset idle timer Lua API additions: - editor:set_echo_area(lines) - Set echo area content - editor:clear_echo_area() - Clear echo area - editor:echo_area_lines() - Get current lines - editor:idle_time_ms() - Get idle time in milliseconds - editor:notify_activity() - Reset idle timer - LuaApi::call_idle_hooks() - Called by UI during idle Rewritten which-key package: - Now uses idle_time_ms() to detect when user is waiting - Shows hints after 1 second delay (configurable) - Displays hints in extended echo area above minibuffer - Fully Lua-based, no C++ which-key code needed GTK/TUI changes: - Both frontends now render echo_area_lines above minibuffer - Both call Lua idle hooks during their idle callbacks 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 789d7553b7 feat(packages): add Lua package system with which-key, doom-modeline, and more Add a new lua/packages directory with several Emacs-inspired Lua packages: - which-key: Display available keybindings when a prefix key is pressed - Commands: which-key, describe-key (C-h k) - Shows hints for prefix keys like C-x, C-h, etc. - doom-modeline: Doom Emacs-style modeline customization - Face presets: doom_one, nord, dracula, gruvbox, solarized - Commands: doom-modeline-preset, doom-modeline-setup - smartparens: Auto-pairing of brackets, quotes, and delimiters - Auto-insert matching pairs - Skip closing delimiter when already present - Delete pairs together on backspace - rainbow-delimiters: Colorize nested delimiters by depth - Multiple color presets: default, pastel, neon, nord, dracula - Commands: rainbow-delimiters-mode, rainbow-preset - ido: Enhanced fuzzy completion utilities - Fuzzy matching with scoring - Commands: ido-switch-buffer, ido-execute-command Also exposes keybinding API to Lua: - editor:get_all_bindings() - Get all registered keybindings - editor:is_building_sequence() - Check if in multi-key sequence - editor:current_sequence() - Get current sequence string - editor:has_prefix_bindings() - Check for prefix bindings 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 4 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 4919669ae9 feat(lua): add Emacs-like Lua evaluation commands Add commands for evaluating Lua code interactively: - eval-last-sexp (C-x C-e): Evaluate Lua expression before point - eval-region: Evaluate Lua code in active region - eval-buffer: Evaluate entire buffer as Lua code Also adds helper functions for face/theme customization: - lumacs.eval_lua(code): Safely evaluate Lua code - lumacs.face(opts): Create FaceAttributes from table - lumacs.set_face(name, opts): Set face on active theme - lumacs.rgb(r,g,b) / lumacs.hex(str): Color constructors Expression parsing supports: - Single-line expressions - Multi-line expressions with balanced delimiters - Nested parentheses, braces, and brackets - String literal handling Example usage in *scratch* buffer: 1 + 2 -- C-x C-e => 3 lumacs.set_face("keyword", {foreground="#FF0000", weight="bold"}) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • fb20590fbd refactor(frontend): Phase 3 - extract shared MessageFormatter utility Create a shared MessageFormatter utility class for consistent message formatting across both GTK and TUI frontends: - collapse_multiline(): Show first line with count indicator - truncate_to_width(): Truncate with help hint suffix - format_for_echo_area(): Combined formatting for display Eliminates ~30 lines of duplicated message formatting code. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 303c69a28f refactor(frontend): Phase 2 - extract shared CursorBlinkController Create a shared CursorBlinkController utility class that encapsulates cursor blinking logic for both GTK and TUI frontends: - Eliminates ~40 lines of duplicated cursor blinking code - Consistent blink behavior across both frontends - Single source of truth for blink interval (500ms) and threshold (1000ms) - Cleaner, more maintainable frontend code 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 1506385f46 refactor(frontend): Phase 1 quick wins for frontend improvements - Fix GTK cache validation to check styles (prevents stale cache on theme change) - Improve GTK paned layout fallback (try parent size before hardcoded fallback) - Extract ViewportBounds helper in TUI to eliminate duplicated viewport calculation - Reduce code duplication in TUI init/resize/render 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • a8a332d9a8 feat(message-system): add message history navigation (Phase 5) Users can now cycle through recent messages using M-p (previous) and M-n (next) without switching to the *Messages* buffer. Features: - Message history stores last 50 messages (no duplicates) - Position indicator shows current position (e.g., "[3/10, M-n/M-p]") - History browsing mode prevents auto-clear of messages - Messages exit history mode automatically when new message arrives New commands: previous-message, next-message New keybindings: M-p, M-n 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 8 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 4ff0777db5 fix(tui): enable space key input and fix C++ syntax highlighting This commit fixes two critical TUI issues that prevented proper text editing and syntax highlighting functionality. Changes to TUI input handling (src/tui_editor.cpp): - Add special case handling for "Space" key in self-insert fallback - Previously only single-character keys (length == 1) were handled - Now explicitly checks for "Space" and converts to " " for insertion - This enables typing spaces in all major modes without explicit bindings Changes to C++ mode highlighting (lua/major_modes/c_cpp_mode.lua): - Fix escape_pattern function (removed corrupted character) - Replace regex-style string patterns with Lua pattern syntax - '"[^"\\]*(?:\\.[^"\\]*)*"' → '"[^"]*"' (simplified but functional) - Similar fix for single-quoted strings - Simplify number matching pattern - Replace combined keyword/type pattern matching with individual iteration - This fixes the non-working gmatch on alternation patterns - Now properly highlights keywords: if, for, while, class, etc. - Now properly highlights types: int, void, string, vector, etc. - Fix frontier pattern boundaries to include underscore (%W_ vs %W) Testing: ✓ All 32 tests pass ✓ Space key now works in TUI for all major modes ✓ C++ keywords, types, strings, comments, and numbers now highlight correctly ✓ Lua mode unaffected ✓ GTK frontend unaffected This makes the TUI fully usable for C++ development with proper syntax highlighting and normal text editing capabilities. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 5b825c2100 fix(tui): improve theme integration and fix compatibility issues This commit fixes critical TUI theme integration issues and ensures proper face name consistency between TUI and the theme system. Changes: - Fix sol::nil → sol::lua_nil in lua_api.cpp for sol2 v3.x compatibility - Fix face name inconsistency: "SearchMatch"/"SearchFail" → "isearch"/"isearch-fail" - Ensure TUI uses standard Emacs-style face names for theme consistency - Verify all themes define necessary TUI faces (isearch, isearch-fail, window-divider, mode-line, mode-line-inactive, minibuffer-prompt) These changes ensure: ✓ TUI works correctly with all theme definitions ✓ ISearch highlighting uses proper theme colors ✓ Window dividers render with correct styling ✓ Modelines display with appropriate theme colors ✓ All 32 tests pass ✓ GTK frontend remains unaffected ✓ Complete theme coverage for TUI elements Note: The TUI already has comprehensive feature support including: - Hardware cursor with blinking - Full keybinding support from defaults.hpp - Per-window modelines - Syntax highlighting with theme integration - ISearch with visual feedback - Window splitting and navigation - Minibuffer with completion candidates - Meta key sequences (Escape + key) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 2 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • f05e3a70c1 fix(main): trigger auto_activate_major_mode after cli file load
  • b7c3ec9e5b fix: resolve build errors and restore TUI functionality - GtkRenderer: Fix undeclared identifier 'main_drawing_area_' and unused variable errors. - TuiEditor: Restore missing method implementations (init, run, handle_editor_event) caused by previous file corruption. Re-implement hardware cursor support. - Docs: Update PLAN.md with regression fixes.
  • Vizualizați comparația pentru aceste 2 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 62709d8621 fix(core): resolve dangling reference in buffer loading Fixed a dangling reference error in BufferManager::load_file where a reference was bound to a temporary optional returned by buf->file_path(). Now properly storing the optional before access.
  • 11c960fcf5 fix(core): handle non-existent files gracefully Updated BufferManager::load_file to prevent crashes when checking file equivalence for non-existent paths. Added logic to create new buffers for non-existent files, allowing for file creation via opening. Extended Buffer class with set_file_path method.
  • 535d3d7bb0 fix(tui): ensure visible block cursor Restored software cursor drawing in TUI with forced A_REVERSE attribute. This ensures a highly visible block cursor is rendered on top of the character, complementing the hardware cursor and resolving visibility issues.
  • 41871776c8 fix(tui): restore hardware cursor and remove artifacts Replaced TUI software cursor emulation (inverted char) with proper hardware cursor tracking and placement. Uses curs_set(2) for high visibility. This resolves the 'shade of a cursor' issue and standardizes TUI behavior.
  • Vizualizați comparația pentru aceste 4 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • c74c0f295b fix(gtk): correct minibuffer cursor rendering Fixed the GTK minibuffer cursor to be a block cursor positioned correctly at the current editing index, instead of a line at the end of the text. Also ensured the character under the cursor is readable.
  • 24d017b21c feat(completion): enhance file path autocompletion Implemented robust file path completion in CompletionSystem. Features include tilde expansion (HOME), proper handling of absolute/relative paths, directory suffixing, and filtering of hidden files unless requested.
  • Vizualizați comparația pentru aceste 2 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • f77a196c6f fix(gtk): resolve modeline visibility and split crash Fixed modeline not rendering in GTK by explicitly calling render_modeline_for_window in the widget draw function. Fixed segmentation fault on window split by updating GtkRenderer to use the persistent main window widget for Pango context creation instead of transient DrawingAreas.

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 21a1dbc211 feat: persistent minibuffer output with *Messages* buffer Implemented a persistent *Messages* buffer to capture all output from the minibuffer, ensuring that transient messages are logged and accessible. This addresses the issue of command output not always being visible to the user, providing a complete history for review.
  • 5198c07ecf feat(core): implement *Messages* buffer for persistent logging Updated EditorCore::set_message to append all messages to a *Messages* buffer. This ensures that minibuffer output is preserved and can be reviewed by the user, addressing visibility issues with transient messages.
  • 59c5e9c977 fix(minibuffer): cursor not moving after tab completion, GTK crash Fixed minibuffer cursor not moving to end of autocompleted string after Tab by updating cursor_position_. Resolved GTK frontend crash (basic_string::substr) by adding bounds check for completion suffix extraction in GtkRenderer.
  • 2c6e725dda fix(renderer): resolve GTK crash and TUI cursor glitch Fixed GTK renderer crash by adding bounds check before completion substring extraction. Fixed TUI minibuffer cursor position by explicitly setting it after rendering content.
  • 0ac653930f feat(gtk): disable completion popover by default via config Disabled GTK completion popover by default through a Lua configuration flag (show_completion_popover=false). Updated GtkEditor to conditionally instantiate and show the popover based on this setting. This addresses a user request to temporarily disable the popover due to performance/usability concerns.
  • Vizualizați comparația pentru aceste 9 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 95f60df0c1 feat: Enhance theme system with comprehensive styling and new themes - Enhanced existing themes with all 25+ ThemeElement options and rich FaceAttributes - Added comprehensive typography support with font families, weights, and slants - Created 3 new popular themes: Catppuccin Mocha, Tokyo Night, and Ayu Dark - Updated theme descriptions in themes_init.lua for better user experience - All themes now use professional-grade styling comparable to modern editors 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
  • 11edbd4979 fix: Resolve theme system crashes and functionality issues - Fix Sol2 lambda binding for create_and_register_theme method * Added missing EditorCore& first parameter to prevent empty theme names - Add set-theme command to defaults.hpp as fundamental command - Fix active_theme property access in lua/themes/themes_init.lua * Changed editor.theme_manager.active_theme to :active_theme() function calls - Refactor themes from hardcoded C++ to individual Lua files in lua/themes/ - Remove old themes.lua file and C++ theme factory methods - All theme functionality now working: listing, switching, cycling, keybindings Resolves C-x t l crash and enables full theme management via M-x set-theme and C-x t keybinding sequences. Six themes available: default, dracula, everforest-dark, gruvbox-light, nord, solarized-dark. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
  • Vizualizați comparația pentru aceste 2 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • 0365159a11 Merge branch 'master' of ssh://git.bernardomagri.eu:10022/bernardo/Lumacs
  • 53788ee054 refactor: Embed fundamental-mode into C++ defaults - Removed 'lua/major_modes/fundamental_mode.lua' as fundamental-mode is already defined within the LUA_DEFAULTS string in src/defaults.hpp. - Removed the corresponding 'dofile' statement from init.lua. - This ensures fundamental-mode is always loaded by default as a fallback.
  • 9c5b59fc19 feat: Refactor major modes into separate Lua files - Extracted 'lua-mode' and 'fundamental-mode' definitions from init.lua into 'lua/major_modes/lua_mode.lua' and 'lua/major_modes/fundamental_mode.lua' respectively. - Updated init.lua to load these new mode files using 'dofile'. - This improves modularity and organization of major mode definitions.
  • Vizualizați comparația pentru aceste 3 consemnări »

1 lună în urmă

bernardo a împins spre master la bernardo/Lumacs

  • e2f5936eea Update 'documentation/ARCHITECTURE.md'

1 lună în urmă