Code Monkey home page Code Monkey logo

contextquickie2's Introduction

ContextQuickie2

Showing the Windows Explorer Context Menu in Eclipse

Current State

Under development, basic context menu handling is working. The explorer context menu items can be added to the Eclipcse context menu in different ways:

  • The whole explorer context menu is shown as submenu "Explorer" in the Elipse context menu
  • Only specific entries are added to the Eclipse context menu where the following tools are supported:
    • 7-Zip
    • Beyond Compare
    • Notepad++
    • Open With...
    • TortoiseGit
    • TortoiseHg
    • TortoiseSVN

The follwoing context menu entries are currently not supported (not sure why they are not working, looks like the can only be executed directly from the Windows Explorer):

  • Sharing (Entry "Share")
  • Modern Sharing (Entry "Give acces to")

The screenshots below show example context menus based on the described configuration.

Installation

Prerequisites

ContextQuickie2 requires an installed Microsoft Visual C++ Redistributeable package which can be downloaded here.

The release versions are available at the Eclipse Marketplace

Drag to your running Eclipse* workspace. *Requires Eclipse Marketplace Client

Alternatively, you can use the following update sites when installing new software in eclipse:

Configuration

The behavior can be configured in the workspaces preferences:

ContextQuickie2 Preferences Page

Remarks

Menu Entry "Open"

The menu entry "Open" is implemented to open the selected files/folders with the Windows Explorer.

Progress Monitoring

Because there are context menu extensions which don't support synchronous invocation, the progress reporting to Eclipse is done by monitoring the child processes of Eclipse during invocation. If there is a new child process which is known to ContextQuickie2 after invoking a context menu command, the progress of the command execution can be monitored in Eclipse. If there isn't a new child process after invoking or a command or the process is unknown to ContextQuickie2, progress monitoring cannot be done.

Currently, the following processes are known to ContextQuickie2:

  • Bcompare.exe for Beyond Compare
  • TortoiseGitProc.exe for TortoiseGit
  • TortoiseProc.exe for TortoiseSVN
  • thgw.exe for TortoiseHg

The described behavior also affects refreshing the workspace after a command was executed. As an alternative, you can enable "Refresh using native hooks or polling" in the workspace preferendes to let Eclipse update your workspace independent of ContextQuickie2.

Examples

TortoiseGit in the Eclipse Context Menu (Main Menu)

TortoiseGit in the Eclipse Context Menu (Main Menu)

TortoiseGit in the Eclipse Context Menu (Submenu)

TortoiseGit in the Eclipse Context Menu (Submenu)

TortoiseHg in the Eclipse Context Menu (Main Menu)

TortoiseHg in the Eclipse Context Menu (Main Menu)

TortoiseHg in the Eclipse Context Menu (Submenu)

TortoiseHg in the Eclipse Context Menu (Submenu)

TortoiseSVN in the Eclipse Context Menu (Main Menu)

TortoiseSVN in the Eclipse Context Menu (Main Menu)

TortoiseSVN in the Eclipse Context Menu (Submenu)

TortoiseSVN in the Eclipse Context Menu (Submenu)

contextquickie2's People

Contributors

contextquickie avatar rolandomagico avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

contextquickie2's Issues

eclipse 4.19 logs many "Not properly disposed SWT resource" error message

Describe the bug
error

Eclipse Error Log
java.lang.Error: SWT Resource was not properly disposed at org.eclipse.swt.graphics.Resource.initNonDisposeTracking(Resource.java:172) at org.eclipse.swt.graphics.Resource.<init>(Resource.java:120) at org.eclipse.swt.graphics.Image.<init>(Image.java:498) at contextquickie2.plugin.EclipseExplorerContextMenuEntry.getImageDescriptor(EclipseExplorerContextMenuEntry.java:171) at contextquickie2.plugin.MenuBuilder.createMenuEntry(MenuBuilder.java:208) at contextquickie2.plugin.MenuBuilder.createMenuEntry(MenuBuilder.java:189) at contextquickie2.plugin.MenuBuilder.getContributionItems(MenuBuilder.java:156) at org.eclipse.ui.actions.CompoundContributionItem.getContributionItemsToFill(CompoundContributionItem.java:83) at org.eclipse.ui.actions.CompoundContributionItem.fill(CompoundContributionItem.java:57) at org.eclipse.ui.internal.menus.DynamicMenuContributionItem.fill(DynamicMenuContributionItem.java:146) at org.eclipse.jface.action.MenuManager.doItemFill(MenuManager.java:729) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:806) at org.eclipse.jface.action.MenuManager.update(MenuManager.java:673) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.scheduleManagerUpdate(MenuManagerRenderer.java:1226) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.processContents(MenuManagerRenderer.java:654) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.subscribeTopicChildAdded(MenuManagerRenderer.java:325) at jdk.internal.reflect.GeneratedMethodAccessor23.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:236) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:133) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4742) at org.eclipse.e4.ui.workbench.swt.DisplayUISynchronize.syncExec(DisplayUISynchronize.java:34) at org.eclipse.e4.ui.internal.di.UIEventObjectSupplier$UIEventHandler.handleEvent(UIEventObjectSupplier.java:64) at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203) at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1) at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:133) at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75) at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44) at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:55) at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:63) at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:424) at org.eclipse.emf.ecore.util.EcoreEList.dispatchNotification(EcoreEList.java:249) at org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUnique(NotifyingListImpl.java:356) at org.eclipse.emf.common.util.AbstractEList.add(AbstractEList.java:340) at org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord.mergeIntoModel(ContributionRecord.java:253) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.processAddition(MenuManagerRenderer.java:550) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.generateContributions(MenuManagerRenderer.java:530) at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.processContributions(MenuManagerRenderer.java:498) at org.eclipse.ui.internal.PopupMenuExtender.addMenuContributions(PopupMenuExtender.java:380) at org.eclipse.ui.internal.PopupMenuExtender.menuAboutToShow(PopupMenuExtender.java:355) at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:338) at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:468) at org.eclipse.jface.action.MenuManager.access$1(MenuManager.java:463) at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:495) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:259) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4209) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1043) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1067) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1048) at org.eclipse.swt.widgets.Control.WM_INITMENUPOPUP(Control.java:5157) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4789) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2263) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4930) at org.eclipse.swt.internal.win32.OS.TrackPopupMenu(Native Method) at org.eclipse.swt.widgets.Menu._setVisible(Menu.java:237) at org.eclipse.swt.widgets.Display.runPopups(Display.java:4067) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3620) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1157) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046) at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155) at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:564) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590) at org.eclipse.equinox.launcher.Main.run(Main.java:1461)

Desktop (please complete the following information):

  • Eclipse version 4.19
  • ContextQuickie version [0.6.2.202101271947]

Do you have any specific explorer context menu extensions installed:

  • Beyond Compare
  • Notepad++ (does not work)
  • TortoiseGit

Plugin configuration
preferences

"Unhandled event loop exception" in file context menu

When right-clicking on a file (tried .sql and .java) multiple (18) "Unhandled event loop exception" are logged. Also the "Compare with" menu (maybe more) is gone, maybe just because the menu creation process is disrupted. After uninstall the menu reappears.

Eclipse version
Version: 2019-03 (4.11.0)
Build id: 20190314-1200

Used ContextQuickie features
?

Session data for stacktrace
eclipse.buildId=4.11.0.I20190307-0500
java.version=12-BellSoft
java.vendor=BellSoft
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE

Stack trace
java.lang.NoClassDefFoundError: Could not initialize class explorercontextmenu.menu.ExplorerContextMenu
at contextquickie2.plugin.MenuBuilder.getContributionItems(MenuBuilder.java:123)
at org.eclipse.ui.actions.CompoundContributionItem.getContributionItemsToFill(CompoundContributionItem.java:83)
at org.eclipse.ui.actions.CompoundContributionItem.fill(CompoundContributionItem.java:57)
at org.eclipse.ui.internal.menus.DynamicMenuContributionItem.fill(DynamicMenuContributionItem.java:150)
at org.eclipse.jface.action.MenuManager.doItemFill(MenuManager.java:731)
at org.eclipse.jface.action.MenuManager.update(MenuManager.java:813)
at org.eclipse.jface.action.MenuManager.update(MenuManager.java:672)
at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.scheduleManagerUpdate(MenuManagerRenderer.java:1222)
at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.processContents(MenuManagerRenderer.java:652)
at org.eclipse.ui.internal.PopupMenuExtender.addMenuContributions(PopupMenuExtender.java:415)
at org.eclipse.ui.internal.PopupMenuExtender.menuAboutToShow(PopupMenuExtender.java:385)
at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:342)
at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:473)
at org.eclipse.jface.action.MenuManager.access$1(MenuManager.java:468)
at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:500)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:259)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4131)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1055)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1060)
at org.eclipse.swt.widgets.Control.WM_INITMENUPOPUP(Control.java:5148)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4797)
at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:348)
at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1502)
at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2152)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:4770)
at org.eclipse.swt.internal.win32.OS.TrackPopupMenu(Native Method)
at org.eclipse.swt.widgets.Menu._setVisible(Menu.java:253)
at org.eclipse.swt.widgets.Display.runPopups(Display.java:3985)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3541)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
at org.eclipse.jface.window.Window.open(Window.java:799)
at org.eclipse.ui.internal.views.log.EventDetailsDialog.open(EventDetailsDialog.java:191)
at org.eclipse.ui.internal.views.log.EventDetailsDialogAction.run(EventDetailsDialogAction.java:102)
at org.eclipse.ui.internal.views.log.LogView.lambda$2(LogView.java:565)
at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:833)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:47)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:176)
at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:830)
at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1518)
at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1260)
at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:253)
at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:251)
at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:310)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4131)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1055)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3944)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3547)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1173)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1062)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:566)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:155)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:661)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:597)
at org.eclipse.equinox.launcher.Main.run(Main.java:1476)

TortoiseGit menu items do not show up

Hello,

just installed latest version from Marketplace (ContextQuickie2 0.6.2.202101271947).
The menu items for TortoiseGit do not show up in the context menu. Instead two empty lines are shown.
There is no error in the error log. Eclipse Version is 2020-12 (4.18.0).
grafik

grafik

Even with all configuration options enabled the TortoiseGit items do not show up but all others are fine.

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.