committed by
					
						
						Péter Szilágyi
					
				
			
			
				
	
			
			
			
						parent
						
							43e8efe895
						
					
				
				
					commit
					f413a3dbb2
				
			
							
								
								
									
										35
									
								
								vendor/github.com/peterh/liner/input_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/github.com/peterh/liner/input_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,6 +4,7 @@ import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"os"
 | 
			
		||||
	"syscall"
 | 
			
		||||
	"unicode/utf16"
 | 
			
		||||
	"unsafe"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -103,7 +104,7 @@ type key_event_record struct {
 | 
			
		||||
	RepeatCount     uint16
 | 
			
		||||
	VirtualKeyCode  uint16
 | 
			
		||||
	VirtualScanCode uint16
 | 
			
		||||
	Char            int16
 | 
			
		||||
	Char            uint16
 | 
			
		||||
	ControlKeyState uint32
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -111,6 +112,7 @@ type key_event_record struct {
 | 
			
		||||
// what golint suggests)
 | 
			
		||||
const (
 | 
			
		||||
	vk_tab    = 0x09
 | 
			
		||||
	vk_menu   = 0x12 // ALT key
 | 
			
		||||
	vk_prior  = 0x21
 | 
			
		||||
	vk_next   = 0x22
 | 
			
		||||
	vk_end    = 0x23
 | 
			
		||||
@@ -134,6 +136,7 @@ const (
 | 
			
		||||
	vk_f11    = 0x7a
 | 
			
		||||
	vk_f12    = 0x7b
 | 
			
		||||
	bKey      = 0x42
 | 
			
		||||
	dKey      = 0x44
 | 
			
		||||
	fKey      = 0x46
 | 
			
		||||
	yKey      = 0x59
 | 
			
		||||
)
 | 
			
		||||
@@ -174,6 +177,8 @@ func (s *State) readNext() (interface{}, error) {
 | 
			
		||||
	var rv uint32
 | 
			
		||||
	prv := uintptr(unsafe.Pointer(&rv))
 | 
			
		||||
 | 
			
		||||
	var surrogate uint16
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		ok, _, err := procReadConsoleInput.Call(uintptr(s.handle), pbuf, 1, prv)
 | 
			
		||||
 | 
			
		||||
@@ -184,9 +189,6 @@ func (s *State) readNext() (interface{}, error) {
 | 
			
		||||
		if input.eventType == window_buffer_size_event {
 | 
			
		||||
			xy := (*coord)(unsafe.Pointer(&input.blob[0]))
 | 
			
		||||
			s.columns = int(xy.x)
 | 
			
		||||
			if s.columns > 1 {
 | 
			
		||||
				s.columns--
 | 
			
		||||
			}
 | 
			
		||||
			return winch, nil
 | 
			
		||||
		}
 | 
			
		||||
		if input.eventType != key_event {
 | 
			
		||||
@@ -194,6 +196,17 @@ func (s *State) readNext() (interface{}, error) {
 | 
			
		||||
		}
 | 
			
		||||
		ke := (*key_event_record)(unsafe.Pointer(&input.blob[0]))
 | 
			
		||||
		if ke.KeyDown == 0 {
 | 
			
		||||
			if ke.VirtualKeyCode == vk_menu && ke.Char > 0 {
 | 
			
		||||
				// paste of unicode (eg. via ALT-numpad)
 | 
			
		||||
				if surrogate > 0 {
 | 
			
		||||
					return utf16.DecodeRune(rune(surrogate), rune(ke.Char)), nil
 | 
			
		||||
				} else if utf16.IsSurrogate(rune(ke.Char)) {
 | 
			
		||||
					surrogate = ke.Char
 | 
			
		||||
					continue
 | 
			
		||||
				} else {
 | 
			
		||||
					return rune(ke.Char), nil
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -202,6 +215,9 @@ func (s *State) readNext() (interface{}, error) {
 | 
			
		||||
		} else if ke.VirtualKeyCode == bKey && (ke.ControlKeyState&modKeys == leftAltPressed ||
 | 
			
		||||
			ke.ControlKeyState&modKeys == rightAltPressed) {
 | 
			
		||||
			s.key = altB
 | 
			
		||||
		} else if ke.VirtualKeyCode == dKey && (ke.ControlKeyState&modKeys == leftAltPressed ||
 | 
			
		||||
			ke.ControlKeyState&modKeys == rightAltPressed) {
 | 
			
		||||
			s.key = altD
 | 
			
		||||
		} else if ke.VirtualKeyCode == fKey && (ke.ControlKeyState&modKeys == leftAltPressed ||
 | 
			
		||||
			ke.ControlKeyState&modKeys == rightAltPressed) {
 | 
			
		||||
			s.key = altF
 | 
			
		||||
@@ -209,7 +225,14 @@ func (s *State) readNext() (interface{}, error) {
 | 
			
		||||
			ke.ControlKeyState&modKeys == rightAltPressed) {
 | 
			
		||||
			s.key = altY
 | 
			
		||||
		} else if ke.Char > 0 {
 | 
			
		||||
			s.key = rune(ke.Char)
 | 
			
		||||
			if surrogate > 0 {
 | 
			
		||||
				s.key = utf16.DecodeRune(rune(surrogate), rune(ke.Char))
 | 
			
		||||
			} else if utf16.IsSurrogate(rune(ke.Char)) {
 | 
			
		||||
				surrogate = ke.Char
 | 
			
		||||
				continue
 | 
			
		||||
			} else {
 | 
			
		||||
				s.key = rune(ke.Char)
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			switch ke.VirtualKeyCode {
 | 
			
		||||
			case vk_prior:
 | 
			
		||||
@@ -337,3 +360,5 @@ func TerminalMode() (ModeApplier, error) {
 | 
			
		||||
	}
 | 
			
		||||
	return mode, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const cursorColumn = true
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user