| 692 | } |
| 693 | |
| 694 | func getPosition() (int, int, error) { |
| 695 | fd := int(os.Stdout.Fd()) |
| 696 | state, err := readline.MakeRaw(fd) |
| 697 | if err != nil { |
| 698 | return 0, 0, err |
| 699 | } |
| 700 | defer readline.Restore(fd, state) |
| 701 | fmt.Printf("\033[6n") |
| 702 | var out string |
| 703 | reader := bufio.NewReader(os.Stdin) |
| 704 | for { |
| 705 | b, err := reader.ReadByte() |
| 706 | if err != nil || b == 'R' { |
| 707 | break |
| 708 | } |
| 709 | if unicode.IsPrint(rune(b)) { |
| 710 | out += string(b) |
| 711 | } |
| 712 | } |
| 713 | var row, col int |
| 714 | _, err = fmt.Sscanf(out, "[%d;%d", &row, &col) |
| 715 | if err != nil { |
| 716 | return 0, 0, err |
| 717 | } |
| 718 | |
| 719 | return col, row, nil |
| 720 | } |