때는 바야흐로… 언제지??
쨌든 성종이가 나한테 인텔리제이는 백준 관련 플러그인이 없냐고 물어본 적이 있었다.
그래서 찾아봤을 때 없었고, vscode에는 있는데 내가 한 번 플러그인을 만들어보라고 권유했었다.
그래서 뭐 시간 날 때 한 번 해볼까라는 생각을 했고 개발을 시작해보았다.
사실상 플러그인 개발은 커뮤니티가 크지 않아서 참고할만한 자료가 매우 적은 편이다.
그럴 땐 공식문서!
공식 문서를 보다보니 인텔리제이에서 기본 제공하는 플러그인 템플릿이 있었다.
https://github.com/JetBrains/intellij-platform-plugin-template
그래서 열심히 읽어보고 fork 한 다음 개발에 착수했다.
기본 템플릿에 있는 example은 설명이 너무나 빈약해서 뭘 어떻게 코드를 짜야하는지도 어려웠다..
그래서 어쩔 수 없이 다른 사람들이 짠 코드들을 참고했고 그나마 내가 원하는 느낌으로 구현이 가능했다.
class BojSubmitAction : AnAction() {
override fun actionPerformed(event: AnActionEvent) {
val file = event.getData(PlatformDataKeys.VIRTUAL_FILE)
val fileName = file?.name.toString()
val pattern = Pattern.compile("(\\\\d+)")
val matcher = pattern.matcher(fileName)
if (!matcher.find()) {
Messages.showInfoMessage("파일 명에 백준 문제 번호를 포함해서 만들어주세요.", "Error")
return
}
val code = file?.contentsToByteArray()?.toString(Charsets.UTF_8)
if (code.isNullOrEmpty()) {
Messages.showInfoMessage("코드가 비어있습니다.", "Error")
return
}
val clipboard = java.awt.Toolkit.getDefaultToolkit().systemClipboard
val selection = java.awt.datatransfer.StringSelection(code)
clipboard.setContents(selection, selection)
val bojId = matcher.group(1)
BrowserUtil.open("<https://www.acmicpc.net/submit/$bojId>")
}
}
파일명에 있는 백준 문제 번호를 추출하고, 해당 코드를 복사한 다음, 백준 제출 화면으로 넘어가는 단순한 플러그인이다.
이 액션을 만들고 등록을 해주어야하는데 아래와 같이 plugin.xml 파일에 등록한다.
<actions>
<action class="org.jin.plugins.boj.action.BojSubmitAction"
description="Submit code to BOJ by file name" id="Submit BOJ"
text="Submit BOJ">
<add-to-group anchor="first" group-id="EditorPopupMenu"/>
</action>
</actions>