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

Game controller navigation #670

Open
argenkiwi opened this issue Jun 9, 2024 · 7 comments
Open

Game controller navigation #670

argenkiwi opened this issue Jun 9, 2024 · 7 comments
Labels
enhancement New feature or request

Comments

@argenkiwi
Copy link

I was wondering if supporting navigation with a game controller (gamepad or joystick) would be possible with a Gemini client like Lagrange.

The reason I ask is because I use an unusual Linux distro called Batocera that is meant to be controlled with a gamepad and joysticks. For that reason they don't have we browsing capabilities I suppose. They do have a file manager called OD Commander that is bundled as what they call a Port (which I believe is like an AppImage). I think a retro-gaming an media-center distro like this could really benefit from using a Gemini client to navigate through their Wiki, access content and much more.

Please feel free to close the issue if it's too off topic, but I would love to hear your thoughts on the technical feasibility of using Lagrange within Batocera.

@skyjake skyjake added the enhancement New feature or request label Jun 9, 2024
@skyjake
Copy link
Owner

skyjake commented Jun 9, 2024

I think this would be feasible to implement, and would actually be useful also in a regular Android TV kind of setup. I can't comment specifically about Batocera because I'm unfamiliar with it but thanks to SDL the unlying platform is pretty much abstracted away.

For v1.18 I've been improving usability of the UI when one only has a keyboard, making focus navigation more sophisticated and fixing some event conflicts, etc. This work is directly applicable — required, even — for game controllers as well.

What still needs implementing:

  • Handling the various game controller / joystick axis and button events. They can be directly mapped to pre-existing event handling, like trackpad navigation, scrolling and key actions.
  • Making the game controllers / joysticks bindable in the Preferences ("Keys" tab).

@argenkiwi
Copy link
Author

argenkiwi commented Jun 9, 2024

That sounds very promising! I have just reached out to the Batocera community via Reddit to gauge interest. I think it would be an exciting experiment to make Lagrange available in there, as a Port to begin with I presume. I'll try to get that to work myself or see if I can get some help to do it.

If you are curious about Batocera and you have a USB drive laying around, I'd encourage you to flash Batocera's latest build for x86 systems into it and boot it on any PC. Alternatively, ETA Prime is a good Youtube channel to learn about it.

I would expect a community around retro-gaming and media preservation would be very receptive to the Small Internet concept, particularly considering the nostalgic side of it. They already seem to put a lot of effort putting together content around old games and consoles they are passionate about, the Gemini protocol could provide a more flexible alternative for them to contribute to their passion projects. I am hopeful the Batocera community could give the gemini-space a good boost.

Thanks for the prompt reply and the positive take on my suggestion.

@argenkiwi
Copy link
Author

UPDATE: runs like a charm! Following the documentation for Ports I managed to get the Lagrange AppImage running without issues on Batocera. Of course I need a mouse and keyboard to use it for the moment. Looking forward to the improved keyboard support and eventually game controller support, whenever you find the time to add them. 👪 Thanks!

@argenkiwi
Copy link
Author

argenkiwi commented Jan 9, 2025

UPDATE: I had some time this morning to test the latest (v1.18.4) on Batocera following the instructions mentioned in my previous comment (it took me a while to remember I needed to ssh into Batocera to make the app image executable 🤦). I learned that Batocera allows you to map gamepad inputs to keyboard keys. I made sure to map the D-pad to the arrows and some of the buttons to Esc, Tab and Enter/Return. Now I can navigate the menus and scroll up and down a page. Most importantly, I can now quit Lagrange even if I don't have a keyboard or mouse around. 😆

I couldn't figure out a way to navigate the content and interact with links and not being able to type a URL does limit the experience substantially. But it still feels like great progress!

@argenkiwi
Copy link
Author

argenkiwi commented Jan 10, 2025

Actually, if you bind the left and right analog stick to the home row letters you can actually drill down into the links somewhat intuitively. I'm super happy with that! 😁

@skyjake
Copy link
Owner

skyjake commented Jan 10, 2025

@argenkiwi Glad to hear it's somewhat usable. For proper link navigation, we either need a way to move the keyboard focus onto a visible link, or add a new link navigation mode (in addition to home row and Alt-numbered modes) specifically designed for arrow key / gamepad use.

@argenkiwi
Copy link
Author

Thanks @skyjake. That makes perfect sense. I am aware that the fact I was able to do what I described above is merely circumstantial at this stage and that the proper implementation for this use case will be implemented in due time.

One question I am struggling to answer to myself is: would a virtual keyboard, which would enable gamepads and TV remotes to type, have to be implemented into Lagrange or would the host system be expected to provide one?

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

No branches or pull requests

2 participants