class library: Spawner - don't access PriorityQueue-array
[supercollider.git] / editors / scvim / extra / VimDocument.sc
blobcbdc88395e1b52d65d218ed5ee04d2b7c365bcc6
1 Vim {
2     *new { this.shouldNotImplement(thisMethod) }
3     *serverlist { ^"vim --serverlist".unixCmdGetStdOut }
4     *remote_send { | servername keys | ^("vim --servername" + servername + "--remote-send" + "'" ++ keys ++ "'").unixCmdGetStdOut }
5     *remote_expr { | servername expr | ^("vim --servername" + servername + "--remote-expr" + "'" ++ expr ++ "'").unixCmdGetStdOut }
8 VimDocument : Document {
9     classvar idx = 0;
10     var <servername, title, <file;
12     *initClass{
13         "rm -f /tmp/SCVIM*".systemCmd;
14         Document.implementationClass = VimDocument;
15         Document.autoRun = false;
16         this.startup;
17     }
19     *startup { 
20         var post;
21         super.startup; 
22         fork({ 
23             0.2.wait; 
24             post = this.listener; 
25             if(post.notNil) { post.name_(" post ") } 
26         }, AppClock);
27         this.setTheme('default');
28     }
30     *new { | title="Untitled" string="" makeListener=false |
31         ^super.prBasicNew.initByString(title, string.asString, makeListener);
32     }
34     *postColor_ { }
36     initLast { }
37     front { }
38     unfocusedFront { }
39     alwaysOnTop_ { |boolean=true| }
40     alwaysOnTop { ^false }
41     syntaxColorize { }
42     removeUndo { }
43     promptToSave_ { | bool | }
44     promptToSave { ^true }    
45     underlineSelection { }
46     isEdited { ^true }
47     
49     // if range is -1 apply to whole doc
50     setFont { | font, rangeStart= -1, rangeSize=100 | 
51                 //XXX this only works for the whole server as that is the way vim works
52                 //only works with graphical vim
53                 Vim.remote_send(servername, "<Esc>:set guifont=" ++ 
54                         font.replace(" ", "\\\\\\ ")  ++ "<CR>");
55         }
56     setTextColor { | color,  rangeStart = -1, rangeSize = 0 | }
57     
58     text {
59         var string
60                         = Vim.remote_expr(servername, "getbufline(bufnr(\"" ++ file ++ "\"), 1, \"$\")");
61         ^string.copyRange(0, (string.size - 2));
62     }
64     selectedText { ^nil }
65     selectUnderlinedText { | clickPos | }
66     selectedRangeLocation { ^0 }
67     selectedRangeSize { ^0 }
68     
69     rangeText { | rangestart=0, rangesize=1 |
70         var string = 
71                         Vim.remote_expr(servername, "getbufline(bufnr(\"" ++ file ++ "\"), " ++ 
72                         (rangestart + 1) ++ ", " ++
73                         (rangestart + rangesize) ++ ")");
74         ^string.copyRange(0, (string.size - 2));
75     }
76     
77     insertTextRange { | string, rangestart, rangesize | }
78     linkAtClickPos { | clickPos | ^nil }
80     // private //
81     *prnumberOfOpen { ^0 }
82     *prGetIndexOfListener { ^0 }
83     *prSetSyntaxColorTheme{ |textC, classC, stringC, symbolC, commentC, numberC| }
85     propen { | path selectionStart=0 selectionLength=0 |
86         var rcfile = this.prfindRcFile;
87                 file = path;
88         servername = "scvim";//this.prnextVimServerName;
89                 ("vim --servername " + servername + " --remote-tab " + file).unixCmd;
90                 //XXX I'm not sure what this means
91         dataptr = true;
92     }
93     prclose { }
95     prinitByString { | title str makeListener |
96         var fifo;
97                 file = this.prGetTmpFile;
98         servername = "scvim";
99         File.open(file, "w").write(str).close;
100                 this.propen(file);
101                 //XXX I'm not sure what this means
102         dataptr = true;
103     }
105     prinitByIndex { | idx | }
106     prGetLastIndex { ^idx }
107     prIsEditable_{ | editable=true | }
108     prSetTitle { | argName | title = argName }
109     prGetTitle { ^title }  
110     prGetFileName { ^nil }
111     prSetFileName { | apath | }
113     prSelectLine { | line | }
114     prinsertText { | dataPtr, txt | }
116     prGetBounds { | argBounds | ^nil }
117     prSetBounds { | argBounds | }
118     prSetBackgroundColor { | color | }
119     prGetBackgroundColor { | color | ^nil }
120     prSetSelectedBackgroundColor { | color | }
121     prGetSelectedBackgroundColor { | color | ^nil }
123         prGetTmpFile {
124                 var tmp = "/tmp/scvimdocument-tmp" ++ idx ++ ".sc";
125                 idx = idx + 1;
126                 ^tmp;
127         }
129     prfindRcFile {
130         var homercfile = "~/.scvimrc";
131         var localrcfile = "/usr/local/share/scvim/scvimrc";
132         var usrrcfile = "/usr/share/scvim/scvimrc";
134         if (File.exists(homercfile)) {
135             ^homercfile;
136         } {
137             if (File.exists(localrcfile)) {
138                 ^localrcfile;
139             } {
140                 if (File.exists(usrrcfile)) {
141                     ^usrrcfile;
142                 } {
143                     ^nil;
144                 }
145             }
146         }
147     }