Skip to content

Instantly share code, notes, and snippets.

@masanobuimai
Last active December 15, 2015 04:50
Show Gist options
  • Save masanobuimai/5204485 to your computer and use it in GitHub Desktop.
Save masanobuimai/5204485 to your computer and use it in GitHub Desktop.
IntelliJEval版FileStatusBarプラグイン
import com.intellij.openapi.fileEditor.FileEditorManager
import com.intellij.openapi.fileEditor.FileEditorManagerListener
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.wm.WindowManager
import static intellijeval.PluginUtil.*
import static com.intellij.openapi.util.io.FileUtil.*
fileEditorManager = FileEditorManager.getInstance(project)
def femListener = getGlobalVar("femListener")
if (femListener) {
fileEditorManager.removeFileEditorManagerListener(femListener)
show("remove listener")
}
femListener = [
fileOpened: { f, v -> populateStatusBar(v) },
fileClosed: { f, v -> },
selectionChanged: { e -> populateStatusBar(e.newFile) }
] as FileEditorManagerListener
setGlobalVar("femListener", femListener)
fileEditorManager.addFileEditorManagerListener(femListener)
show("set listener")
show("finish")
private def populateStatusBar(VirtualFile v) {
statusBar = WindowManager.instance.getStatusBar(project)
if (v == null) statusBar.info = ""
else {
f = new File(v.path)
if (f.exists()) {
isBinary = v.fileType.binary
linebreak = isBinary ? "binary"
: getLineBreak(f, v.charset.displayName())
// statusBar.info = sprintf("%s %,d byte(s) [%s] %tY-%<tm-%<td %<tH:%<tM:%<tS", [f.name, f.length(), linebreak, f.lastModified()]);
statusBar.info = sprintf("%s %,d byte(s) [%s]", [f.name, f.length(), linebreak ]);
}
else statusBar.info = ""
}
}
private def getLineBreak(File f, enc) {
lineBreak = "???";
try {
// とりあえず 1024byte 読み込んで改行コードをチェックする
char[] chars = f.withReader(enc) { r -> loadText(r, 1024) }
for (int i = 0; i < chars.length; i++) {
if ('\n' == chars[i]) {
lineBreak = "unix";
break;
}
else if ('\r' == chars[i]) {
if (i + 1 < chars.length && '\n' == chars[i + 1]) {
lineBreak = "windows";
break;
}
else {
lineBreak = "mac";
break;
}
}
}
}
catch (IOException ignore) {}
lineBreak;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment