108 lines
2.6 KiB
Plaintext
108 lines
2.6 KiB
Plaintext
|
{
|
||
|
"name" : "WakaTime" ,
|
||
|
"tag" : [
|
||
|
"%SCRIPT",
|
||
|
"var utils = {};",
|
||
|
"utils.isValidApiKey = function(key) {",
|
||
|
" if (!key) return false;",
|
||
|
" var re = new RegExp('^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$', 'i');",
|
||
|
" return re.test(key);",
|
||
|
" };",
|
||
|
"utils.urlToPath = function(path) {",
|
||
|
" path = decodeURIComponent(path.toString());",
|
||
|
" if (path.indexOf('file://') == 0)",
|
||
|
" path = path.substring(7);",
|
||
|
" return path;",
|
||
|
"};",
|
||
|
"",
|
||
|
"var VERSION = '1.0.0';",
|
||
|
"var EDITOR_VERSION = app.getVersion();",
|
||
|
"var FREQUENCY = 2;",
|
||
|
"var LAST_FILE = '';",
|
||
|
"var LAST_TIME = null;",
|
||
|
"var WAKATIME_CLI = null; // defined in event handler scope",
|
||
|
"var TRIGGERS = {",
|
||
|
" 2: '?txs-start',",
|
||
|
" 64: '?save-file',",
|
||
|
"};",
|
||
|
"",
|
||
|
"",
|
||
|
"function initialize() {",
|
||
|
" debug('Initializing WakaTime v' + VERSION + '...');",
|
||
|
"}",
|
||
|
"",
|
||
|
"function onSave() {",
|
||
|
" var currentFile = app.getCurrentFileName();",
|
||
|
" if (currentFile) {",
|
||
|
" currentFile = app.getAbsoluteFilePath(currentFile);",
|
||
|
" sendHeartbeat(currentFile, true);",
|
||
|
" }",
|
||
|
"}",
|
||
|
"",
|
||
|
"function sendHeartbeat(file, isWrite) {",
|
||
|
" debug('Sending heartbeat for file:' + file);",
|
||
|
" file = utils.urlToPath(file);",
|
||
|
" var args = [",
|
||
|
" 'wakatime',",
|
||
|
" '--verbose',",
|
||
|
" '--entity',",
|
||
|
" '\\"' + file + '\\"',",
|
||
|
" '--plugin',",
|
||
|
" '\\"texstudio/' + EDITOR_VERSION + ' texstudio-wakatime/' + VERSION + '\\"',",
|
||
|
" ];",
|
||
|
" if (isWrite)",
|
||
|
" args.push('--write');",
|
||
|
" if (typeof cursor !== 'undefined') {",
|
||
|
" args.push('--lineno');",
|
||
|
" args.push(cursor.lineNumber() + 1);",
|
||
|
" var cursorpos = cursorPosition();",
|
||
|
" if (cursorpos != null) {",
|
||
|
" args.push('--cursorpos');",
|
||
|
" args.push(cursorpos);",
|
||
|
" }",
|
||
|
" }",
|
||
|
" ",
|
||
|
" // run wakatime-cli in separate process",
|
||
|
" system(args.join(' '));",
|
||
|
"}",
|
||
|
"",
|
||
|
"function cursorPosition() {",
|
||
|
" if (typeof editor === 'undefined') {",
|
||
|
" return null;",
|
||
|
" }",
|
||
|
" ",
|
||
|
" ",
|
||
|
" var lines = editor.document().textLines();",
|
||
|
" var cursorpos = 0;",
|
||
|
" var lineno = cursor.lineNumber();",
|
||
|
" var currentLine = 0;",
|
||
|
" while (currentLine <= lineno) {",
|
||
|
" if (currentLine == lineno) {",
|
||
|
" cursorpos += cursor.columnNumber();",
|
||
|
" } else {",
|
||
|
" cursorpos += lines[currentLine].length + 1;",
|
||
|
" }",
|
||
|
" currentLine += 1;",
|
||
|
" }",
|
||
|
" return cursorpos;",
|
||
|
"}",
|
||
|
"",
|
||
|
"var trigger = TRIGGERS[triggerId];",
|
||
|
"switch (trigger) {",
|
||
|
" case '?txs-start':",
|
||
|
" initialize();",
|
||
|
" break;",
|
||
|
" case '?save-file':",
|
||
|
" onSave();",
|
||
|
" break;",
|
||
|
"}"
|
||
|
],
|
||
|
"description" : [
|
||
|
""
|
||
|
],
|
||
|
"abbrev" : "" ,
|
||
|
"trigger" : "?txs-start|?save-file" ,
|
||
|
"menu" : "Scripts" ,
|
||
|
"shortcut" : "Ctrl+Shift+F12"
|
||
|
}
|