Git Product home page Git Product logo

actionable's Introduction

IntelliJ Platform Actionable Plugin - Documentation

What Is Actionable?

Actionable is a plugin for all the IntelliJ-Based IDEs that adds many extra actions, which makes it easier to interact with the IDE.

It provides you simpler ways to do repetitive tasks as well as doing interesting things!

Enough here, let’s see the plugin in action! Getting Started

What's New In v4?

Along with all refactorings, cleanup and documentation changes, I decided to add language-specific actions that help you do interesting things with your favorite language.

Version 3 vs 4

Prior to v4 (up to v3.20.x), the plugin was used to provide a wide compatibility range. But as of v4, the compatibility range would be less than it was in v3 and before. This is because of providing better quality.

Test Latest Features ASAP

Want to test the latest features before they officially get released? Simply use the new action Download And Install Nightly Build !!! (v4.1.0 onwards) Or, checkout releases page for nightly builds.

How To Help?

  • Feel free to open any feature request to help me add more features to this plugin. (Issue Tracker)
  • Report every bug or inconvenience you feel. (Issue Tracker)
  • All the PRs are welcomed!

actionable's People

Contributors

jasongmitter avatar mohammadmd1383 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

actionable's Issues

[BUG]:

null

com.intellij.diagnostic.PluginException: ir.mmd.intellijDev.Actionable.selection.UnselectFirstSelectionAction PluginClassLoader(plugin=PluginDescriptor(name=Actionable, id=ir.mmd.intellijDev.Actionable, descriptorPath=plugin.xml, path=~/Library/Application Support/JetBrains/GoLand2022.1/plugins/Actionable, version=3.10.1, package=null, isBundled=false), packagePrefix=null, instanceId=103, state=active)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:909)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.instantiate(ActionManagerImpl.java:201)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:186)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:523)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:512)
	at com.intellij.openapi.actionSystem.DefaultActionGroup.unStub(DefaultActionGroup.java:409)
	at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:365)
	at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:343)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.doGetChildren(ActionUpdater.java:663)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$new$1(ActionUpdater.java:113)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.callAction(ActionUpdater.java:176)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$new$2(ActionUpdater.java:113)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$getGroupChildren$21(ActionUpdater.java:464)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.getGroupChildren(ActionUpdater.java:463)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.iterateGroupChildren(ActionUpdater.java:608)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.expandGroupChild(ActionUpdater.java:496)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$doExpandActionGroup$20(ActionUpdater.java:457)
	at com.intellij.util.containers.ContainerUtil.concat(ContainerUtil.java:1400)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.doExpandActionGroup(ActionUpdater.java:457)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.expandActionGroup(ActionUpdater.java:260)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$expandActionGroupAsync$12(ActionUpdater.java:321)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$expandActionGroupAsync$13(ActionUpdater.java:339)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$tryRunReadActionAndCancelBeforeWrite$17(ActionUpdater.java:371)
	at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:158)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.tryRunReadActionAndCancelBeforeWrite(ActionUpdater.java:367)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$expandActionGroupAsync$14(ActionUpdater.java:339)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:189)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:176)
	at com.intellij.openapi.progress.util.BackgroundTaskUtil.runUnderDisposeAwareIndicator(BackgroundTaskUtil.java:365)
	at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$expandActionGroupAsync$15(ActionUpdater.java:338)
	at com.intellij.util.concurrency.BoundedTaskExecutor.doRun(BoundedTaskExecutor.java:241)
	at com.intellij.util.concurrency.BoundedTaskExecutor.access$200(BoundedTaskExecutor.java:31)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.execute(BoundedTaskExecutor.java:214)
	at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:212)
	at com.intellij.util.concurrency.BoundedTaskExecutor$1.run(BoundedTaskExecutor.java:203)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665)
	at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: ir.mmd.intellijDev.Actionable.selection.UnselectFirstSelectionAction PluginClassLoader(plugin=PluginDescriptor(name=Actionable, id=ir.mmd.intellijDev.Actionable, descriptorPath=plugin.xml, path=~/Library/Application Support/JetBrains/GoLand2022.1/plugins/Actionable, version=3.10.1, package=null, isBundled=false), packagePrefix=null, instanceId=103, state=active)
	at com.intellij.serviceContainer.ComponentManagerImplKt.doLoadClass(ComponentManagerImpl.kt:1469)
	at com.intellij.serviceContainer.ComponentManagerImplKt.access$doLoadClass(ComponentManagerImpl.kt:1)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:901)
	... 48 more

BUG: 3.16 macro error

Opened the new macro settings on a fresh install:

java.lang.NullPointerException: Cannot invoke "String.isEmpty()" because "segment" is null at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:224) at java.base/java.nio.file.Path.of(Path.java:147) at java.base/java.nio.file.Paths.get(Paths.java:69) at ir.mmd.intellijDev.Actionable.text.macro.settings.UI$1.documentChanged(UI.java:63) at com.intellij.openapi.editor.impl.DocumentImpl.lambda$changedUpdate$2(DocumentImpl.java:922) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeNonCancelableSection$3(CoreProgressManager.java:224) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:664) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:620) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$computeInNonCancelableSection$4(CoreProgressManager.java:232) at com.intellij.openapi.progress.Cancellation.computeInNonCancelableSection(Cancellation.java:99) at com.intellij.openapi.progress.impl.CoreProgressManager.computeInNonCancelableSection(CoreProgressManager.java:232) at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:223) at com.intellij.openapi.editor.impl.DocumentImpl.changedUpdate(DocumentImpl.java:919) at com.intellij.openapi.editor.impl.DocumentImpl.updateText(DocumentImpl.java:823) at com.intellij.openapi.editor.impl.DocumentImpl.insertString(DocumentImpl.java:555) at com.intellij.openapi.editor.EditorModificationUtilEx.insertStringAtCaretNoScrolling(EditorModificationUtilEx.java:79) at com.intellij.openapi.editor.EditorModificationUtilEx.insertStringAtCaret(EditorModificationUtilEx.java:55) at com.intellij.openapi.editor.EditorModificationUtilEx.insertStringAtCaret(EditorModificationUtilEx.java:47) at com.intellij.openapi.editor.impl.EditorCopyPasteHelperImpl.insertStringAtCaret(EditorCopyPasteHelperImpl.java:213) at com.intellij.openapi.editor.impl.EditorCopyPasteHelperImpl.lambda$pasteTransferable$1(EditorCopyPasteHelperImpl.java:143) at com.intellij.openapi.editor.impl.CaretModelImpl.lambda$runForEachCaret$3(CaretModelImpl.java:310) at com.intellij.openapi.editor.impl.CaretModelImpl.doWithCaretMerging(CaretModelImpl.java:419) at com.intellij.openapi.editor.impl.CaretModelImpl.runForEachCaret(CaretModelImpl.java:319) at com.intellij.openapi.editor.impl.CaretModelImpl.runForEachCaret(CaretModelImpl.java:296) at com.intellij.openapi.editor.impl.EditorCopyPasteHelperImpl.pasteTransferable(EditorCopyPasteHelperImpl.java:141) at com.intellij.openapi.editor.actions.PasteAction$Handler.executeWriteAction(PasteAction.java:28) at com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler$1.run(EditorWriteActionHandler.java:56) at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:955) at com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler.doExecute(EditorWriteActionHandler.java:70) at com.intellij.openapi.editor.actions.BasePasteHandler.doExecute(BasePasteHandler.java:44) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$4(EditorActionHandler.java:199) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:89) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:198) at com.intellij.codeInsight.editorActions.PasteHandler.execute(PasteHandler.java:86) at com.intellij.codeInsight.editorActions.PasteHandler.doExecute(PasteHandler.java:57) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$4(EditorActionHandler.java:199) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:89) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:198) at com.intellij.codeInsight.editorActions.LanguageConsolePasteHandler.doExecute(LanguageConsolePasteHandler.kt:24) at com.intellij.openapi.editor.actionSystem.DynamicEditorActionHandler.doExecute(DynamicEditorActionHandler.java:63) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.lambda$execute$4(EditorActionHandler.java:199) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.doIfEnabled(EditorActionHandler.java:89) at com.intellij.openapi.editor.actionSystem.EditorActionHandler.execute(EditorActionHandler.java:198) at com.intellij.openapi.editor.actionSystem.EditorAction.lambda$actionPerformed$0(EditorAction.java:93) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:219) at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:174) at com.intellij.openapi.editor.actionSystem.EditorAction.actionPerformed(EditorAction.java:102) at com.intellij.openapi.editor.impl.EditorImpl$MyEditable.executeAction(EditorImpl.java:3353) at com.intellij.openapi.editor.impl.EditorImpl$MyEditable.performPaste(EditorImpl.java:3326) at com.intellij.ide.actions.PasteAction.actionPerformed(PasteAction.java:35) at com.intellij.openapi.actionSystem.ex.ActionUtil.doPerformActionOrShowPopup(ActionUtil.java:323) at com.intellij.openapi.actionSystem.ex.ActionUtil.lambda$performActionDumbAwareWithCallbacks$4(ActionUtil.java:302) at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:346) at com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAwareWithCallbacks(ActionUtil.java:302) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$performAction$5(ActionMenuItem.java:296) at com.intellij.openapi.wm.impl.FocusManagerImpl.runOnOwnContext(FocusManagerImpl.java:226) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.performAction(ActionMenuItem.java:289) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$new$0(ActionMenuItem.java:64) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.lambda$fireActionPerformed$4(ActionMenuItem.java:111) at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105) at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94) at com.intellij.openapi.actionSystem.impl.ActionMenuItem.fireActionPerformed(ActionMenuItem.java:111) at com.intellij.ui.plaf.beg.BegMenuItemUI.doClick(BegMenuItemUI.java:526) at com.intellij.ui.plaf.beg.BegMenuItemUI$MyMouseInputHandler.mouseReleased(BegMenuItemUI.java:558) at java.desktop/java.awt.Component.processMouseEvent(Component.java:6648) at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3392) at java.desktop/java.awt.Component.processEvent(Component.java:6413) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5022) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854) at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948) at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575) at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2802) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4854) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:781) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:730) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:724) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:754) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:752) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:751) at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:909) at com.intellij.ide.IdeEventQueue.dispatchMouseEvent(IdeEventQueue.java:831) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:753) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$5(IdeEventQueue.java:437) at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:772) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:436) at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105) at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:615) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:434) at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:813) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:480) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121) at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) at java.base/java.security.AccessController.doPrivileged(AccessController.java:318) at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) at java.desktop/java.awt.Dialog.show(Dialog.java:1080) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:743) at com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:467) at com.intellij.openapi.ui.DialogWrapper.doShow(DialogWrapper.java:1676) at com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1634) at com.intellij.ide.actions.ShowSettingsUtilImpl.showSettingsDialog(ShowSettingsUtilImpl.java:90) at com.intellij.ide.actions.ShowSettingsAction.perform(ShowSettingsAction.java:60) at com.intellij.ide.actions.ShowSettingsAction.actionPerformed(ShowSettingsAction.java:47) at com.intellij.openapi.actionSystem.ex.ActionUtil.doPerformActionOrShowPopup(ActionUtil.java:323) at com.intellij.openapi.keymap.impl.ActionProcessor.performAction(ActionProcessor.java:47) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher$1.performAction(IdeKeyEventDispatcher.java:584) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.lambda$doPerformActionInner$9(IdeKeyEventDispatcher.java:706) at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:105) at com.intellij.openapi.application.TransactionGuardImpl.performUserActivity(TransactionGuardImpl.java:94) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.lambda$doPerformActionInner$10(IdeKeyEventDispatcher.java:706) at com.intellij.openapi.actionSystem.ex.ActionUtil.performDumbAwareWithCallbacks(ActionUtil.java:346) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.doPerformActionInner(IdeKeyEventDispatcher.java:703) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:647) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:595) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processActionOrWaitSecondStroke(IdeKeyEventDispatcher.java:478) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.inInitState(IdeKeyEventDispatcher.java:467) at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:225) at com.intellij.ide.IdeEventQueue.dispatchKeyEvent(IdeEventQueue.java:815) at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:750) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$5(IdeEventQueue.java:437) at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:772) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:436) at com.intellij.openapi.application.TransactionGuardImpl.performActivity(TransactionGuardImpl.java:113) at com.intellij.ide.IdeEventQueue.performActivity(IdeEventQueue.java:615) at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:434) at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:813) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:480) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)

Adding a easy way to copy string and var name

Hi i have an idea for a useful tool that if you right click in a var name or method name etc it will be copied automatically.. This is very useful when i have a long name for my variable and it will save a lot of my time😁

Add actions Delete/Сut/Copy/Select Params

| - caret
For example Delete:
func DownloadFile(filepa|th string, url string) (err error) {
to
func DownloadFile(|, url string) (err error) {

x := a + b + ( c |+ (k+z+m) ) + v
to
x := a + b + ( | ) + v

a := "asdasd| asdasd asda asd 'asd'dasdad"
to
a := "|"

k = zzz + as|sd(sd)[0].Param.fn('asd').Param["asd"+sds+'asd'] + kkk
to
k = zzz + | + kkk

It will be very useful

Feature Request: Duplicate Line or Selection for Carets

Feature Request: Sublime Text styled macros.

Will this have sublime text macro capabilities where it can write text based on regex expressions or # of characters written? Example:


|

-
a|
-
--
ad|
--
<snippet>
  <content><![CDATA[
${1/./-/g}
${1:}
${1/./-/g}
]]></content>
  <tabTrigger>aaa</tabTrigger>
</snippet>

Feature Request: Duplicate Line or Selection for Carets (with Dialog input instead of clipboard)

Relates to #37 and #19.

Potentially helpful links:

Instead of using Clipboard on action, open up a multi line text box for direct input and using the content of the popup box as the reference.

It's convenient to pop up an input box popup because of how people's minds work. They usually want to execute the action before typing and copying their content into the clipboard first.

Say you have this:

<Route path='/products' component={Products} />

Key: [] selection bounds | caret.

<Route path='/[products]|' component={[Products]|} />

Execute action, multiline input box comes up with OK and Cancel button.

Type in:

home
products
about
careers

Press OK

Results: Key: | caret.

<Route path='/home|' component={Home|} />
<Route path='/products|' component={Products|} />
<Route path='/about|' component={About|} />
<Route path='/careers|' component={Careers|} />

Note: #37 implements a settings toggle (that can be bound to keybind and toolbar) that will decide if this will paste normally or preserve case for all Actionable commands. Preserving case won't be enabled by default.

Without preserving case toggled ON, the result would be:

home
PRODUCTS
about
Careers
<Route path='/home|' component={home|} />
<Route path='/PRODUCTS|' component={PRODUCTS|} />
<Route path='/about|' component={about|} />
<Route path='/Careers|' component={Careers|} />

Feature Request: Keybind to get to keybinds..

As of the latest version, IntelliJ has stealth removed the ability to bind to the keymap configuration screen. You can keybind to the keybind selector context menu, but not to the settings page. It would be nice to restore this functionality.

Here's a link to the settings window: jetbrains://idea/settings?name=Keymap

Feature Request: Tweak Select literal element.

Select literal element under cursor selects quote characters on first keypress, then on second press selects contents within the quotes.

It would be nice to first select the content between the quotes on first keypress, then include quotes on second keypress.

Thanks!

Combine other select quote functions into one keybindable function.

Is it possible to combine all of this into the one keybind "Select enclosing typing pairs"?

So the rules would be:

  • If the PSI "elementType" equals "PLAIN_TEXT" or "SCRIPTING" it would execute the plain text search. If it is NOT this, then run the "Select literal element" as normal.
  • For the plain text search, it would determine the quote to select between by the nearest ", ', or ` outside of the current selection (or closest symbol if nothing is selected)

This would get rid of the 3 extra key binds. Or we can keep the new keybinds in there for people who need separate keybinds. However personally I'd rather just have one keybind that does all of this based on the conditions listed above.

Feature Request - Move Cursor to next Matching PSI Element (+ with selection)

Say I have this: Key | is caret

const obj = {
  '|': '',
  '': '',
  '': '',
  '': '',
  '': '',
}

And I want to quickly fill out each string between ''. Currently there is no efficient way to move the cursor onto the next string element.

const obj = {
  '': '|',
  '': '',
  '': '',
  '': '',
  '': '',
}
const obj = {
  '': '',
  '|': '',
  '': '',
  '': '',
  '': '',
}
const obj = {
  '': '',
  '': '|',
  '': '',
  '': '',
  '': '',
}

(and so forth)

image

So if your cursor is on PsiElement(JS:STRING_LITERAL) and you execute the command, your cursor will jump to the next PsiElement(JS:STRING_LITERAL).

In theory, this will jump the cursor between each empty ''. Right?

In addition, it would be cool to select next matching psi element as well.

const obj = {
  '|text': 'more',
  'text': 'more'

Execute Move Cursor to Next Matching PSI Element With Selection:

const obj = {
  '[text]|': 'more',
  'text': 'more'

Execute Move Cursor to Next Matching PSI Element With Selection:

const obj = {
  '[text]': '[more]|',
  'text': 'more'

Execute Move Cursor to Next Matching PSI Element With Selection:

const obj = {
  '[text]': '[more]',
  '[text]|': 'more'

Note: I notice that your cursor's PSI element is set to the new element when the cursor has changed position, so it would have to remember what was previously selected or else it will keep re-sampling new PSI elements each time it's selected something. You might need to have one command that "sets" the PSI element, then the Action would move/select based on what was "set".

If this is too complex, you could always just implement a "Move to next empty edit location" function.

Move up tree action

for instance when you are in an xml document by moving up the tree you will actually move the caret to parent tag

[BUG]: PluginException ir.mmd.intellijDev.Actionable.selection.UnselectFirstSelectionAction

I get this when I launch a project in intellij and immediately bring up the search anywhere bar:

com.intellij.diagnostic.PluginException: ir.mmd.intellijDev.Actionable.selection.UnselectFirstSelectionAction PluginClassLoader(plugin=PluginDescriptor(name=Actionable, id=ir.mmd.intellijDev.Actionable, descriptorPath=plugin.xml, path=~\AppData\Roaming\JetBrains\IntelliJIdea2022.1\plugins\Actionable, version=3.10.1, package=null, isBundled=false), packagePrefix=null, instanceId=153, state=active) at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:909) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.instantiate(ActionManagerImpl.java:201) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.convertStub(ActionManagerImpl.java:186) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getActionImpl(ActionManagerImpl.java:523) at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.getAction(ActionManagerImpl.java:512) at com.intellij.openapi.actionSystem.DefaultActionGroup.unStub(DefaultActionGroup.java:409) at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:365) at com.intellij.openapi.actionSystem.DefaultActionGroup.getChildren(DefaultActionGroup.java:343) at com.intellij.openapi.actionSystem.impl.ActionUpdater.doGetChildren(ActionUpdater.java:663) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$new$1(ActionUpdater.java:113) at com.intellij.openapi.actionSystem.impl.ActionUpdater.callAction(ActionUpdater.java:176) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$new$2(ActionUpdater.java:113) at com.intellij.openapi.actionSystem.impl.ActionUpdater.lambda$getGroupChildren$21(ActionUpdater.java:464) at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705) at com.intellij.openapi.actionSystem.impl.ActionUpdater.getGroupChildren(ActionUpdater.java:463) at com.intellij.openapi.actionSystem.impl.ActionUpdater$UpdateSessionImpl.children(ActionUpdater.java:746) at com.intellij.ide.util.gotoByName.GotoActionModel.lambda$collectActions$1(GotoActionModel.java:368) at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.insideReadAction(NonBlockingReadActionImpl.java:536) at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.lambda$attemptComputation$3(NonBlockingReadActionImpl.java:501) at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1152) at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runInReadActionWithWriteActionPriority$0(ProgressIndicatorUtils.java:75) at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runActionAndCancelBeforeWrite(ProgressIndicatorUtils.java:158) at com.intellij.openapi.progress.util.ProgressIndicatorUtils.lambda$runWithWriteActionPriority$1(ProgressIndicatorUtils.java:115) at com.intellij.openapi.progress.ProgressManager.lambda$runProcess$0(ProgressManager.java:58) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:189) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:176) at com.intellij.openapi.progress.ProgressManager.runProcess(ProgressManager.java:58) at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runWithWriteActionPriority(ProgressIndicatorUtils.java:112) at com.intellij.openapi.progress.util.ProgressIndicatorUtils.runInReadActionWithWriteActionPriority(ProgressIndicatorUtils.java:75) at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.attemptComputation(NonBlockingReadActionImpl.java:501) at com.intellij.openapi.application.impl.NonBlockingReadActionImpl$Submission.executeSynchronously(NonBlockingReadActionImpl.java:428) at com.intellij.openapi.application.impl.NonBlockingReadActionImpl.executeSynchronously(NonBlockingReadActionImpl.java:186) at com.intellij.ide.util.gotoByName.GotoActionModel.collectActions(GotoActionModel.java:375) at com.intellij.ide.util.gotoByName.GotoActionModel.collectActions(GotoActionModel.java:387) at com.intellij.ide.util.gotoByName.GotoActionModel.collectActions(GotoActionModel.java:387) at com.intellij.ide.util.gotoByName.GotoActionModel.collectActions(GotoActionModel.java:387) at com.intellij.ide.util.gotoByName.GotoActionModel.buildGroupMappings(GotoActionModel.java:108) at com.intellij.ide.util.gotoByName.GotoActionItemProvider.filterElements(GotoActionItemProvider.java:91) at com.intellij.ide.actions.searcheverywhere.ActionSearchEverywhereContributor.fetchWeightedElements(ActionSearchEverywhereContributor.java:97) at com.intellij.ide.actions.searcheverywhere.MixedResultsSearcher$ContributorSearchTask.run(MixedResultsSearcher.java:178) at com.intellij.util.ConcurrencyUtil.runUnderThreadName(ConcurrencyUtil.java:212) at com.intellij.util.ConcurrencyUtil.lambda$underThreadNameRunnable$3(ConcurrencyUtil.java:200) at com.intellij.openapi.application.impl.ApplicationImpl$1.run(ApplicationImpl.java:295) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:668) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:665) at java.base/java.security.AccessController.doPrivileged(Native Method) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:665) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.ClassNotFoundException: ir.mmd.intellijDev.Actionable.selection.UnselectFirstSelectionAction PluginClassLoader(plugin=PluginDescriptor(name=Actionable, id=ir.mmd.intellijDev.Actionable, descriptorPath=plugin.xml, path=~\AppData\Roaming\JetBrains\IntelliJIdea2022.1\plugins\Actionable, version=3.10.1, package=null, isBundled=false), packagePrefix=null, instanceId=153, state=active) at com.intellij.serviceContainer.ComponentManagerImplKt.doLoadClass(ComponentManagerImpl.kt:1469) at com.intellij.serviceContainer.ComponentManagerImplKt.access$doLoadClass(ComponentManagerImpl.kt:1) at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClass(ComponentManagerImpl.kt:901) ... 56 more

[BUG]: Startup of plugin throws exception

null

java.lang.Throwable
	at com.intellij.diagnostic.LoadingState.logStateError(LoadingState.java:53)
	at com.intellij.diagnostic.LoadingState.checkOccurred(LoadingState.java:49)
	at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.(ActionManagerImpl.java:139)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at com.intellij.serviceContainer.ConstructorInjectionKt.instantiateUsingPicoContainer(constructorInjection.kt:47)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClassWithConstructorInjection(ComponentManagerImpl.kt:877)
	at com.intellij.serviceContainer.ServiceComponentAdapter.createAndInitialize(ServiceComponentAdapter.kt:48)
	at com.intellij.serviceContainer.ServiceComponentAdapter.access$createAndInitialize(ServiceComponentAdapter.kt:12)
	at com.intellij.serviceContainer.ServiceComponentAdapter$doCreateInstance$1.run(ServiceComponentAdapter.kt:42)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:223)
	at com.intellij.serviceContainer.ServiceComponentAdapter.doCreateInstance(ServiceComponentAdapter.kt:41)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstanceUncached(BaseComponentAdapter.kt:113)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance(BaseComponentAdapter.kt:67)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance$default(BaseComponentAdapter.kt:60)
	at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:590)
	at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:573)
	at com.intellij.openapi.client.ClientAwareComponentManager.getFromSelfOrCurrentSession(ClientAwareComponentManager.kt:37)
	at com.intellij.openapi.client.ClientAwareComponentManager.getService(ClientAwareComponentManager.kt:22)
	at com.intellij.openapi.actionSystem.ActionManager.getInstance(ActionManager.java:30)
	at ir.mmd.intellijDev.Actionable.app.Startup.initComponent(Unknown Source)
	at com.intellij.serviceContainer.MyComponentAdapter.doCreateInstance(MyComponentAdapter.kt:44)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstanceUncached(BaseComponentAdapter.kt:113)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance(BaseComponentAdapter.kt:67)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance$default(BaseComponentAdapter.kt:60)
	at com.intellij.serviceContainer.ComponentManagerImpl.createComponents(ComponentManagerImpl.kt:407)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$loadComponents$5(ApplicationImpl.java:369)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:183)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:705)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:647)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:63)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:170)
	at com.intellij.openapi.application.impl.ApplicationImpl.loadComponents(ApplicationImpl.java:369)
	at com.intellij.idea.ApplicationLoader$startApp$loadComponentInEdtFuture$1.run(ApplicationLoader.kt:136)
	at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1736)
	at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:214)
	at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:21)
	at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:196)
	at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:794)
	at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:350)
	at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:84)
	at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:133)
	at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:46)
	at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:189)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
	at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:407)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

Feature Request - Paste and convert to case

Another GREAT feature of Missing in Actions. Reference links at bottom.

So there would be a toggle you could check/uncheck similar to your match case select next occurrence functionality. It would guess the casing of what you're pasting over, and if it doesn't match the current line casing, it converts it into it.

This would be a cool feature and would also be great for multiple caret replace. Also would be cool to have work with the Duplicate and Paste action when this is toggled on.

Key:

  • [] Selection bounds
  • | Caret

Clipboard:

APascalCaseString
aCamelCaseString
ALLUPPERCASESTRING

Code:

[lowertextfunction]|();
[UPPERCASEFUNCTION]|();
[PascalCaseFunction]|();

Execute Action Results:

apascalcasestring();
ACAMELCASESTRING();
Alluppercasestring(); <- if you want to try to guess words, then this might be AllUppercaseString();

Case #2: One clipboard on top of multiple selections:

Clipboard:

ALLUPPERCASESTRING

Code:

[lowertextfunction]|();
[UPPERCASEFUNCTION]|();
[PascalCaseFunction]|();

Execute Action Results:

alluppercasestring();
ALLUPPERCASESTRING();
Alluppercasestring(); <- if you want to try to guess words, then this might be AllUppercaseString();

References:

Complete Documentation

@Documentation(
title = "Cut Element at Caret",
description = "Cuts the psi element under the caret",
example = """
psi elements are defined by the language parser.
for instance, given the following statement:
```java
String a = "some string literal";
```
we will have these psi elements:
```
String
a
=
"some string literal"
;
```
"""
)
class CutElementAtCaret : CaretEditingAction() {
context(LazyEventContext)
override fun perform(caret: Caret) = copyElementAtCaret(true)
}

Here is a sample of how to document actions.
The @documentation annotation must be used exactly like above

some tips about it:

  • example string parameter must be triple quoted
  • example parameter must be a multi-line string
  • other parameters must be single quoted
  • all parameters must be specified

In the end you should execute docgen.py in project root

Utilize Unselect Occurrence or create a new method for undo

Also I noticed that your version of "Add Selection to next occurrence" doesn't work properly with native "Unselect Occurrence". It deselects from top down instead of a soft "undo". I wonder if there is a way to remedy this without having to basically write your own versions of native functionality?

Feature Request - Replace carets (refactor dialog box) and convert to case

Similar to #37, this is something I do all the time, but never think twice that there should be a better way of doing it. Basically it sums down to this-- As developers, sometimes the fastest way to add new functionality is to paste or duplicate other code and tweak variable names. So you might have this piece of code:

var decrement = this.props.shouldDecrementValue();

And say you now want to add a new method called shouldIncrementValue. Naturally you will duplicate that line above and replace "de" with "in" like so:

var decrement = this.props.shouldDecrementValue();
var increment = this.props.shouldIncrementValue();

But as you'll notice that the first change was all lowercase "in" and in the method, it's camelcased "In". This is a simple problem with 2 locations where you will want to change casing, but if you're refactoring a complex method and changing a variable name in dozens of locations, this will take a lot more work.

Solution: it would be faster to update all carets by only typing your changes once instead of for x times you need replaced.

var decrement = this.props.shouldDecrementValue();
var decrementVariationA = "variation a";
var decrementVariationB = "variation b";
var decrementVariationC = "variation c";
var decrementVariationD = "variation d";

function shouldDecrementValue(etc) {
  var thisDecrement = "";
  var thisDecrementArray = [];
}

1.) Before: Key: [] = selection range, | is cursor

var [decrement]| = this.props.should[Decrement]|Value();
var [decrement]|VariationA = "variation a";
var [decrement]|VariationB = "variation b";
var [decrement]|VariationC = "variation c";
var [decrement]|VariationD = "variation d";

function should[Decrement]|Value(etc) {
  var this[Decrement]| = "";
  var this[Decrement]|Array = [];
}

2.) Execute action, a single line input dialog box comes up, you enter in your new word in all lowercase: "increment"

3.) After action: Key: [] = selection range, | is cursor

var increment| = this.props.shouldIncrement|Value();
var increment|VariationA = "variation a";
var increment|VariationB = "variation b";
var increment|VariationC = "variation c";
var increment|VariationD = "variation d";

function shouldIncrement|Value(etc) {
  var thisIncrement| = "";
  var thisIncrement|Array = [];
}

Note: The result caret placement isn't even important if it makes it easier.

It will predict which casing you are replacing and fill it in accordingly. Again, this is essentially #37 but instead of using the clipboard, you are typing your replacement into a dialog box.

Universal "Select between quotes" with one keybind

Currently there is a way to select text between different quote characters, however each way requires it's own keybind and could be re-made to just use one bind and intelligently look up which quote character to select between.

This would need to work with both syntaxes and plain text quotes; here are some following use cases to test against: (Key: | is cursor and [] is selection bounds)

let ssingle = '|SELECTED';
let ssingle2 = 'SELECTED|';
let ssingle3 = 'SELE|CTED';
let sdouble = "|SELECTED";
let sdouble2 = "SELECTED|";
let sdouble3 = "SELE|CTED";
let stemplate = `|SELECTED`;
let stemplate2 = `SELECTED|`;
let stemplate3 = `SELE|CTED`;
let ssep = '|SELECTED' + '|SELECTED2';

After:

let ssingle = '[SELECTED]|';
let ssingle2 = '[SELECTED]|';
let ssingle3 = '[SELECTED]|';
let sdouble = "[SELECTED]|";
let sdouble2 = "[SELECTED]|";
let sdouble3 = "[SELECTED]|";
let stemplate = `[SELECTED]|`;
let stemplate2 = `[SELECTED]|`;
let stemplate3 = `[SELECTED]|`;
let ssep = '[SELECTED]|' + '[SELECTED2]|';

this "|is" a normal '|sentence'
this 'is expected| to's not be right'

After:

this "[is]|" a normal '[sentence]|'
this '[is expected to]|'s not be right'

Project refactoring and cleanup

some parts of the project are messed up. I need to refactor/clean up the project.

especially I should write a cleaner script for build.gradle.kts and some other code generation stuff...

Feature Request: Multi Caret "Select until.."

Often times I have strings that are not the same length that I need to select until a certain character per line. Using IntelliJ's default tools, and even with some plugins, it's not always achievable.

Say you have this multi-caret in your text editor, where | is the multi caret:

|test-test.test
|test-test-test.test
|test-test-test-test-test.test
|test-test-test-test-test-test.test

How do you achieve this selection where [] are the selection boundaries?

[test-test].test
[test-test-test].test
[test-test-test-test-test].test
[test-test-test-test-test-test].test

This is a VERY simple use case, the ones I deal with are far more complex.

Rules:
1.) Must only work with the carets already existing.
2.) You can't cheat this by going to the end of each line and working backwards because the end of each line has the same number of words/characters.
3.) Can't select all instances of period and work back.

Also, yes you can also use a regex search within selection, but I am looking for push button solution that requires minimal if not zero setup or complexity.

One solution would be a multi character supported "select until" function or popup where you type in the character after executing the command and it looks forwards or backwards for your query.

Sublime text has an addon that does just this:
https://github.com/xavi-/sublime-selectuntil

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.