在eclipse中,如果用Ctrl+F来进行查找,它只会一个一个的找,如果使用如EmEditor之类的编辑器,则可以将所有与查找字符串匹配的内容高亮。所以我就想做一个简单类型功能的插件!
附件是一个高亮关键字的小插件,不过它目前有一些限制:
1.当前有打开的Editor,如:
IWorkbenchPage activePage = window.getActivePage();
if (activePage == null || activePage.getActiveEditor() == null) {
return;
}
因为我就是想找当前打开的Editor里的内容,所以没有Editor再找就没有意义了。
2.Editor的Control是一个Text或者是一个StyledText
我想高亮当前Editor中所选择的字符串。不过可以支持选择的控件类型太多了,我还没想好怎么把所有的选择都支持而不论它来自哪个控件,好像挺复杂的,所以暂时就对Text类型和StyledText做支持了。如下:
IEditorPart activeEditor = activePage.getActiveEditor();
Object control = activeEditor.getAdapter(Control.class);
3.当前Editor有一个对应的Resource在工作空间中
selectedResource = activeEditor.getEditorInput().getAdapter(
IResource.class);
if (selectedResource == null) {
return;
}
一个打开的Editor 不一定有一个对应的Resource在工作空间中存在的,最简单的你可以随便从一个地方拖一个文件到Eclipse的Editor区域打开,但是如果这个文件在工作空间中不存在,那暂时这个还不支持,因前目前我是直接调用Eclipse的查找API来做的,它需要一个IResource[]参数。回头我再考虑一下怎么扩展吧!
4.一定要有选择的内容
如果用户没有选择什么东西,显示查找就没有什么意义了
if (control instanceof StyledText) {
selectedText = ((StyledText) control).getSelectionText();
} else if (control instanceof Text) {
selectedText = ((Text) control).getSelectionText();
}
if(selectedText==null||selectedText.equals("")){
return;
}
5.其他的一些限制
有时即使一个操作看起来符合上面所有的要求,结果看起来可能也不会对,打开一个插件工程的插件描述文件:如果你是用MANIFEST.MF文件打开的,那么在plugin.xml页中进行查找就有问题,因为此时IResource得到的是MANIFEST.MF文件;反正在plugin.xml中也一样。
最后查找的结果就和Eclipse中按Ctrl+H出来的查找过程是一样的,只是结果只显示在当前Editor对应的Resource中存在的结果。至于选中后的背景颜色你可以去以下地方设置:
Window(菜单)-> Preferences->General->Editors->Text Editors->Annotations->Search Results
修改其中的Color就行了,最后结果大致如下: