Commit Graph
54 Commits
Author SHA1 Message Date
Xinhe WangandAlex Plãte f25b9fd9bf Fix uppercase keys in NERDTree 2025-10-02 17:12:23 +03:00
Xinhe WangandAlex Plãte 4e59af278b Avoid generating hints for another unfocused window 2025-09-10 11:36:04 +03:00
Xinhe WangandAlex Plãte 04273d005e Skip the tree nodes when generating hints to improve performance 2025-09-09 12:53:26 +03:00
Xinhe WangandAlex Plãte 463a9e7ceb Generate hints for visible components whose parent is not visible 2025-09-09 12:53:26 +03:00
Xinhe WangandAlex Plãte aab1999782 Do not preserve previous hints if impossible 2025-09-09 12:53:26 +03:00
Xinhe WangandAlex Plãte 733470f7b4 Allow repeated characters in hints 2025-09-09 12:53:26 +03:00
Xinhe WangandAlex Plãte 0d38ac8d6f Allow focusing components with hints 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte fd1f762bc2 Adjust the hint color to make it clearer 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte cfdc3b7dc3 Display only hints prefixed by the currently entered letters 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte eaaab34434 Bring clicked component highlighting back
The highlight will remain active for a fixed period of time.
2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 80f52d70c8 Encapsulate ShortcutDispatcher for use in NERDTree 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte ff13845b57 Use custom key listener instead of ListPopup to select hints
As a result, the user no longer needs to press ENTER to action.

Note that component highlighting is temporarily removed.
2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte b349bb74db Encapsulate hints generation 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 90cc7de761 Preserve previous hints if possible 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte d674d33735 Basic hint generation (permutation) 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte c4713ed89d Highlight the current selected component 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 337fc91261 Traverse the accessible tree instead to support Skia components 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte bd8dc5a74f Show a popup instead of a dialog to select the component 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 9ae2bfea8d Select elements to click 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 19ef7588f7 Create class Hint 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 248111bd1c Change ToggleOptionAction to DumbAwareToggleAction 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 76b0f13804 Use accessibleContext for checking clickable elements 2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte 7ac9ce78ca Toggle hints with ToggleOptionAction
However, this does not work in Dumb Mode
2025-09-05 16:26:03 +03:00
Xinhe WangandAlex Plãte b304905b35 Simplify KeyStrokeTrie.getData by delegating to getTrieNode 2025-09-05 13:14:34 +03:00
Xinhe WangandAlex Plãte 3d19696f3b Fix casting error in KeyStrokeTrie.getEntries
Return an empty sequence if the prefix node is not found in `KeyStrokeTrie`.
Passing a non-existent prefix previously would result in a casting error.
2025-09-05 13:14:34 +03:00
Xinhe WangandXinhe Wang 7f107fcc21 Remove unused NerdTree ProjectViewListener from plugin configuration
The ProjectViewListener was already removed in 175bae51
2025-09-02 15:06:01 +01:00
Xinhe WangandAlex Plãte 511da14b83 Support disabling extended NERDTree without restarting 2025-08-29 17:53:46 +03:00
Xinhe WangandAlex Plãte 636fe0a76f Make extended NERDTree a separate VimExtension 2025-08-29 17:53:46 +03:00
Xinhe WangandAlex Plãte 2b5342a935 Add support for ActivateNode in NERDTree Everywhere 2025-08-29 17:53:46 +03:00
Xinhe WangandAlex Plãte 758aaf276a Extend NERDTree support to Tree components other than Project 2025-08-29 17:53:46 +03:00
Xinhe WangandXinhe Wang b593d079c4 Correct the behavior of NERDTree-P to jump to the root node
It cannot be guaranteed that the tree has a single visible root.
2025-08-26 14:04:15 +01:00
Xinhe WangandXinhe Wang cfbb77f1db Fix(VIM-3981): make :set noNERDTree work
Please note that the ex-commands will still not be unregistered
2025-08-26 14:04:15 +01:00
Xinhe WangandXinhe Wang c6fc1046ee Extract helper functions in NerdTree.Util to the global scope
This is necessary because I would like to use `registerMappings` in
the constructor of `NerdDispatcher` where we have no access to
private methods of `NerdTree`.

Also, `callAction` is moved into `nerdtree.Mappings.Action` and
duplicated `addCommand` is removed.
2025-08-26 14:04:15 +01:00
Xinhe WangandXinhe Wang 007d636310 Clear NERDTree's KeyStroke buffer after <ESC> is pressed
The user may have pressed `g` accidentally and wish to perform an
operation which is not prefix by `g`.

This gives the user a way to clear the keys entered previously and
matches Vim's behavior.
2025-08-26 14:04:15 +01:00
Xinhe WangandXinhe Wang 8d2d3a21a3 Move update from NerdDispatcher to its abstract class
To make it reusable in the incoming extended NERDTree.

Note that this commit itself does not change any behavior.
2025-08-26 14:04:15 +01:00
Xinhe WangandXinhe Wang 175bae51a1 Initiate SpeedSearch right after / is pressed in NERDTree
What we can benefit from this approach:

- User perspective

  The SpeedSearch input will pop up immediately to indicate that
  `/` has been pressed, and search text can then be entered to
  filter the tree nodes.

- Codebase perspective

  The `waitForSearch` property can be removed from the Dispatcher
  objects, and we can get rid of `ToolWindowManagerListener` and
  the concurrency issue in it. This keeps code simple and readable.

  In my previous attempt to preserve the `waitForSearch` prop, the
  Dispatcher object had to be passed to each action impl as an
  argument.
2025-08-26 14:04:15 +01:00
Xinhe WangandAlex Plãte 629a0f7aab Indicate error when an unrecognized key sequence is entered in NERDTree 2025-08-22 14:16:31 +03:00
Xinhe WangandAlex Plãte 64033078b2 Use vimLogger instead in NerdTree 2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte ddff706ac8 Avoid NERDTree getting stuck by an invalid key sequence
This is not a complete fix, but a temporary measure to prevent it
from stopping responding.
2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte 2e55cc1af8 Fix(VIM-3437): correct the behavior of NERDTree-X 2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte 33f04869bf Fix(VIM-3985): correct the behavior of NERDTree-x 2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte aeaceca76e Extract navigation-related NERDTree actions to make them reusable
Code is simplified in this commit but the actual behavior remains unchanged
2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte e587161169 Refactor NerdAction
Removing `project` parameter from NerdAction.Code.action makes it
possible to extend NERDTree support to all tree components other
than the Project tool window.
2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte b3fd205148 Extract dispatcher logic from NerdTree into AbstractDispatcher 2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte 4558c3f5c8 Encapsulate KeyStrokeTrie in extension.nerdtree.Mappings
This avoids external manipulation of the KeyStroke set, resulting
in data inconsistency.
2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte 962abda86b Convert NerdDispatcher to a light service
Since there's no need to expose the dispatcher, we can safely
convert it to a light service as suggested by DevKit.

See https://plugins.jetbrains.com/docs/intellij/plugin-services.html#light-services
2025-07-29 10:43:43 +03:00
Xinhe WangandAlex Plãte 353603b546 Fix(VIM-3266): Set FileSaveCloseAction to OTHER_SELF_SYNCHRONIZED 2025-07-07 10:55:53 +03:00
Xinhe WangandAlex Plãte 2f7f0dcacb Fix(VIM-3044): correct the behavior of I in (linewise) Visual mode
For visual selections spanning multiple lines, keep caret position
if it's on the first line. Otherwise move the caret to the start of
the first selected line.
2025-07-07 10:55:30 +03:00
Xinhe WangandAlex Plãte af9023af4b Rename insertBeforeCursor and insertAfterCursor helpers
The terminology used in IntelliJ is "caret".
2025-07-07 10:55:30 +03:00
Xinhe WangandAlex Plãte c393c902b2 Fix(VIM-2375): do not save file with ZQ
ZQ is defined to `Quit without checking for changes (same as ":q!").`
2025-07-04 14:26:56 +03:00
Xinhe WangandAlex Plãte c355cb7ed7 Make VimChangeGroup::changeCaseMotion not accept non-Motion argument
Error is logged if `ChangeCaseMotion` actions receive non-`Motion` args
2025-07-03 17:25:38 +03:00
Xinhe WangandAlex Plãte 0803a1c195 Fix(VIM-2413): correct the range of line-wise case change commands
The start of the range is the leftmost non-whitespace character
OR the current position, whichever is closer to the left.
2025-07-03 17:25:38 +03:00
Xinhe WangandAlex Plãte 5208412b46 Refine Argument.Motion::isLineWiseMotion and VimMotionGroupBase::getMotionRange
This does not change any actual behavior.
2025-07-03 17:25:38 +03:00
Xinhe WangandAlex Plãte 2377408028 Fix(VIM-2142): support gU and gu in VISUAL mode
Note that this implementation assumes that the 'gU' / 'gu' command in
visual mode is equivalent to 'U' / 'u'. While 'v_gU' and 'v_gu' are not
explicitly documented in Vim help, we treat these commands as identical
based on observed behavior, without examining Vim's source code.
2025-07-02 18:56:29 +03:00