Learn the helix editor keymap on the web!

Overview

pages-build-deployment

Helix Shortcut Quiz

A web quiz built with yew for testing your knowledge of helix editor shortcuts.

helix-shortcut-quiz

Development

Installation

Frontend

If you don't already have it installed, it's time to install Rust: https://www.rust-lang.org/tools/install.

To compile Rust to WASM, we need to have the wasm32-unknown-unknown target installed. Install it with the following command:

rustup target add wasm32-unknown-unknown

Install trunk:

cargo install trunk
GIF generation

The yew app serves GIFs generated by vhs. The current state of vhs doesn't support the recording of the helix block cursor. The problem lies deeper within the ttyd dependency which uses the xterm.js canvas addon.

If you want to generate the GIFs yourself you should go ahead, clone the custom forks I made and use those binaries instead. After building the two binaries place them in the gif_generation/ directory and execute generate_all_gifs.sh.

Running

trunk serve
Comments
  • Store categories that a user finished in local storage

    Store categories that a user finished in local storage

    If a user who already played the first category, he shouldn't be prompted with the same category again after page reload or on a new visit. Store finished categories in local storage and on app creation take this into account.

    enhancement 
    opened by tomgroenwoldt 1
  • Allow preset for every GIF independently

    Allow preset for every GIF independently

    Currently the window mode has the prefix Ctrl+w, because this shortcut conflicts with the browser interface. This is a great solution, but some GIFs have problematic shortcuts which don't apply for the whole category. Allowing a GIF to have an own preset would solve this.

    opened by tomgroenwoldt 0
  • Add solution button

    Add solution button

    This PR solves #16. It also removes the Ctrl + R command to restart the application, because we use the local storage now and a dedicated reset button fulfills the purpose of resetting/restarting the game/category.

    enhancement 
    opened by tomgroenwoldt 0
  • Add basic game and GIF generation

    Add basic game and GIF generation

    This PR adds the basic game frontend as well logic for the generation of GIFs, which are the main part of the game. The GIFs are generated by a custom fork of vhs which again uses a custom fork of ttyd (otherwise the helix cursor wouldn't be recorded).

    opened by tomgroenwoldt 0
  • Refactor GIF data structure

    Refactor GIF data structure

    Solves #9.

    I GIFs are no longer stored in a plain Vec<_> but in a Vec<Rc<RefCell<_>>> as I want to share the current GIF and mutate this specific GIF via self.current_gif.

    It's quite messy, this will be tidied up before merging into main.

    enhancement 
    opened by tomgroenwoldt 0
  • Add Spaced Repetition and Randomize Order of Commands

    Add Spaced Repetition and Randomize Order of Commands

    Hi there,

    I recently discovered your GitHub project for learning Helix through GIFs and I must say, I'm impressed with the idea. However, I noticed that the commands are always presented in a specific order, which may make it easy for users to simply follow a pattern rather than actually learning the commands.

    For example, the project often presents the command "move cursor down" followed by "move cursor up". While this order may help users memorize the commands more easily, it may also lead to users simply following the pattern instead of actually learning the commands. They may automatically press "k" after "j" without reading the statement.

    As a suggestion, I would like to request two features that could improve the learning experience:

    • Spaced Repetition: This would help users to remember the commands more effectively by presenting them at specific intervals to improve long-term memory retention.

    • Randomized Order: This would ensure that users are actually learning the commands and not just following a memorized pattern. It would also make the learning experience more engaging and challenging.

    enhancement 
    opened by khanra17 4
  • Refactor the gif data structure

    Refactor the gif data structure

    The current approach is kinda messy, let's try to implement a vector of GIFs, which can be playable, played, and so on. This way skipping will be less complicated and everything should be a bit tidier.

    enhancement 
    opened by tomgroenwoldt 0
Owner
Tom Groenwoldt
Hey, I'm Tom and currently studying computer science in Hamburg. I enjoy Rust and type a lot in my free time!
Tom Groenwoldt
dua (-> Disk Usage Analyzer) is a tool to conveniently learn about the usage of disk space of a given directory

dua (-> Disk Usage Analyzer) is a tool to conveniently learn about the usage of disk space of a given directory. It's parallel by default and will max

Sebastian Thiel 1.8k Jan 2, 2023
A list of crates with snippets used by me to learn more about Rust.

my-rust-examples This is a list of crates used by me to learn Rust. How to execute You can use a dependency called cargo-play: cargo install cargo-pla

Ronald 0 Jan 3, 2022
How to learn modern Rust - A guide to the adventurer.

How to learn modern Rust A guide to the adventurer. Table of Contents Learn Rust deeply one step after the other Text Processing in Rust How Rust maps

João Nuno Carvalho 2.5k Jan 4, 2023
A Turing-complete but dead-simple spaced repetition CLI that helps you learn stuff.

Forne — Learn Stuff Forne is a Turing-complete spaced repetition engine to help you learn stuff your way. What does that mean? Well, there are a few p

Sam Brew 9 May 12, 2023
Programming language made by me to learn other people how to make programming languages :3

Spectra programming language Programming language made for my tutorial videos (my youtube channel): Syntax Declaring a variable: var a = 3; Function

Adi Salimgereyev 3 Jul 25, 2023
Amp: A text editor for your terminal.

Amp: A text editor for your terminal. Heavily inspired by Vi/Vim. Amp aims to take the core interaction model of Vim, simplify it, and bundle in the e

Jordan MacDonald 3.3k Jan 3, 2023
Basic vim-like editor for Redox-OS

red red is an editor based on vim written in Rust. Goal of this project is to provide a basic command-line editor, much like nano. Targeted for Redox.

null 1 Mar 5, 2022
Native cross-platform full feature terminal-based sequence editor for git interactive rebase.

Native cross-platform full feature terminal-based sequence editor for git interactive rebase.

Tim Oram 1.2k Jan 2, 2023
Ox is a code editor that runs in your terminal

Ox editor Ox is a code editor that runs in your terminal. About The Project Ox is a code editor. It was written in Rust using ANSI escape sequences. I

null 0 Feb 3, 2022
A standalone code editor with syntax highlighting and themes.

CodeEditor A standalone code (and text) editor for people like me who write their own user interfaces utilizing crates like pixels. CodeEditor renders

Markus Moenig 8 Nov 25, 2022
Move multiple files, with the power of your editor

NOTE FOR USERS THAT WANT TO TRY THIS OUT! The current code on the master branch doesn’t work as documented, as a newer more powerful interface is bein

Thomas Voss 3 Dec 22, 2022
Simple code editor made with Freya 🦀

Simple code editor made with Freya ?? This is a >work in progress< simple code editor that showcases how to use tree-sitter and freya together. WARNIN

Marc Espín 12 Dec 12, 2022
A structure editor for a simple functional programming language, with Vim-like shortcuts and commands.

dilim A structure editor for a simple functional programming language, with Vim-like shortcuts and commands. Written in Rust, using the Yew framework,

Joomy Korkut 6 Nov 18, 2022
Julia plugin for the Lapce Editor (using LanguageServer.jl)

Lapce Julia (LanguageServer) Lapce plugin for the Julia language powered by LanguageServer.jl Pre-requisites Make sure you have the julia binary on PA

Chetan Vardhan 4 Jan 12, 2023
A basic text editor, written in Rust (hence the name).

rut A basic text editor, written in Rust (hence the name). Why, though? I just wanted a basic TUI text editor (like Nano) that could: Be used with all

Lowell Thoerner 4 Feb 3, 2023
Simple yet powerful multi-line text editor widget for tui-rs and ratatui

tui-textarea tui-textarea is a simple yet powerful text editor widget like <textarea> in HTML for tui-rs and ratatui. Multi-line text editor can be ea

Linda_pp 126 Jul 12, 2023
nvim-oxi provides safe and idiomatic Rust bindings to the rich API exposed by the Neovim text editor.

?? nvim-oxi nvim-oxi provides safe and idiomatic Rust bindings to the rich API exposed by the Neovim text editor. The project is mostly intended for p

Riccardo Mazzarini 655 Jul 13, 2023
A simple hinting Rust binary to be used in the Kakoune editor

Hop: hinting brought to Kakoune selections Table of content: Install Configuration Kakoune options hop-kak options Usage Workflow examples Default key

Dimitri Sabadie 11 Dec 29, 2023
SysEx editor for Roland SC-55 (GS), Roland SC-7, and eventually maybe Yamaha XG

SoundPalette: MIDI SysEx Generator This is the source code for SoundPalette, a tool for editing MIDI System Exclusive (SysEx) messages for the Roland

hikari_no_yume 9 Dec 8, 2023