Golang fmt.Print ("\ 033c") и fmt.Print ("\ x1bc") не очищают экран (не работает код ANSI Escape), как это исправить? - PullRequest
0 голосов
/ 05 июня 2019

Всякий раз, когда я запускаю fmt.Print("\033c") в golang на windows cmd, он не очищает экран, но печатает c всякий раз, когда я делаю console.log("\033c") в javascript, он отлично работает.

По следующим ссылкам это должно было сработать: https://en.wikipedia.org/wiki/ANSI_escape_code#Windows

https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences#samples

Я попытался записать его в javascript, и он работает нормально. Я также попытался добавить символ \ n в конец, который напечатал c, и изменить его на \ x1bc, который также только что напечатал: c

следующие все отпечатки: c на windows cmd


func main() {
  fmt.Print("\033c")
  fmt.Print("\033c\n")
  fmt.Print("\x1bc")
  fmt.Print("\x1bc\n")
  fmt.Println("\033c")
  fmt.Println("\x1bc")
}

Я ожидал, что он просто очистит экран, как в javascript, но по какой-то причине он не

Чтобы уточнить, я говорю о том, что код выхода ANSI не работает.

1 Ответ

1 голос
/ 05 июня 2019

Проблема заключалась в том, что в Windows требуется флаг консоли ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x0004). Я исправил его, используя следующий код для добавления флага в консоль:

package main

// #include "Windows.h"
import "C"
import "fmt"

func main() {
    // Needed for getting handle and getting current console mode
    var mode C.DWORD
    handle := C.GetStdHandle(C.STD_OUTPUT_HANDLE)
    C.GetConsoleMode(handle, &mode)

    // Enable Virtual Terminal Processing by adding the flag to the current mode
    C.SetConsoleMode(handle, mode|0x0004)
    fmt.Print("\033c")
}

SetConsoleMode

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...