]> gitweb.factorcode.org Git - factor.git/blob - basis/editors/visual-studio-code/visual-studio-code.factor
editors.visual-studio-code: Add instance of vscode to be a vscode-base
[factor.git] / basis / editors / visual-studio-code / visual-studio-code.factor
1 ! Copyright (C) 2015 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: combinators combinators.short-circuit editors
4 generalizations io.files io.pathnames io.standard-paths kernel
5 make math.parser namespaces sequences system tools.which ;
6 IN: editors.visual-studio-code
7
8 ! Command line arguments
9 ! https://code.visualstudio.com/docs/editor/command-line
10
11 MIXIN: visual-studio-code-base
12
13 SINGLETON: visual-studio-code
14
15 INSTANCE: visual-studio-code visual-studio-code-base
16
17 editor-class [ visual-studio-code ] initialize
18
19 HOOK: find-visual-studio-code-path editor-class ( -- path )
20
21 M: visual-studio-code-base find-visual-studio-code-path
22     os {
23         { linux [
24             {
25                 [ "code" which ]
26                 [ "Code" which ]
27                 [ "~/VSCode-linux-x64/Code" ]
28                 [ "/usr/share/code/code" ]
29             } [ dup file-exists? [ drop f ] unless ] map-compose 0|| ] }
30         { macosx [
31             "com.microsoft.VSCode" find-native-bundle
32             [ "Contents/MacOS/Electron" append-path ] [ f ] if* ] }
33         { windows [ "code.cmd" ] }
34     } case ;
35
36 : visual-studio-code-invocation ( -- path )
37     {
38         [ \ visual-studio-code-invocation get ]
39         [ find-visual-studio-code-path ]
40         [ "code" ]
41     } 0|| ;
42
43 ERROR: can't-find-visual-studio-code ;
44
45 : visual-studio-code-editor-command ( file line -- seq )
46     [
47         visual-studio-code-invocation
48         [ , ] [ can't-find-visual-studio-code ] if*
49         "-g" , "-r" ,
50         number>string ":" glue ,
51     ] { } make ;
52
53 M: visual-studio-code-base editor-command
54     visual-studio-code-editor-command ;