mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
- Add package/installer.nsi (Full/Server/Client) and toolchain.nsi
- Embed icon.ico (rounded corners) into homed.exe/waiter.exe via .syso
- GUI auto-launches homed.exe from parent dir (Windows only)
- GUI fallback connections.json from app resource dir
- Add initconfig command for config.db seeding
- Replace waiter rawmode* with raw_{unix,windows,other}.go
- Fix .gitignore: /homed instead of homed, add login.json
- Update icon.svg with rounded rect, new mascot.svg
44 lines
1.4 KiB
Go
44 lines
1.4 KiB
Go
//go:build linux
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
func setRawMode(fd int) (func(), error) {
|
|
if fd == 0 {
|
|
fd = int(os.Stdin.Fd())
|
|
}
|
|
if !isTerminal(fd) {
|
|
return func() {}, nil
|
|
}
|
|
var oldState syscall.Termios
|
|
if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), syscall.TCGETS, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 {
|
|
return func() {}, fmt.Errorf("tcgets: %v", err)
|
|
}
|
|
newState := oldState
|
|
newState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON
|
|
newState.Oflag &^= syscall.OPOST
|
|
newState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN
|
|
newState.Cflag &^= syscall.CSIZE | syscall.PARENB
|
|
newState.Cflag |= syscall.CS8
|
|
newState.Cc[syscall.VMIN] = 1
|
|
newState.Cc[syscall.VTIME] = 0
|
|
if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), syscall.TCSETS, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 {
|
|
return func() {}, fmt.Errorf("tcset: %v", err)
|
|
}
|
|
return func() {
|
|
syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), syscall.TCSETS, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0)
|
|
}, nil
|
|
}
|
|
|
|
func isTerminal(fd int) bool {
|
|
var t syscall.Termios
|
|
_, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), syscall.TCGETS, uintptr(unsafe.Pointer(&t)), 0, 0, 0)
|
|
return err == 0
|
|
}
|