display_windows.go 621 B

123456789101112131415161718192021222324252627
  1. package terminal
  2. import (
  3. "syscall"
  4. "unsafe"
  5. )
  6. func EraseLine(out FileWriter, mode EraseLineMode) {
  7. handle := syscall.Handle(out.Fd())
  8. var csbi consoleScreenBufferInfo
  9. procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi)))
  10. var w uint32
  11. var x Short
  12. cursor := csbi.cursorPosition
  13. switch mode {
  14. case ERASE_LINE_END:
  15. x = csbi.size.X
  16. case ERASE_LINE_START:
  17. x = 0
  18. case ERASE_LINE_ALL:
  19. cursor.X = 0
  20. x = csbi.size.X
  21. }
  22. procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(x), uintptr(*(*int32)(unsafe.Pointer(&cursor))), uintptr(unsafe.Pointer(&w)))
  23. }