2017-06-16 14 views
0

私の拡張機能では、切り取り/コピー/貼り付けがいつ発生するのかを知り、それらの操作に関連するテキストを取得できる必要があります。もし私がを知っていれば、おそらく彼らはが起こったときに私はエディタからテキストを得ることができます。VSコード拡張で、ユーザーがカット/コピー/ペーストをしたときにどのように通知できますか?

これらの操作のリスナーが見つかりません。私はctrl-x、ctrl-c、ctrl-vのキーボード入力を探すことができますが、一部のユーザーは編集メニューを使用してキーボードを使用しないことがあります。

これらの操作がキーボードまたは編集メニューから発生したときに通知する方法はありますか?

答えて

1

クリップボードに直接アクセスするapiはありませんが、一部の拡張機能はデフォルトのコピーを上書きし、ショートカットを貼り付けてコピーの貼り付け動作をカスタマイズします。ここでは2つの例です:あなたが注意したよう

しかし、コンテキストメニューを使用してコピーするときに、そのアプローチは機能しません。それをサポートするために、editor.action.clipboardCopyActionコマンドをインターセプトすることもできます。 Vimの拡張子は、この例のためtypeコマンドをインターセプトする方法を参照してください:ここhttps://github.com/VSCodeVim/Vim/blob/aa8d9549ac0d31b393a9346788f9a9a93187c222/extension.ts#L208

+0

はい、これは私の役に立つでしょう。あなたはoverrideCommand()のドキュメントを知っていますか? 私はまだデフォルト動作を実行する必要があります:vscode.commands.executeCommand( "default:editor.action.clipboardPaste Action"); ? –

0

オリジナルアスカー...

私はエディタでデフォルトのカット/コピー/ペーストアクションをオーバーライドする必要解決策を考え出しました。ここでextension.jsで「コピー」のコードは、(私はjsのないTSを使用しています)です:

//override the editor.action.clipboardCopyAction with our own 
var clipboardCopyDisposable = vscode.commands.registerTextEditorCommand('editor.action.clipboardCopyAction', overriddenClipboardCopyAction); 

context.subscriptions.push(clipboardCopyDisposable); 

/* 
* Function that overrides the default copy behavior. We get the selection and use it, dispose of this registered 
* command (returning to the default editor.action.clipboardCopyAction), invoke the default one, and then re-register it after the default completes 
*/ 
function overriddenClipboardCopyAction(textEditor, edit, params) { 

    //debug 
    console.log("---COPY TEST---"); 

    //use the selected text that is being copied here 
    getCurrentSelectionEvents(); //not shown for brevity 

    //dispose of the overridden editor.action.clipboardCopyAction- back to default copy behavior 
    clipboardCopyDisposable.dispose(); 

    //execute the default editor.action.clipboardCopyAction to copy 
    vscode.commands.executeCommand("editor.action.clipboardCopyAction").then(function(){ 

     console.log("After Copy"); 

     //add the overridden editor.action.clipboardCopyAction back 
     clipboardCopyDisposable = vscode.commands.registerTextEditorCommand('editor.action.clipboardCopyAction', overriddenClipboardCopyAction); 

     context.subscriptions.push(clipboardCopyDisposable); 
    }); 
} 

これは間違いなくは、しかし、動作するようには思えない...最善の解決策のようにを感じることはありません。コメント/提案はありますか?繰り返し登録や登録解除が発生する問題はありますか?

関連する問題