Eclipse 插件开发 5.3 编辑器 监听输入

06-02 1553阅读

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 查看效果

    Eclipse 插件开发 5.3 编辑器 监听输入

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码