Eclipse 插件开发 5.3 编辑器 监听输入
Eclipse 插件开发 5.3 编辑器监 听输入
- 1 插件配置
- 2 添加监听
- 3 查看效果
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
org.eclipse.ui.IStartup 是 Eclipse 插件开发中用于在 工作台启动时自动执行代码 的接口。
org.eclipse.ui.IStartup 适用于以下场景:
1、启动时注册监听器(如监听编辑器、视图、资源等)
2、启动时预加载某些资源或服务
3、提前初始化你的插件逻辑
4、注册全局快捷键、UI 元素等
IStartup 注意事项
注意点 说明 UI 操作必须放在 UI 线程中 使用 Display.getDefault().asyncExec(...) 插件必须在 plugin.xml 中注册扩展点 否则 earlyStartup() 不会执行 不要阻塞 earlyStartup() 否则会影响 Eclipse 启动速度 IStartup 常见用途示例
用途 说明 自动附加文档监听器 监听所有打开的 ITextEditor 并获取实时输入 注册资源监听器 监听项目、文件变化 注册窗口、视图、编辑器监听器 管理 UI 生命周期 初始化日志系统、缓存等 提前准备插件运行环境 1 插件配置
2 添加监听
package com.xu.click1; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IStartup; import com.xu.edit.EditUtil; public class StartupListener implements IStartup { @Override public void earlyStartup() { Display.getDefault().asyncExec(() -> { new EditUtil().addEditListener(); }); } }
package com.xu.edit; import org.eclipse.jface.text.DocumentEvent; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IDocumentListener; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IPartService; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; public class EditUtil { public void addEditListener() { IWorkbench workbench = PlatformUI.getWorkbench(); oldEditListener(workbench); newEditListener(workbench); } private void oldEditListener(IWorkbench workbench) { if (null == workbench) { return; } IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if (null == window) { return; } IWorkbenchPage page = window.getActivePage(); if (null == page) { return; } for (IEditorReference ref : page.getEditorReferences()) { IEditorPart editor = ref.getEditor(true); if (null == editor) { continue; } addListener((ITextEditor) editor); } } private void addListener(ITextEditor editor) { if (null == editor) { return; } IDocumentProvider provider = editor.getDocumentProvider(); IDocument document = provider.getDocument(editor.getEditorInput()); document.addDocumentListener(new IDocumentListener() { @Override public void documentAboutToBeChanged(DocumentEvent arg0) { // TODO Auto-generated method stub } @Override public void documentChanged(DocumentEvent arg0) { // TODO Auto-generated method stub System.out.println(String.format("%s:%s", arg0.getOffset(), arg0.getText())); } }); } private void newEditListener(IWorkbench workbench) { if (null == workbench) { return; } for (IWorkbenchWindow window : workbench.getWorkbenchWindows()) { if (window == null) { continue; } IPartService service = window.getPartService(); if (null == service) { continue; } service.addPartListener(new IPartListener2() { @Override public void partOpened(IWorkbenchPartReference partRef) { IWorkbenchPart part = partRef.getPart(false); if (part instanceof ITextEditor) { addListener((ITextEditor) part); } } }); } } }
3 查看效果
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。