Is there a Go function similar to C's getchar able to handle tab press in console? I want to make some sort of completion in my console app.
getchar
C's getchar() example:
getchar()
#include <stdio.h> void main() { char ch; ch = getchar(); printf("Input Char Is :%c",ch); }
Go equivalent:
package main import ( "bufio" "fmt" "os" ) func main() { reader := bufio.NewReader(os.Stdin) input, _ := reader.ReadString(' ') fmt.Printf("Input Char Is : %v", string([]byte(input)[0])) // fmt.Printf("You entered: %v", []byte(input)) }
The last commented line just shows that when you press tab the first element is U+0009 ('CHARACTER TABULATION').
tab
However for your needs (detecting tab) C's getchar() is not suitable as it requires the user to hit enter. What you need is something like ncurses' getch()/ readline/ jLine as mentioned by @miku. With these, you actually wait for a single keystroke.
So you have multiple options:
Use ncurses / readline binding, for example https://code.google.com/p/goncurses/ or equivalent like https://github.com/nsf/termbox
ncurses
readline
Roll your own see http://play.golang.org/p/plwBIIYiqG for starting point
use os.Exec to run stty or jLine.
os.Exec
refs:
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/zhBE5MH4n-Q
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/S9AO_kHktiY
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/icMfYF8wJCk
1.4m articles
1.4m replys
5 comments
57.0k users