Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Ghost cursor" artifact left behind after user types a line on Windows 10 #155

Open
shueybubbles opened this issue Mar 8, 2022 · 4 comments

Comments

@shueybubbles
Copy link

I'm evaluating line input modules to use for my Golang version of sqlcmd (github.com/microsoft/go-sqlcmd)
So far liner looks like a good candidate except for this display glitch. I can't tell if it's a Windows problem or an issue with the module. When my process exits the ghost cursor images disappear.

  • Operating System (eg. Windows, Linux, Mac)
    WINDOWS 10
  • Terminal Emulator (eg. xterm, gnome-terminal, konsole, ConEmu, Terminal.app, Command Prompt)
    Command Prompt
  • Bug behaviour
    Liner leaves behind a static cursor image on the first character of input
  • Expected behaviour
    No such distracting artifacts
  • Complete sample that reproduces the bug
package main

import (
	"fmt"

	"github.com/peterh/liner"
)

func main() {
	line := liner.NewLiner()
	defer line.Close()
	text := ""
	var err error
	for text != "q" {
		text, err = line.Prompt("Prompt:")
		if err == nil {
			fmt.Println("You typed:" + text)
		}
	}
}

image

image

@peterh
Copy link
Owner

peterh commented Mar 8, 2022

Liner doesn't draw the cursor, it is up to the Windows Console (or terminal emulator on other platforms) to draw the cursor.

I use a program built with Liner on Windows every day. I don't recall seeing that particular issue in the past few years, but I switched from "Command Prompt" (aka "Windows Console") to "Windows Terminal" as soon as it became available. (You can get Windows Terminal from the Windows Store, and I believe Windows Terminal is the default on Windows 11), and my Windows Terminal configuration uses a block cursor instead of the underline cursor shown in your screenshot.

@shueybubbles
Copy link
Author

@peterh I have another report of my app causing the bash window on a Mac to behave oddly after the app exits.
The issue they opened is microsoft/go-sqlcmd#87
"but go-sqlcmd still makes bash shell command line behave erratically after exiting sqlcmd."

Might you have a few minutes to look at our use of liner to make sure we're not using it in some obviously incorrect manner? Our wrapper class for it is at https://github.com/microsoft/go-sqlcmd/blob/e3972914801bc3492b49b6fe642a7e931e088be3/pkg/console/console.go#L24

There are probably several other go packages I could replace it with for reading lines but picking from the vast set to land on one that meets all our needs can take a while, so I'm hoping I can get liner to work.

@shueybubbles
Copy link
Author

shueybubbles commented May 20, 2022

Would forgetting to call Close() before exiting the process cause any such issues in a shell?

@peterh
Copy link
Owner

peterh commented May 21, 2022

Would forgetting to call Close() before exiting the process cause any such issues in a shell?

Yes. You must call Close() or the tty will be left in an indeterminate state.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants