Explorar o código

add 'CSI<n>X"

Alec The Rabbit %!s(int64=6) %!d(string=hai) anos
pai
achega
dc1ad59cf7
Modificáronse 1 ficheiros con 24 adicións e 2 borrados
  1. 24 2
      colorable_windows.go

+ 24 - 2
colorable_windows.go

@@ -12,8 +12,6 @@ import (
 	"strings"
 	"strings"
 	"syscall"
 	"syscall"
 	"unsafe"
 	"unsafe"
-
-	"github.com/mattn/go-isatty"
 )
 )
 
 
 const (
 const (
@@ -635,6 +633,30 @@ loop:
 			}
 			}
 			procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
 			procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
 			procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
 			procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(count), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+		case 'X':
+			n := 0
+			if buf.Len() > 0 {
+				n, err = strconv.Atoi(buf.String())
+				if err != nil {
+					continue
+				}
+			}
+			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
+			var cursor coord
+			var count, written dword
+			cursor = coord{x: csbi.cursorPosition.x, y: csbi.cursorPosition.y}
+			// switch n {
+			// case 0:
+			// 	count = dword(csbi.size.x - csbi.cursorPosition.x)
+			// case 1:
+			// 	cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}
+			// 	count = dword(csbi.size.x - csbi.cursorPosition.x)
+			// case 2:
+			// 	cursor = coord{x: csbi.window.left, y: csbi.cursorPosition.y}
+			// 	count = dword(csbi.size.x)
+			// }
+			procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(n), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
+			procFillConsoleOutputAttribute.Call(uintptr(handle), uintptr(csbi.attributes), uintptr(n), *(*uintptr)(unsafe.Pointer(&cursor)), uintptr(unsafe.Pointer(&written)))
 		case 'm':
 		case 'm':
 			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
 			attr := csbi.attributes
 			attr := csbi.attributes