draivin/hsnips

Feature Request

Closed this issue · 1 comments

    Now that Hsnips allows you to use JavaScript in `global` area, you can use VSCode API and get that. 

add these into your .hsnips file:

global

const vscode = require("vscode");
var editor=vscode.window.activeTextEditor
var document=editor.document

endglobal

then:

  • for TM_SELECTED_TEXT :
    add the code between global and endglobal:
let selectedText = "";
vscode.window.onDidChangeTextEditorSelection((e) => {
    const newSelectedText = e.textEditor.document.getText(e.selections[0]);
    if (newSelectedText) {
        selectedText = newSelectedText;
    }
});

and use that in your snippet like:
rv=selectedText; selectedText=""
e.g.:

snippet `([aA]lign|aln)` "align" iwA
\begin{aligned}
    ${0:``rv=selectedText;selectedText=""``}
\end{aligned}
endsnippet

result:
1111

  • for TM_CURRENT_LINE:
    use document.lineAt(editor.selection.active).text; or
let pos = editor.selection.active;
let range = new vscode.Range(pos.line,0,pos.line,pos.character-2) //delete snippet "bk"
let text=document.getText(range);
vscode.window.activeTextEditor.edit(editBuilder => {
    editBuilder.delete(document.lineAt(pos).range);
});
rv=text;

e.g.

snippet bk "test" iA
\left(``
let pos = editor.selection.active;
let range = new vscode.Range(pos.line,0,pos.line,pos.character-2) //delete snippet "bk"
let text=document.getText(range);
vscode.window.activeTextEditor.edit(editBuilder => {
    editBuilder.delete(document.lineAt(pos).range);
});
rv=text;
``\right)
endsnippet

then you will get:
1111

this code seems ugly but at least it works 😂. Thanks to @OrangeX4 .

Originally posted by @yfzhao20 in #81 (comment)

I mistook