-
Notifications
You must be signed in to change notification settings - Fork 1
/
exam.go
67 lines (55 loc) · 1.56 KB
/
exam.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
package main
/*
#cgo pkg-config: qtermwidget5 Qt5Widgets Qt5Gui Qt5Core
#include <stdlib.h>
extern void* createTermWidget(int startnow, void * parent);
extern void termSendText(void *p,char *s);
extern void termSetMinimumHeight(void *p,int minh);
extern char *termSelectedText(void *p);
extern void termConnectFinish2Close(void *p);
extern void termSetTermFont(void *p, void *f);
extern void termSendKeyEvent(void *p, void *e);
*/
import "C"
import (
"strings"
"unsafe"
)
func getQTermPtr(p unsafe.Pointer) uintptr {
t := C.createTermWidget(1, p)
return uintptr(t)
}
func termChangeDir(p uintptr, d string) {
arg := strings.Replace(d, "\"", "\\\"", 0)
termSendText(p, "cd \""+arg+"\"\n")
}
func termSendText(p uintptr, s string) {
C.termSendText(unsafe.Pointer(p), C.CString(s))
}
func termSetMiniHeight(p uintptr, h int) {
C.termSetMinimumHeight(unsafe.Pointer(p), C.int(h))
}
func termSelectedText(p uintptr) string {
return C.GoString(C.termSelectedText(unsafe.Pointer(p)))
}
func termConnectFinish2Close(p uintptr) {
C.termConnectFinish2Close(unsafe.Pointer(p))
}
func buildCmdLine(prog string, envs, args []string) string {
var cmd = []string{}
for _, v := range envs {
cmd = append(cmd, v)
}
cmd = append(cmd, prog)
for _, v := range args {
arg := strings.Replace(v, "\"", "\\\"", 0)
cmd = append(cmd, "\""+arg+"\"")
}
return strings.Join(cmd, " \\\n") + "\n"
}
func termSetTermFont(p uintptr, f unsafe.Pointer) {
C.termSetTermFont(unsafe.Pointer(p), f)
}
func termSendKeyEvent(p uintptr, e unsafe.Pointer) {
C.termSendKeyEvent(unsafe.Pointer(p), e)
}