dotfiles/conf.d/texstudio/macro/Macro_20.txsMacro

108 lines
2.6 KiB
Plaintext
Raw Normal View History

2021-02-19 23:10:44 +00:00
{
"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"
}