Commit Graph
66 Commits
Author SHA1 Message Date
Martín Lucas Golini 3d4aea6df4 Reduce heap-allocations on possible hot-paths. 2026-09-06 21:02:58 -03:00
Martín Lucas Golini a22489fd58 Fix Android build. 2026-09-05 11:33:02 -03:00
Martín Lucas Golini 090e7c1288 Compilation fixes. 2026-09-03 20:29:57 -03:00
Martín Lucas Golini 6e467dbb59 Various general optimizations, inlined a bunch of functions, did a bunch of optimizations in UICodeEditor::drawMinimap, render times are about +10% faster for some common ecode escenarios. 2026-08-31 19:21:25 -03:00
Martín Lucas Golini 36200430aa Fix conflict discard and merge view copy commands
- add Discard actions for conflicted files and conflict groups
  - restore discarded conflicts from HEAD in both index and working tree
  - restrict regular discard actions to changed tracked files
  - preserve default editor commands when replacing an editor document
  - enable copying from the read-only merge-view side panels
  - cover conflict restoration and merge-side copying
  - document build parallelism and function-spacing conventions
2026-08-31 11:03:19 -03:00
Martín Lucas Golini 8e5d180a4d Optimize editor initialization and multi-file diff loading
- Share immutable built-in document commands, editor command tables, default keybindings, and syntax color scheme storage across editor instances. Preserve mutations through copy-on-write storage and explicit command-removal tracking.
  - Use ShortcutMap consistently with unordered lookup while retaining deterministic ordering where serialization or conflict resolution depends on it. Cache ambiguous syntax-extension checks and invalidate the cache when language definitions change.
  - Prepare Git commit-detail diffs and sub-line changes on worker threads with cancellation and stale-request protection. Release raw patch memory before UI construction and add regression coverage for prepared and cancelled diffs.
  - Add Diff Changed support and enable collapsible file headers for Diff HEAD, Diff Staged, and Diff Changes.
  - Update translations, compatibility call sites, tests, and the efsw dependency.
2026-08-30 17:35:50 -03:00
Martín Lucas Golini 3afcb3f2d2 Optimize bulk editor setup, deferred UI resources and Git plugin fixes
- Lazily compute document line hashes, avoid redundant multiline insertion
walks, and defer longest-line measurement for large or exceptionally long
text changes.

- Cache default code editor keybindings, reserve common command storage, and
create UIDiffView image viewers only when an image diff requires them.

- Keep cached screen positions coherent when descendants are queried before
dirty ancestors, and add regression coverage for ancestor movement.

- Relocate font-rendering golden images into the unit-test asset directory
and resolve image fixtures independently of the current working directory.

- Fix spurious status entries for files moved between directories. Preserve the suffix after Git's abbreviated brace notation when parsing renamed paths from numstat output. This prevents directory moves such as `bin/{ => unit_tests}/assets/...` from producing truncated synthetic untracked entries like `unit_tests`. Add regression coverage for staged files moved into a different directory.

- Git Plugin now remembers between sessions the uncommited commit message.
2026-08-30 01:05:24 -03:00
Martín Lucas Golini 0fa99ab9d2 Expand Git History actions and branch management
- Add SmartGit-inspired context actions to Git History commits, including checkout, merge, fast-forward merge, cherry-pick, revert, branch creation, tag creation, and copying commit IDs or complete messages.
  - Order commit actions into consistent operation, ref-creation, and clipboard groups. Hide the redundant Show in Git History action inside detached history tabs while retaining it in the source-control sidebar.
  - Add a Working Tree / Index context menu with status-aware Commit and Stage actions. Track staged and unstaged availability in the history model and keep it synchronized as repository status changes.
  - Extend the Git command wrapper with operations for creating branches at commits, creating and deleting tags, deleting remote branches, cherry-picking commits, and reverting commits.
  - Support deleting tags and remote branches from the Branches view. When deleting a local branch with an upstream, optionally delete its tracked remote branch as part of the operation.
  - Add confirmation and input dialogs for branch, tag, remote-deletion, and revert workflows. Disable history-changing commit actions while another Git operation is active.
2026-08-29 15:11:08 -03:00
Martín Lucas Golini b3d72b5acf Fixed the autocomplete crash, root cause: getDocumentSymbols() accessed mDocs from a worker thread while document lifecycle callbacks could concurrently modify the same unordered_set, corrupting its internal state.
Added a synthetic “Working Tree / Index” first row whenever the selected repository has local or staged changes.
Displays separate changed and staged counts.
Updates dynamically from normal status refreshes without reloading commit history.
Selecting it opens the shared details view in “Uncommitted changes” mode.
Shows tracked changes from HEAD through the working tree, plus untracked-file patches.
Supports both sidebar and detached History views.
The History shortcut focuses working changes when present, otherwise the newest commit.
Added the History button beside Refresh.
Added consistent 2dp spacing between the ref dropdown and both buttons.
Added translations for the new labels.
2026-08-29 03:12:27 -03:00
Martín Lucas Golini 61d9d3c7bc Improve Git History navigation and commit details
Add a detached Git Commit History tab with a traditional table layout, persistent column widths, commit focusing, and a splitter-based commit details pane.
Register the git-show-history command and expose “Show in Git History” from commit details and history context menus. Add History and Git Commit tab icons, localized titles, appropriate tooltips, and ref-aware
tab naming.
Share the commit-details layout and behavior between standalone commit tabs and detached History views. Move view creation, widget binding, state management, controls, and asynchronous changed-file loading into
CommitDetailsState.
Display complete commit metadata and messages, GitHub links, copyable commit SHAs, colored changed-file statistics, and multi-file diffs with global expand/collapse and unified/split controls.
Improve detached-history lifecycle behavior, selection and focus handling, stale-request protection, tooltip formatting, and column recalculation. Restore “Load older commits” by preserving pagination-node
semantics while asynchronous loading is in progress.
Fix expandable History rows so merge subjects and metadata render correctly without regressing generic UITreeView cells. Add recursive commit lookup for focusing nested history entries.
Add deferred tooltip-created notifications and configure History tooltips only after their widgets exist.
Preserve tokenizer-applied UITextView color ranges during layout recalculation when custom styling is enabled, preventing changed-file statistics from losing their colors after splitter resizing.
Add the required Codicons and translations, expose UIWidget pseudo-class queries, reuse cached tree-expander drawable sources, and use SmallVector for nested stylesheet property resolution.
2026-08-29 02:15:26 -03:00
Martín Lucas Golini ef962fc61f Improve Git History navigation and asynchronous UI safety
Add a History ref selector for HEAD, local branches, remote branches, and tags without requiring checkout. Reuse cached branch-model display strings to keep large ref lists efficient.
Make deferred main-thread callbacks lifetime-safe across ecode controllers and plugins. Initialize plugin dispatchers during UIReady and extend MainThreadLifetime to support delayed and tagged dispatch.
Fix expandable Git History rows, empty merge projections, and commit-description expansion. Display only the physical first line while collapsed and avoid duplicating it in the expanded body.
Add coverage for history ref handling and preserve stale-request guards during repository and revision changes.
Fix UIImageViewer dimension reporting for sprites by displaying the underlying texture dimensions.
The Git History interface remains a work in progress.
2026-08-28 18:52:04 -03:00
Martín Lucas Golini baaa0a62c0 Add a work-in-progress Git History view to the source-control panel.
Display bounded first-parent commit history with asynchronous loading, independent pagination, and lazily expandable merge commits. Propagate inherited exclusions through nested merges to avoid repeating already represented history.
Add custom compact history rows, loading/error/retry states, keyboard navigation, repository and history-generation guards, and lifecycle invalidation after history-changing operations.
Add a commit details tab with full commit metadata and message, changed-line totals, GitHub links when available, and a multi-file diff viewer with global collapse and unified/split controls.
Extend UIDiffView with multi-file view controls and register the required Codicons.
The Git History interface and visual design remain a work in progress.
Fix caret positioning inside shaped ligature clusters.
Add explicit closest-glyph and interpolated ligature caret-positioning modes while keeping interpolation as the default for general text geometry.
Use the original closest-glyph behavior for caret and IME positioning in UICodeEditor, UITextEdit, UITextInput, and UIConsole, preventing cursor positions from being synthesized inside ligature glyphs.
Add regression coverage for both positioning modes.
Optimize SyntaxTokenizer by returning tokenizer results in a SmallVector, avoiding heap allocations in common cases.
2026-08-28 14:43:05 -03:00
Martín Lucas Golini 66d22ea5bb Add integrated Git conflict resolution workflow
Introduce a three-pane UIMergeView with an editable shared result
document, conflict navigation and acceptance actions, live diff
highlighting, synchronized scrolling, and contextual pane labels.

Read conflict stages directly from Git's index, detect paused merge
operations, restore conflict sessions, and support resolving, staging,
recreating, continuing, committing, and aborting operations.

Add repository-aware conflict state handling, safe asynchronous
lifetimes, merge operation UI, configurable key modifiers, i18n
strings, and focused merge-view and Git conflict tests.
2026-08-27 22:18:58 -03:00
Martín Lucas Golini a182878837 ecode: add structured settings pages for plugins
- introduce reusable settings models, documents, and plugin settings pages
  - expose all registered plugin configuration options in the Settings panel
  - support groups, choices, editable values, lists, secrets, and JSON objects
  - stage plugin changes and persist them when the Settings window closes
  - preserve raw JSON access for advanced configuration
  - safely migrate legacy AI provider API keys
  - add translated plugin setting labels and descriptions
  - remove the obsolete plugin GUI configuration API
  - fix autocomplete signature documentation persistence
  - fix AI model catalog refresh interval loading
2026-08-26 01:37:28 -03:00
Martín Lucas Golini 864b2a9b3f Improve asynchronous filesystem event processing
- queue and batch filesystem model updates on the main thread
  - process directory-tree updates and worker-affine listeners asynchronously
  - coalesce adjacent modified events for the same path
  - preserve captured file metadata across delayed event delivery
  - add event, path, and thread-affinity filters for listener subscriptions
  - configure optimized per-plugin filesystem subscriptions
  - make listener removal wait for active callbacks safely
  - handle self-removal without deadlocking
  - support allocation-free matching of moved source paths
  - synchronize project directory-tree mutations with active searches
  - centralize diff-view button visibility around find/replace state
  - improve code editor wrap-content and scrollbar sizing
  - add queue, listener, and filesystem-model regression tests
2026-08-21 01:32:36 -03:00
Martín Lucas Golini 74d9fa660c ecode: add multi-file Git status operations
Enable multiple selection in the Git status tree and apply stage, unstage, discard, open, and diff actions to all applicable files.
Open selected diffs in a single multi-file diff view, including portable handling for untracked files, and group mutating operations by repository.
Make the commit dialog resizable, allow its text editor to grow with the window, and wrap commit messages by word.
2026-08-12 00:03:25 -03:00
Martín Lucas Golini 42108f442a Properly display untracked files diff view. 2026-04-24 19:36:30 -03:00
Martín Lucas Golini cfa4e548e9 Fix language health table not displaying correctly the text color (regression from the changes I made in breeze in current dev branch).
Pump plugins versions.
2026-02-28 00:28:24 -03:00
Martín Lucas Golini 15f9bc3fd8 Arrange correctly the elements in statusbar on some cases.
Add the option "Open URL" in the context menu when right clickin a URL.
2025-10-03 00:05:28 -03:00
Martín Lucas Golini bd278843e6 Update plugin versions.
Registered `.cts` extension as TypeScript.
2025-07-19 19:55:34 -03:00
Martín Lucas Golini da85af1246 Added C3 syntax highlighting and LSP support.
Refactored TextUndoStack, now uses std::variant and avoids heap allocating each command.
Fix possible crash in Process::readAll.
Fix SyntaxDefinition::setSymbols.
Some minor improvements for Odin and Ü syntax definitions.
Fix Git plugin silent configuration.
2025-04-04 01:48:39 -03:00
Martín Lucas Golini 80677554cf Fixed small and rare bug that prevented the scrollbars from being visible on the project view. 2025-03-30 20:59:24 -03:00
Martín Lucas Golini c4bd88461d Still more WIP 2025-01-03 22:01:16 -03:00
Martín Lucas Golini cf84fc7cff Save side panel tabs order. 2025-01-01 16:18:26 -03:00
Martín Lucas Golini 9ef654929c Display the stashes creation date. Also add a tooltip text for the stash in order to make easier to read the full name.
Fix in Process::create when parsing command arguments from string.
Fix text-align in UITooltip.
Fix in GitPlugin refreshing repositories during git lock files changes.
2024-10-25 00:10:30 -03:00
Martín Lucas Golini 8c898b68e2 Try fix new Sys functions in Haiku. 2024-09-28 14:26:37 -03:00
Martín Lucas Golini 6c94ea50d9 Fix bug in LSP Plugin when opening a same document in a split and then closing the original document, keybinds were lost after that. 2024-03-10 13:07:21 -03:00
Martín Lucas Golini d7d56783c6 Added "ft" locator for switch file type.
Added "select-all-words" command for documents (default keybind is ctrl/cmd+shift+d).
Manage git plugin tab visibility when folder is closed, reopened, etc.
2024-02-18 12:26:07 -03:00
Martín Lucas Golini b2fff897be Revert round() of UIDrawable position.
Re-subscribe on model change for Git tree view styling
2024-02-16 18:27:18 -03:00
Martín Lucas Golini b8d79fe493 Menu option for Git diff for staged files and repo.
Improved visually git file modified indicator.
Minor fix in auto complete.
Added Main Menu shortcut on welcome screen.
Added String::numberClean.
2024-02-15 19:42:24 -03:00
Martín Lucas Golini ec1a09e9a3 Highlight git modified files in file tree. 2024-02-14 01:40:05 -03:00
Martín Lucas Golini 9c2822e3d6 More work to get better i18n support. 2024-02-09 22:39:19 -03:00
Martín Lucas Golini e953aa3687 Add UIAbstractView SelectionKind to set if Multiple selection is enabled.
Git plugin minor changes.
Replace getTranslatorString in favor of i18n when possible.
UIAbstractTableView allow to start editing with keyboard shortcuts.
Some micro-optimizations.
2024-02-06 00:42:56 -03:00
Martín Lucas Golini f454695ae9 eepp:
Minor fix in C++ syntax highlight.
Improved TextDocument indentation guessing.
UIMessageBox with type TEXT_EDIT now focuses the text edit by default.
ecode:
Allow to merge branches.
If HEAD branch doesn't have origin, on commit + push it will push the new branch into origin.
2024-01-31 20:49:45 -03:00
Martín Lucas Golini 9a0368af1d Minor fixes. 2024-01-30 18:44:50 -03:00
Martín Lucas Golini f2324d8f40 Git plugin fixes. 2024-01-30 00:01:07 -03:00
Martín Lucas Golini d4e859be4b Git plugin: Added stash management.
UITreeView now selects items with right mouse click too.
2024-01-28 21:24:53 -03:00
Martín Lucas Golini eb825f668e Git plugin: Allow to silence the logs. Auto-Hide treeview scrollbars. Fix file diff when file is staged. 2024-01-28 14:00:12 -03:00
Martín Lucas Golini 1399d23770 Improved UICheckBox. Fixed a bug and simplified UIPluginManager. 2024-01-28 02:15:58 -03:00
Martín Lucas Golini 2ae84f7c9d More git plugin fixes. 2024-01-27 21:31:51 -03:00
Martín Lucas Golini f0d7e4644f GitPlugin: Allow to ammend last commit. Improved thread safety. Reduced some calls. 2024-01-27 13:00:07 -03:00
Martín Lucas Golini 76e2026ed7 Some minor changes in git plugin 2024-01-26 23:15:25 -03:00
Martín Lucas Golini dd4de3e7b2 Move git models to its own source files. 2024-01-26 00:48:05 -03:00
Martín Lucas Golini 80b6a4ea82 More git plugin fixes.
UITabWidget minor fix.
2024-01-25 23:35:47 -03:00
Martín Lucas Golini 71089a5298 More git plugin refactor and some fixes. 2024-01-25 01:45:46 -03:00
Martín Lucas Golini e5b23c4a87 More git plugin WIP. 2024-01-24 01:02:55 -03:00
Martín Lucas Golini 857fb48fc6 Added Git push. 2024-01-23 20:42:56 -03:00
Martín Lucas Golini bdd018feec More Git plugin WIP. Added commit. 2024-01-23 20:36:01 -03:00
Martín Lucas Golini d8f97e7258 Clean up. 2024-01-21 17:51:16 -03:00
Martín Lucas Golini acb79278ee Added branch rename.
Fixed warning.
Simplified branches data fetching.
2024-01-21 01:48:14 -03:00