通過(guò)action獲得editor中的內(nèi)容
如果你不熟悉如何開始一個(gè)plugin,一步一步(一)。
本次主要實(shí)現(xiàn)功能
- 通過(guò)在主菜單上添加一個(gè)自己的菜單項(xiàng),
- 點(diǎn)擊后可以獲得編輯器的內(nèi)容
本次涉及內(nèi)容- 如何將自己的菜單插入到合適的位置,
- 如何獲得editor中的內(nèi)容
一:向主菜單上添加一項(xiàng)新菜單
這一步完成后的效果
- 啟動(dòng)一個(gè)新的plugin項(xiàng)目
在plugin.xml中的<actions>....</actions>
添加菜單組和對(duì)應(yīng)菜單項(xiàng)
<actions>
<group id="MingManMan.Menu" text="我的菜單" description="慢慢的菜單組">
<add-to-group group-id="MainMenu" anchor="last" />
<action id="MingManMan.ReadDocument" class="ReadDocument" text="獲得Editor中的內(nèi)容" description="獲得編輯器中的全部?jī)?nèi)容" />
</group>
</actions>
<group>
標(biāo)簽表示這個(gè)是個(gè)菜單組,text
屬性是顯示的內(nèi)容,'description'描述<add-to-group>
標(biāo)簽表示要添加到那個(gè)菜單,group-id
是添加到的菜單id,這里是MainMenu
,就是添加到組菜單上,anchor
表示具體菜單的什么位置,這里是last
表示添加到主菜單的最后,就是Help菜單后面了。系統(tǒng)的group-id比較多,常見的描述下,要想了解更多可以參考這個(gè)網(wǎng)頁(yè)Built-in Action ID's,或者查看源代碼的
platform\platform-resources-en\src\messages\ActionsBundle.properties
這個(gè)文件。MainMenu
:ide的主菜單;FileMenu
:file菜單;EditMenu
:edit菜單;ViewMenu
: view菜單;GoToMenu
:Navigate;CodeMenu
:code;AnalyzeMenu
:Analyze;RefactoringMenu
:Refactor;BuildMenu
: Build;RunMenu
:Run;ToolsMenu
:Tools;VcsGroups
: VCSWindowMenu
:Window;HelpMenu
:HelpEditorPopupMenu
:編輯器中的右鍵菜單class="ReadDocument"
:這個(gè)是要用來(lái)承接action的一個(gè)類。添加動(dòng)作處理類,在左邊Project窗口,點(diǎn)擊src目錄,右鍵選擇新建,輸入類名字建立新類,并在類中輸入內(nèi)容如下:
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.ui.Messages;
public class ReadDocument extends AnAction {
@Override
public void actionPerformed(AnActionEvent anActionEvent) {
Messages.showDialog("慢慢的菜單","慢慢消息",new String[]{"OK"}, -1, null);
}
}
第一步完成,動(dòng)作設(shè)計(jì)已經(jīng)完成,下一步考慮如何獲得editor的內(nèi)容。
獲得editor中的文本內(nèi)容
- 獲得編輯器對(duì)象
- 獲得編輯器中的文檔對(duì)象
- 獲得文檔對(duì)象內(nèi)容
- 顯示內(nèi)容
這一步完成后的效果
直接在剛才的ReadDcoument
中進(jìn)行修改,最終樣子如下
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.ui.Messages;
public class ReadDocument extends AnAction {
@Override
public void actionPerformed(AnActionEvent anActionEvent) {
//獲得editor
final Editor editor = anActionEvent.getRequiredData(CommonDataKeys.EDITOR);
//獲得編輯器中的文檔對(duì)象
final Document document = editor.getDocument();
//獲得編輯器內(nèi)容
String mytext=document.getText();
Messages.showDialog(mytext,"當(dāng)前editor中的內(nèi)容",new String[]{"OK"}, -1, null);
}
}