Last active
December 15, 2015 04:50
-
-
Save masanobuimai/5204485 to your computer and use it in GitHub Desktop.
IntelliJEval版FileStatusBarプラグイン
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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