forked from skycoin/viscript
-
Notifications
You must be signed in to change notification settings - Fork 0
/
viscript.go
124 lines (91 loc) · 3.59 KB
/
viscript.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
------- NEXT THINGS TODO: -------
* RPC cli:
add functionality to print running jobs for a given process id
that can be retrieved by lp or setting the process id as default
because that already exists
* ExternalProcess:
Ctrl + c - detach, delete, kill probably
Ctrl + z - detach and let it be running or pause it (https://repl.it/GeGn/1)?,
jobs - list all jobs of current terminal
fg <id> - send to foreground
* auto-run task_ext according to os specific init
(doing it immediately upon first cli submission good enough?)
* limit resizing to require at least 16 char columns
* make current command line autoscroll horizontally
* make it optional (if turned off, always truncate the left)
* back buffer scrolling
* pgup/pgdn hotkeys
* 1-3 lines with scrollwheel
* Fix getting a resizing pointer outside of focused terminal.
When you click outside terminal it can land on a background
terminal which then pops in front. Blocking the resize
* Sideways scroll command line when it doesn't fit the dedicated space for it
(atm, 2 lines are reserved along the bottom of a full screen)
* block character at end to indicate continuing on next line
* make new window display on top
(i believe the sorting logic is only triggered by clicking right now)
* scan and do/fix most FIXME/TODO places in the code
------- OLDER TODO: ------- (everything below was for the text editor)
* KEY-BASED NAVIGATION
* CTRL-HOME/END - PGUP/DN
* BACKSPACE/DELETE at the ends of lines
pulls us up to prev line, or pulls up next line
* when auto appending to the end of a terminal, scroll all the way down
(manual activity in the middle could increase size, so do this only when appending to body)
------- LOWER PRIORITY POLISH: -------
* if cursor movement goes past left/right of screen, auto-horizontal-scroll as you type
* same for when newlines/enters/returns push cursor past the bottom of visible space
* vertical scrollbars could have a smaller rendering of the first ~40 chars?
however not if we map the whole vertical space (when scrollspace is taller than screen),
because this requires scaling the text. and keeping the aspect ratio means ~40 (max)
would alter the width of the scrollbar
* when there is no scrollbar, should be able to see/interact with text in that area
*/
package main
import (
"os"
"github.com/corpusc/viscript/app"
"github.com/corpusc/viscript/config"
"github.com/corpusc/viscript/hypervisor"
"github.com/corpusc/viscript/monitor"
"github.com/corpusc/viscript/rpc/terminalmanager"
"github.com/corpusc/viscript/viewport"
)
func main() {
app.MakeHighlyVisibleLogEntry(app.Name, 15)
err := config.Load("config.yaml")
if err != nil {
println(err.Error())
return
}
args := os.Args[1:]
if len(args) == 1 {
if args[0] == "-h" || args[0] == "-run_headless" {
//override the defalt run headless no matter what it's value
config.Global.Settings.RunHeadless = true
}
}
println("RunHeadless:", config.Global.Settings.RunHeadless)
hypervisor.Init()
viewport.Init() //runtime.LockOSThread()
//rpc concurrency can interrupt the following, so printing NOW
app.MakeHighlyVisibleLogEntry("Start loop", 7)
go func() {
rpcInstance := terminalmanager.NewRPC()
rpcInstance.Serve()
}()
monitor.Init("0.0.0.0:7999").Run() //tcp server monitor for apps
//actual start of loop
for viewport.CloseWindow == false {
viewport.DispatchEvents() //event channel
hypervisor.TickTasks()
hypervisor.TickExtTasks()
viewport.PollUiInputEvents()
viewport.Tick()
viewport.UpdateDrawBuffer()
viewport.SwapDrawBuffer() //with new frame
}
viewport.TeardownScreen()
hypervisor.Teardown()
}