我正在开发一个项目,我需要在其中显示一个弹出菜单,仅显示具有特定扩展名的文件,以及编辑器窗口和项目浏览器的弹出窗口。
以下是我所做的plugin.xml文件:
<menuContribution
locationURI="popup:org.eclipse.ui.popup.any">
<command
commandId="abc.contextMenu"
label="Open"
mnemonic="P"
style="push">
<visibleWhen
checkEnabled="false">
<or>
<with
variable="selection">
<iterate
ifEmpty="false">
<reference
definitionId="com.varun.ease.ui.sign.definition.testType">
</reference>
</iterate>
</with>
<with
variable="activeEditorInput">
<and>
<test
property="org.eclipse.ui.IWorkbenchPart"
value="true">
</test>
<reference
definitionId="com.varun.ease.ui.sign.definition.testType">
</reference>
</and>
</with>
</or>
</visibleWhen>
</command>
</menuContribution>
<extension
point="org.eclipse.core.expressions.definitions">
<definition
id="com.varun.ease.ui.sign.definition.testType">
<adapt
type="org.eclipse.core.resources.IFile">
<or>
<test
property="org.eclipse.core.resources.name"
value="*.py">
</test>
<test
property="org.eclipse.core.resources.name"
value="*.js">
</test>
</or>
</adapt>
</definition>
我想在编辑器处于活动状态时显示命令,即它在窗口中或从项目浏览器中选择项目时具有焦点。
我该怎么做才能检查编辑器是否处于活动状态,即它是否在窗口中具有焦点?
目前我正在使用<test/>
org.eclipse.ui.IWorkbenchPart
属性,但命令在编辑器窗口的弹出窗口中根本不可见。
在没有该属性的情况下运行,甚至在编辑器中打开适当的文件时显示命令,虽然不活动,但是从项目浏览器打开弹出窗口而不是从适当的文件打开。
感谢您的帮助
修改
在@ greg-449的指导下成功运行编辑器命令后更新了代码。但是现在,在尝试限制特定文件类型时,命令不可见。
<visibleWhen
checkEnabled="false">
<or>
<with
variable="selection">
<iterate
ifEmpty="false">
<reference
definitionId="com.varun.ease.ui.sign.definition.testType">
</reference>
</iterate>
</with>
<with
variable="activePart">
<and>
<reference
definitionId="com.varun.ease.ui.sign.definition.testType">
</reference>
<instanceof
value="org.eclipse.ui.IEditorPart">
</instanceof>
</and>
</with>
</or>
</visibleWhen>
答案 0 :(得分:1)
使用activePart
并测试编辑器类的实例。
所以:
<with
variable="activePart">
<instanceof
value="org.eclipse.ui.IEditorPart">
</instanceof>
</with>
测试任何编辑器。
您还可以使用activePartId
来测试编辑ID。
如果您还要测试编辑器输入,则需要使用<and>
:
<and>
<with
variable="activePart">
<instanceof
value="org.eclipse.ui.IEditorPart">
</instanceof>
</with>
<with
variable="activeEditorInput">
<reference
definitionId="com.varun.ease.ui.sign.definition.testType">
</reference>
</with>
</and>
答案 1 :(得分:0)
使用rcp eclipse
检查编辑器是否处于活动状态
HttpContext.Current.Session.Add("Title", "Data");
string foo = Session["Title"];
列出开放式编辑器
多个编辑器在时间打开而不是公开或重新打开新编辑器
public class Stud_editor_open extends AbstractHandler{
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
IEditorReference[] editors = page.getEditorReferences();
// How many editor open..
// System.out.println("Length : "+editors.length);
if(editors.length==0){
System.out.println("Editor is not an active");
}else{
System.out.println("Editor is an active");
System.out.println("Editor Name is :: "+page.getActiveEditor().getTitle());
}
}