Open abitrolly opened 3 years ago
Hi @mjarkk @glvr182, I was looking to contribute to this project. I'm new to Go lang but I do have experience in other language. So I was going thought this bug description. I wonder is this really a bug because looking at the code in Parse method it is behaving as expected.
@KoditkarVedant You are correct the codes doesn't seem to support this tough i think you expect this kind of input to work.
You are welcome to add support for this!
@mjarkk What are your views on using the https://github.com/awesome-gocui/keybinding
instead of maintaining the separate implementation in this repo.
I think we should not use it to keep the amount of dependencies low.
@mjarkk how many new dependencies does it add?
I'm not really sure what is the purpose of the keybinding
library. It doesn't provide any meaningful functionality when used alone and it is not a CLI (which I thought it is) as it only provides functions to translate into gocui
keys which can be used only by gocui
(which looks kinda similar to original gocui
parsing functions with some additions).
I think that parsing of keybinds should be done in gocui
as it's used by it so it would make more sense.
Regarding keybinding
library, that could be maybe changed (or rather newly created) into CLI which would prompt for keypresses and some comments and create a Go file with all the function calls for the specific keys (probably some template function).
Anyway, just my two cents :) Regarding the original question, I'm with @mjarkk on this... there is no need to add another dependency on a file which was extracted from this library and put into separate library just to add it back to this library by a another dependency.
Also, I'm not sure if it's even possible, because that library is dependent on this library, creating circular dependency ;) I know it's a problem in one project between packages, but not sure how Golang would act when it's between modules.
For better portability across different frameworks, it would be nice to have some reference keybinding
lib. Having it in separate repo at least should make it clear what approach is used, which constants are provided, how keys are referenced from code and from an application config.
A demo that allows to test different keys and combination would be useful. Especially for different language layouts.
I see, for such a case maybe the keybinding
library makes sense. Although I guess it could be created as a submodule in this repo instead so the parser is only in one place, or maybe the parser in keybinding
should use the parser from this library. Or users could just use this library to parse the keys because this library will be downloaded anyway.
Nevertheless, you can't really make dependency in this library on keybinding
, because it is a circular dependency and keybinding
uses gocui
for the keys to produce them.
Ideally both should be merged into https://pkg.go.dev/golang.org/x/term instead of adding another layer to the cake. At least key codes and handling logic for them could be universal.
Hmmm... I guess we are talking about two different things here. keybinding
or gocui
keybinds are not based on golang.org/x/term
library.
The keys used here are obtained from underlaying tcell
library, which handles consoles/terminals across multiple platforms and have its own specific way of dealing with it.
golang.org/x/term
doesn't really fit in at all, as it only provides support for classic shell type terminal with prompt and have no special key handling available to user from what I remember (only readline or something like that). It doesn't even have key codes publicly available, so using it as a third-party library to translate those keys into gocui
can't be made even if one would want to.
On the other hand tcell
is terminal UI library which provides full control of a terminal it runs on with cell based view and all kinds of other stuff.
So these are really totally different libraries and that idea is not applicable here at all. But this is probably going already a bit off-topic. If you have a specific use case in mind which would bring some light to the problem you see, I think it might be good to open a new issue and describe it there exactly with specific examples.
Parse() fails process
Alt+
andShift+
combinations. See the code below.This outputs,
Another strange behavior is that https://pkg.go.dev/github.com/awesome-gocui/gocui#Parse should return modifier separately from
Key,
but it forCtrl+
there is no Modifier and it is mixed into the key.To Reproduce
https://play.golang.org/p/UPWMipkgA9U
Expected behavior