Eclipse 插件開發 5.2 編輯器 獲取當前編輯器
- 1 獲取活躍編輯器
- 2 獲取全部編輯器
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Click1
Bundle-SymbolicName: com.xu.click1;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: com.xu.click1.Activator
Bundle-Vendor: XU
Require-Bundle: org.eclipse.ui,org.eclipse.core.runtime,org.eclipse.ui.editors,org.eclipse.ui.workbench.texteditor,org.eclipse.core.resources,org.eclipse.text
Bundle-RequiredExecutionEnvironment: JavaSE-24
Automatic-Module-Name: com.xu.click1
Bundle-ActivationPolicy: lazy
1 獲取活躍編輯器
在 Eclipse RCP 插件開發中,獲取編輯區(Editor)及其內容、判斷當前活躍的編輯器,需要使用 Eclipse Platform 提供的 API,特別是 IWorkbench, IWorkbenchWindow, IWorkbenchPage, IEditorPart 等接口。
package com.xu.click1.handlers;import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;public class SampleHandler extends AbstractHandler {@Overridepublic Object execute(ExecutionEvent event) throws ExecutionException {IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();IEditorPart part = page.getActiveEditor();if (part instanceof ITextEditor) {ITextEditor editor = (ITextEditor) part;IDocumentProvider provider = editor.getDocumentProvider();IDocument document = provider.getDocument(editor.getEditorInput());System.out.println(String.format("%s:%s", editor.getTitle(), document.get()));}return null;}}
2 獲取全部編輯器
package com.xu.click1.handlers;import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;public class SampleHandler extends AbstractHandler {@Overridepublic Object execute(ExecutionEvent event) throws ExecutionException {IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();for (IEditorReference ref : page.getEditorReferences()) {IEditorPart editor = ref.getEditor(false);if (null == editor) {System.out.println(String.format("%s未被編輯", ref.getTitle()));continue;}System.out.println(String.format("%s正在編輯:%s", ref.getTitle(), getEditContent(editor)));}return null;}private String getEditContent(IEditorPart part) {if (part instanceof ITextEditor) {ITextEditor editor = (ITextEditor) part;IDocumentProvider provider = editor.getDocumentProvider();IDocument document = provider.getDocument(editor.getEditorInput());return document.get();}return null;}}