forked from toolshed/abra
		
	
		
			
				
	
	
		
			32 lines
		
	
	
		
			731 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			731 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package terminal
 | |
| 
 | |
| import (
 | |
| 	"syscall"
 | |
| 	"unsafe"
 | |
| )
 | |
| 
 | |
| func EraseLine(out FileWriter, mode EraseLineMode) error {
 | |
| 	handle := syscall.Handle(out.Fd())
 | |
| 
 | |
| 	var csbi consoleScreenBufferInfo
 | |
| 	if _, _, err := procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))); normalizeError(err) != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	var w uint32
 | |
| 	var x Short
 | |
| 	cursor := csbi.cursorPosition
 | |
| 	switch mode {
 | |
| 	case ERASE_LINE_END:
 | |
| 		x = csbi.size.X
 | |
| 	case ERASE_LINE_START:
 | |
| 		x = 0
 | |
| 	case ERASE_LINE_ALL:
 | |
| 		cursor.X = 0
 | |
| 		x = csbi.size.X
 | |
| 	}
 | |
| 
 | |
| 	_, _, err := procFillConsoleOutputCharacter.Call(uintptr(handle), uintptr(' '), uintptr(x), uintptr(*(*int32)(unsafe.Pointer(&cursor))), uintptr(unsafe.Pointer(&w)))
 | |
| 	return normalizeError(err)
 | |
| }
 |