Code Monkey home page Code Monkey logo

smassh's Introduction

SMASSH

Smassh ๐Ÿ–ฎ

Smassh is a TUI based typing test application inspired by MonkeyType
-- A very popular online web-based typing application

Smassh tries to be a full fledged typing test experience but not missing out on looks and feel!

GitHub issues GitHub stars GitHub license Support Server

Caution

Smassh, by default, uses nerd fonts for the icons If not installed, you'll see random gibberish icons

Installation ๐Ÿ”จ

Using Pip ๐Ÿ

You can install the stable version of smassh by using pip or pipx

pip install smassh

Using AUR ๐Ÿ“ฆ

yay -S smassh-bin

Executable binary ๐Ÿ”Œ

You should be able to see binaries for Linux, mac and windows in the releases section

Note

This should automatically create an executable smassh that can be directly run from command line
If not, check if the local path is added to $PATH

Features ๐ŸŒŸ

Some features that smassh comes with:

  • An interactive & beautiful UI
  • Words and Time modes for typing
  • Real-time comparison of speed carets
  • Change styles/settings on the fly
  • Mutliple theme support
  • Mutliple language support
  • Lots of options to tweak!

Tweaks โš™๏ธ

Tweak Description
Blind mode You wouldn't be able to see your mistakes
Capital Letters Some letters in your tasks will be capitalized!
Caret Style Caret style matters!
Confidence mode Are you sure you don't need backspace? Try this :)
Cursor Buddy Setup your cursor buddy to run along with you!
Difficulty Choose how strict smassh should be with your wrong keypresses
Force Correct You wouldn't be able to able to go on without cleaning your pool of mistakes
Min Accuracy Fall below this average accuracy and you fail!
Min Burst Fall below this average accuracy for even a word and you fail!
Min Speed Fall below this average speed and you fail!
Tab Reset Hey hey! You wanna reset already? I got ya!

Screenshots ๐Ÿ–ผ๏ธ

github

Contribution ๐Ÿค

See CONTRIBUTING.md for contributions

Credits

@frizd for the awesome banner
@miodec for monkeytype!

Other TUI projects ๐Ÿค“ :

If you liked smassh then you might wanna try out some of my other TUI projects as well

  • dooit - A todo app that you didn't ask for but needed!
  • gupshup - A localhost TUI chat client

smassh's People

Contributors

a-usr avatar alec-kr avatar dimosped avatar eklairs avatar finnperry avatar fuzzy9876 avatar incognitux avatar isaac-8601 avatar jaxvanyang avatar jenniferdewan avatar kraanzu avatar muditj avatar narmis-e avatar periodleo avatar ponderstine avatar rewardedivan avatar thales-maciel avatar tlc-10 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smassh's Issues

Alt+backspace at start of test throws error [BUG]

Describe the bug ๐Ÿ›

Using alt+backspace to remove an entire word when there are no letters typed throws an index error and quits the program.

To Reproduce ๐Ÿฃ

  1. start smassh
  2. alt+backspace

Expected behavior ๐Ÿค”

Nothing should happen if there are no letters or words that have been written.

Screenshots ๐Ÿง

image

Your operating system name

Arch Linux

Your operating system version

6.7.3-arch1-1

Additional context ๐Ÿ“

Using kitty inside a tmux session (same thing happens without tmux however). I cant offer much help with my (lack of) expertise in python but is the correct=<Match.BACKSPACE: 3> part of the checkpoint trying to remove up until a third letter when there are none? This isn't a big issue as nobody needs to backspace at the start, but just thought I'd let you know.

Installed via AUR.

EDIT: I just noticed you made a fix for using ctrl+w which had the same issue, is this something similar?

[BUG] Test ending after typing one character.

Describe the bug ๐Ÿ›

This bug starts occurring after doing the first test at startup. The test ends after typing a character.

To Reproduce ๐Ÿฃ

  1. Start smassh.
  2. Do a test.
  3. Do a test again.

Expected behavior ๐Ÿค”

No response

Screenshots ๐Ÿง

smassh.webm

Your operating system name

Arco Linux

Your operating system version

6.7.3-arch1-2

Additional context ๐Ÿ“

No response

๐Ÿ’ก [FEAT] Decrease navbar height when the terminal is zoomed in

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.

I zoom in my terminal emulator to make the words easier to read (and to make it closer to Monkeytype). I know having separate font sizes for the words and other TUI elements isn't possible since we're in a terminal.

image
Small text

image
The text is the right size but the navbar is really tall

Describe the solution you'd like ๐Ÿค”

Make a small version of the logo and decrease the navbar height when the terminal is zoomed in (aka few columns).

Describe alternatives you've considered ๐Ÿง

Don't zoom in, or live with the tall header

Additional context ๐Ÿ“

Operating system

EndeavourOS

Terminal emulator

Konsole

Smassh version

smassh --version crashes

I just noticed another bug wow

$ smassh --version
Traceback (most recent call last):
  File "smassh.py", line 2, in <module>
  File "click/core.py", line 1157, in __call__
  File "click/core.py", line 1078, in main
  File "click/core.py", line 1666, in invoke
  File "click/core.py", line 1434, in invoke
  File "click/core.py", line 783, in invoke
  File "click/decorators.py", line 33, in new_func
  File "smassh/__init__.py", line 20, in main
  File "importlib/metadata/__init__.py", line 996, in version
  File "importlib/metadata/__init__.py", line 969, in distribution
  File "importlib/metadata/__init__.py", line 548, in from_name
importlib.metadata.PackageNotFoundError: No package metadata was found for smassh
[223112] Failed to execute script 'smassh' due to unhandled exception!

smassh AUR package version: 3.0.3-1

๐Ÿ’ก [FEAT] Highscore Page

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.

No

Describe the solution you'd like ๐Ÿค”

Basically a Tab that displays a Highscore for Words per Minute, and the Accuracy you had when you set the Highscore. That Highscore would of course have to be saved somewhere, so I propose just pickling the number and then saving it in binary in a file next to the config. This has the advantage of making tampering with the highscore more difficult.

Describe alternatives you've considered ๐Ÿง

No response

Additional context ๐Ÿ“

Would be nice for the Unixporn community to have. And would thus increase popularity of your project. Also, on a side note, your project got starred by Elkowar, so congrats!

๐Ÿ’ก [FEAT] adjustments for number string length and frequency and punctuation frequency and type

Currently number string frequency and length are not controllable, there's only an on/off switch. Same for punctuation but for punctuation it would also be nice to be able to control what punctuation characters are able to appear. Preferably as writable list like {[()]}*!=?&.,_:;~'|<>^ if that's not too hard to implement.

I've recently setup additional keylayers commonly used on 40% keyboards so I'm able to type numbers and special characters without leaving the letter keys, this looks like a good offline trainer for learning those layers which is usable even on a shittop but its numbers and special characters are far too sparse for my preferences and I feel like I'm wasting time writing regular words too much.

๐Ÿ’ก [FEAT] letter capitalization

From what I can see the current word casing is all lowercase. It would be nice to have capitalization like word Word WORD.

Maybe options for WritingInCamelCase and writing_in_snake_case for coders.

Keybinding support

Hi, I tried your TUI program and really liked it, but the lack of keybinding supports for deleting single words and lines slows the typing process down a bit. It would be great to have keybinding features in the next update!

๐Ÿ› Keypress sound not working

Describe the bug ๐Ÿ›
When pressing a key, instead of a sound coming, it shows an error at the bottom of the screen

To Reproduce ๐Ÿฃ
Steps to reproduce the behavior:

  1. Enable the sound option
  2. Type some text
  3. See error

Expected behavior ๐Ÿค”
It should play the keypress sound

Screenshots ๐Ÿง
gif
A still image of the error (from the gif)
image

Desktop (please complete the following information): ๐Ÿค–

  • OS: Windows 11
  • Version 22H2 (22581.200)

Additional context ๐Ÿ“
It seems like the file path being passed to playsound is from the python 3.9 directory instead of being in the python 3.10 one where I installed termtyper. I've uninstalled playsound and termtyper from python 3.9, I only have them in python 3.10 but this still occurs.
image

File Tree

Python 3.10
Contains the sounds required
image

Python 3.9
Doesn't even have the termtyper directory
image

This line seems to be the problem

https://github.com/kraanzu/termtyper/blob/9da5010f8349bd8bf487b5b48042d769c8e79c17/src/termtyper/utils/parser.py#L26-L35

This assumes the pip command is always going to be from the python interpreter termtyper is installed in. In my case, I have the pip command set to python 3.9, so the rich location shown by pip show rich is the one from that, for python 3.9 it would need to run py -3.10 -m pip show rich, but why does it even need to run these commands? just to get the path where termtyper is installed? for that you can just use the following snippet:

import os.path

sounds = os.path.join(os.path.dirname(__file__), "sounds", "mech.wav")

This is what I use in my pypi-command-line package and it works great.

I just realized that I can set sounds_loc in my config but it should set the location automatically though

๐Ÿ’ก Highest Score mentioned after each try

I think it would be neat to see your highest score amongst the "raw speed, corrected speed, accuracy, time taken, Highest score".

Let me know if you want to implement this and I can actually fork the repo and add it myself. would be great practice for me. Let me know! Thanks :)

I can't install it with python3.9

Describe the bug ๐Ÿ›
terminal run :

pip3.9 install .

result :

Processing /Users/powerless/Documents/python_space/termtyper
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting textual<0.2.0,>=0.1.15
  Using cached textual-0.1.18-py3-none-any.whl (89 kB)
ERROR: Package 'termtyper' requires a different Python: 3.9.13 not in '<4.0,>=3.10'
WARNING: There was an error checking the latest version of pip.

Desktop (please complete the following information): ๐Ÿค–

  • OS: [mac m1]
  • Version [macos 12]

๐Ÿ’ก [FEAT] Add a 2 second delay before ending the test due to min setting restriction

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.

Typing test ends because of the first three settings #74

Describe the solution you'd like ๐Ÿค”

We should wait for like ~2s before ending the test because the calculation for the first few keystrokes is highly variable

Describe alternatives you've considered ๐Ÿง

Deleting the app

Additional context ๐Ÿ“

No response

[BUG] Hitting backspace multiple times does not delete characters

Describe the bug ๐Ÿ›

When you hit the backspace the first time it deletes the character but if you hit it multiple times it only moves the cursor without deleting the characters. This results in the cursor being behind the typed text and when you try to finish a word count type test it crashes with an index out of bounds error.

To Reproduce ๐Ÿฃ

  1. open the program
  2. set to words mode
  3. start typing
  4. hit backspace a few of time
  5. continue typing until you complete it

Expected behavior ๐Ÿค”

The characters should be deleted when you hit backspace not just move the cursor.

Screenshots ๐Ÿง

20240204_11h10m58s_grim

20240204_11h12m16s_grim

Your operating system name

Linux

Your operating system version

Fedora 38

Additional context ๐Ÿ“

No response

[BUG] Switching off Blind Mode doesnt actually switch it off

Describe the bug ๐Ÿ›

Switching off Blind mode results in Blind mode being displayed as deactivated, while still being acivated

To Reproduce ๐Ÿฃ

  1. Activate Blind mode in the Options
    -> Blind Mode is successfully activated
  2. Deactivate Blind Mode in the Options
    -> Blind Mode is displayed as deactivated, but when testing it appears to be still on

Expected behavior ๐Ÿค”

Blind mode Turns off when told

Screenshots ๐Ÿง

No response

Your operating system name

Windows 10

Your operating system version

Yeah no I wont tell you that sorry

Additional context ๐Ÿ“

The Root of this problem might be that the program sets the "blind_mode" key in the settings to "on" or "off" when it should be "true" or "false", as displayed here:
image

๐Ÿ’ก [FEAT] Possibilty to switch language to generate the typing paragraph

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Being able to change language settings in order to generate words from other language than English i.e. exercise typing by writting french, german, spanish, ... words

Describe the solution you'd like ๐Ÿค”
A clear and concise description of what you want to happen.
Going to misc settings, switching language and then every paragraph you'll get will only use words of the desired language

Describe alternatives you've considered ๐Ÿง
A clear and concise description of any alternative solutions or features you've considered.
I've figured out a solution locally consisting of creating a folder with a file for every language desired (english & french for the moment) and adding a "language" settings in Misc. It seems to work well for the moment, I can fork the project and open a PR if you are interested by this feature !

Additional context ๐Ÿ“
Add any other context or screenshots about the feature request here.
In order to add any other language you just have to create a language_words.py with a language_words variable in words folder,
then import the variable to generator.py, add a case to the switch case inside generate func, and finally add the option in the language setting in setting_options.py.

[BUG] Division by zero

Describe the bug ๐Ÿ›

The application panics with ZeroDivisionError when calculating the accuracy on a new test when the first character is erased.

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ /Users/yolk/Library/Application Support/pipx/venvs/smassh/lib/python3.12/site-packages/smassh/ui/widgets/typing/space.py:153 in check_restrictions                                                                                                                         โ”‚
โ”‚                                                                                                                                                                                                                                                                            โ”‚
โ”‚   150 โ”‚   โ”‚   โ”‚   return                                                                       โ•ญโ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                                                                                     โ”‚
โ”‚   151 โ”‚   โ”‚                                                                                    โ”‚ min_speed = 3       โ”‚                                                                                                                                                     โ”‚
โ”‚   152 โ”‚   โ”‚   if min_speed := config_parser.get("min_speed"):                                  โ”‚      self = Space() โ”‚                                                                                                                                                     โ”‚
โ”‚ โฑ 153 โ”‚   โ”‚   โ”‚   wpm = self.tracker.stats.wpm                                                 โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                                                                                     โ”‚
โ”‚   154 โ”‚   โ”‚   โ”‚   if wpm < min_speed:                                                                                                                                                                                                                                      โ”‚
โ”‚   155 โ”‚   โ”‚   โ”‚   โ”‚   return self.finish_typing()                                                                                                                                                                                                                          โ”‚
โ”‚   156                                                                                                                                                                                                                                                                      โ”‚
โ”‚                                                                                                                                                                                                                                                                            โ”‚
โ”‚ /Users/yolk/Library/Application Support/pipx/venvs/smassh/lib/python3.12/site-packages/smassh/src/stats_tracker.py:116 in wpm                                                                                                                                              โ”‚
โ”‚                                                                                                                                                                                                                                                                            โ”‚
โ”‚   113 โ”‚                                                                                        โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                                    โ”‚
โ”‚   114 โ”‚   @property                                                                            โ”‚ self = <smassh.src.stats_tracker.StatsTracker object at 0x1066ae120> โ”‚                                                                                                    โ”‚
โ”‚   115 โ”‚   def wpm(self) -> int:                                                                โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                                    โ”‚
โ”‚ โฑ 116 โ”‚   โ”‚   return round(self.raw_wpm * (self.accuracy / 100))                                                                                                                                                                                                           โ”‚
โ”‚   117 โ”‚                                                                                                                                                                                                                                                                    โ”‚
โ”‚   118 โ”‚   @property                                                                                                                                                                                                                                                        โ”‚
โ”‚   119 โ”‚   def correct(self) -> int:                                                                                                                                                                                                                                        โ”‚
โ”‚                                                                                                                                                                                                                                                                            โ”‚
โ”‚ /Users/yolk/Library/Application Support/pipx/venvs/smassh/lib/python3.12/site-packages/smassh/src/stats_tracker.py:111 in accuracy                                                                                                                                         โ”‚
โ”‚                                                                                                                                                                                                                                                                            โ”‚
โ”‚   108 โ”‚                                                                                        โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ locals โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ                                                                                                    โ”‚
โ”‚   109 โ”‚   @property                                                                            โ”‚ self = <smassh.src.stats_tracker.StatsTracker object at 0x1066ae120> โ”‚                                                                                                    โ”‚
โ”‚   110 โ”‚   def accuracy(self) -> int:                                                           โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ                                                                                                    โ”‚
โ”‚ โฑ 111 โ”‚   โ”‚   accuracy = (self.correct / (self.correct + self.incorrect)) * 100                                                                                                                                                                                            โ”‚
โ”‚   112 โ”‚   โ”‚   return round(accuracy)                                                                                                                                                                                                                                       โ”‚
โ”‚   113 โ”‚                                                                                                                                                                                                                                                                    โ”‚
โ”‚   114 โ”‚   @property                                                                                                                                                                                                                                                        โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

To Reproduce ๐Ÿฃ

  1. Start typing in a new test after launching smassh
  2. You can type one or more characters, the character doesn't need to be accurate.
  3. Erase up to and including the first character.
  4. When you erase the first character the application will quit with ZeroDivisionError

Expected behavior ๐Ÿค”

The application doesn't crash when trying to erase the first character.

The statistics account for the first character being erased.

Maybe the WPM calculation accounts for all characters typed at the start of the session; where erased characters aren't subtracted from the overall calculation.

Screenshots ๐Ÿง

I couldn't capture screenshots, but I was able to make a video recording.

smassh-division-by-zero.mov

Your operating system name

Mac OS

Your operating system version

Sonoma 14.4.1

Additional context ๐Ÿ“

If I set the Min Speed to 0 in settings, I cannot cause the application to crash with ZeroDivisionError using the steps above.

[BUG] Crashes when the "cursor buddy" beats you...

Describe the bug ๐Ÿ›

If the "cursor buddy" finishes the typing before I do, it crashes and throws up a whole bunch of errors.

To Reproduce ๐Ÿฃ

  1. Get on Ubuntu on WSL, install smassh using pip
  2. Go to "settings", find "cursor buddy" pull his speed to 50. (or more, if you're faster than me)
  3. Race against the cursor, Lose.

Expected behavior ๐Ÿค”

It crashes...

Screenshots ๐Ÿง

image

Your operating system name

Ubuntu on WSL

Your operating system version

No response

Additional context ๐Ÿ“

No response

[BUG] list index out of range error

Describe the bug ๐Ÿ›

smassh
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ Traceback (most recent call last) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ in render_lines:3109                                                                                                                                                                      โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in render_widget:117                                                                                                                                                                      โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in render:216                                                                                                                                                                             โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in render_line:418                                                                                                                                                                        โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in render_line:3093                                                                                                                                                                       โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in _render_content:3058                                                                                                                                                                   โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in split_and_crop_lines:291                                                                                                                                                               โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in render:1332                                                                                                                                                                            โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in <genexpr>:162                                                                                                                                                                          โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in <genexpr>:156                                                                                                                                                                          โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in render:1332                                                                                                                                                                            โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in __rich_console__:694                                                                                                                                                                   โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in wrap:1234                                                                                                                                                                              โ”‚
โ”‚                                                                                                                                                                                           โ”‚
โ”‚ in divide:1164                                                                                                                                                                            โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
IndexError: list index out of range

To Reproduce ๐Ÿฃ

Happens every now and then when typing. Not exactly sure how to reproduce.
I'm using foot terminal on arch linux. Installed through the AUR.

Expected behavior ๐Ÿค”

No response

Screenshots ๐Ÿง

No response

Your operating system name

Arch Linux

Your operating system version

Latest

Additional context ๐Ÿ“

No response

[BUG] Can't change settings

Describe the bug ๐Ÿ›

I can't change difficulty. It's stuck on normal. Same for other settings.

To Reproduce ๐Ÿฃ

  1. Start smassh
  2. Go to settings
  3. Click on any option to change a setting.

Expected behavior ๐Ÿค”

Clicking on the buttons should make the values change.

Screenshots ๐Ÿง

recording.webm

Your operating system name

Arco Linux

Your operating system version

6.7.3-arch1-1

Additional context ๐Ÿ“

I installed using pipx.

๐Ÿ’ก [FEAT] Add support to add languages via cmdline

Language packs are quite big and just adding them all to the app will be too much bloat so the users can add languages manually using a cmd line flag

Here are the required tasks:

  • Create a new page that lists all the languages ( from monkeytype :p )
  • Add a flag for eg add the language (Eg smassh add hindi)
  • The plugin should be located at termtyper/src/plugin/add_language.py
  • Store all the lang packs at termtyper/assets/languages/
  • Update CHANGELOG
  • Update README

[BUG] ModuleNotFoundError: No module named 'preferredsoundplayer'

Describe the bug ๐Ÿ›
I've installed termtpye via the AUR. I had to choose between the repository or the AUR package for python-playsound and chose the repository version. When starting termtype I get the following error:

Traceback (most recent call last):
  File "/usr/bin/termtyper", line 5, in <module>
    from termtyper.__init__ import main
  File "/usr/lib/python3.10/site-packages/termtyper/__init__.py", line 1, in <module>
    from .ui import TermTyper
  File "/usr/lib/python3.10/site-packages/termtyper/ui/__init__.py", line 1, in <module>
    from .tui import TermTyper
  File "/usr/lib/python3.10/site-packages/termtyper/ui/tui.py", line 12, in <module>
    from termtyper.ui.settings_options import MenuSlide
  File "/usr/lib/python3.10/site-packages/termtyper/ui/settings_options.py", line 11, in <module>
    from termtyper.ui.widgets import banners
  File "/usr/lib/python3.10/site-packages/termtyper/ui/widgets/__init__.py", line 2, in <module>
    from .race_hud import RaceHUD
  File "/usr/lib/python3.10/site-packages/termtyper/ui/widgets/race_hud.py", line 10, in <module>
    from ...utils import Parser
  File "/usr/lib/python3.10/site-packages/termtyper/utils/__init__.py", line 3, in <module>
    from .play_keysound import play_keysound, play_failed
  File "/usr/lib/python3.10/site-packages/termtyper/utils/play_keysound.py", line 2, in <module>
    from preferredsoundplayer import playsound
ModuleNotFoundError: No module named 'preferredsoundplayer'

To Reproduce ๐Ÿฃ
See bug description.

Expected behavior ๐Ÿค”
It should work after installing the package.

Screenshots ๐Ÿง
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information): ๐Ÿค–

  • OS: Manjaro

Additional context ๐Ÿ“
Add any other context about the problem here.

๐Ÿ’ก Add live typing stats

Live typing stats ๐Ÿ’ก

I think it would be beneficial if the user can get an idea of their current performance while typing.
This can be done by implementing a small dashboard below the typing section of the GUI. (See mockup diagram)

This dashboard could illustrate some typing statistics such as:

  • The number of words that have been typed (e.g. "Words typed: 34")
  • The number of words left in the paragraph (e.g. "Words left: 43")
  • Elapsed time (e.g. "Time: 45s")

Mockup diagram ๐Ÿง
This mockup is what the first design iteration of the dashboard may look like.
mockup drawio

[BUG] Toggle numbers ctrl+n and toggle punctuations ctrl+p don't work?

Describe the bug ๐Ÿ›
When I pressed those keybindings, the desired effect didn't happen. For example typing "ctrl+n" twice, but both produced texts still show numbers.

To Reproduce ๐Ÿฃ
Steps to reproduce the behavior:

  1. Go to "Start Typing!".
  2. Press "ctrl+n" or "ctrl+p".
  3. Observe that the texts still contain numbers or punctuations.

Expected behavior ๐Ÿค”
I expected the keybindings would remove the numbers and punctuation respectively.

Desktop (please complete the following information): ๐Ÿค–

  • OS: Linux
  • Version: v2.0.0, installed from termtyper-git package on AUR

[BUG] punctuation can cause too many space inputs

When punctuation is enabled and currently being asked for typing a space instead jumps to the start of the next word inserting 2 spaces with a single press and trains bad backspace muscle memory.

๐Ÿ’ก [FEAT] Shortcut or button to reset settings back to their default values

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.
As far as I'm aware, there is currently no easy way to reset the settings back to their default values without doing so manually. This can make it quite tedious to mess with and keep track off many modified settings.

Describe the solution you'd like ๐Ÿค”
I propose to either add a shortcut (such as ctrl+r) stated in the help menu, or a button to each menu within settings to reset all the settings back to their default values. If there are better ways of doing this, then I would love to hear alternative suggestions.

๐Ÿ’ก [FEAT] Discord Integration

Monkeytype has an option to connect to Discord, where the server members get a specific role according to their speed. For example, if a user has a 63 WPM, they get a 60-69 role. It would be awesome if this was to be implemented in termtyper, since you have a discord server :)

I will be glad to open up a PR for this

[BUG] Mistake in Help Menu

Describe the bug ๐Ÿ›
The last line in navigate between different options mentions both k/up and K/shift+up to change to cycle between different options

Screenshots ๐Ÿง
2022-07-18_10-36

[BUG] 'Min Burst:' setting disappears when opening and closing the help menu

Describe the bug ๐Ÿ›
The 'Min Burst:' setting within the 'Push Your Limits' menu disappears when toggling the help menu from a different settings menu. The missing setting can be made to reappear by toggling the help menu once again but from the 'Push Your Limits' menu itself.

To Reproduce ๐Ÿฃ
Steps to reproduce the behaviour:

  1. Within 'Settings', go to any menu other than the 'Push your Limits' menu.
  2. Press 'ctrl+h' twice to open and close the help menu.
  3. Go to the 'Push your Limits' menu. By this point, the setting 'Min Burst:' should be gone.
  4. Repeat step (2.). The setting should reappear.

Expected behaviour ๐Ÿค”
The settings should not disappear and reappear when opening and closing the help menu.

Screenshots ๐Ÿง
If applicable, add screenshots to help explain your problem.
Before: https://user-images.githubusercontent.com/68474507/180227692-93727a56-67a5-40c5-ac46-b163cda21380.png
After: https://user-images.githubusercontent.com/68474507/180227924-bd8a5cde-5cd0-4b01-811d-0dc014b6b715.png

Desktop (please complete the following information): ๐Ÿค–

  • OS: Windows 11

Additional context ๐Ÿ“
Add any other context about the problem here.

New languages

It might be worth adding other languages to practice typing, such as Russian or German. In the code of the generator function, you can add a language selection. Accordingly, add language selection and progress regardless of languages to the menu.

[BUG] NumberScroll issue on Mac

Describe the bug ๐Ÿ›
I am not able to change the values of a NumberScroll in settings. I have tried scrolling with my MacBook Air trackpad and my Logitech bluetooth mouse which did nothing. When I pressed 'J' or 'K' or Up or Down it or Shift+Up or Shift+Down it would change the highlighted setting to the next setting but would not actually toggle/alter the values of any of the settings themself.

To Reproduce ๐Ÿฃ
Steps to reproduce the behavior:

  1. On Python 3.10, Mac OS 10.15.3
  2. Go to settings page
  3. Try to change value in number scroll with scrollwheel, 'J' and 'K' keys

Expected behavior ๐Ÿค”
The value in the NumberScroll for the setting should change up or down.

Screenshots ๐Ÿง
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information): ๐Ÿค–

  • OS: Mac OSx 10.15.3
  • Python 10.3

Additional context ๐Ÿ“
Need the NumberScrolls to be working so I can test adding a new NumberScroll for a different feature :)

[BUG] AUR package is seriously broken

Describe the bug ๐Ÿ›
The AUR package (termtyper-git) that you maintain for this project is seriously broken. It does the a pip install into the user's home (a serious problem, as it leaves left over files when uninstalled, and also means it will have to be installed via pip for other users anyway) and fails to list all the needed dependencies (pip).

To Reproduce ๐Ÿฃ
Steps to reproduce the behavior:

  1. Try and install the package from the AUR
  2. WTF
  3. Audit the PKGBUILD
  4. Die

Expected behavior ๐Ÿค”

  1. Try and install the package from the AUR
  2. :)

Desktop (please complete the following information): ๐Ÿค–

  • OS: Arch Linux

Additional context ๐Ÿ“
If you need any help fixing the PKGBUILD, feel free to ask as I maintain a few AUR packages myself.

๐Ÿ’ก [FEAT] Add unit testing/automated testing for devs

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.
Add unit testing/automated testing

Describe the solution you'd like ๐Ÿค”
Add unit testing/automated testing via PyTest/PyUnit/similar dependency to allow open source devs to work remotely and asynchronously while maintaining the quality of code and ability to build this project without bugs. This can be automated easily with GitHub Actions and a build workflow that is required to pass before a PR will be merged.

Describe alternatives you've considered ๐Ÿง
Every dev could have their own independent testing procedures in their local environment but this would lead to great repetition of work, opportunities for new bugs to be added to different dev's builds and/or test code, and general lack of cohesion in the project.

Additional context ๐Ÿ“
I want to be able to test things without breaking what is already there. I saw in the .gitignore file to ignor a /test folder but if anyone does have any test code available I would really appreciate and think it is a good idea to merge that in.

[BUG] Capitalization mode doesn't seem to work?

I just installed it from AUR.

Under Settings > Capitalization Mode, I tried both "on" and "max" settings. But I didn't see any capitalized letters when I entered "Start Typing!".

Perhaps I should activate it somehow?

Note: I don't know why this post doesn't have the "bug" label. And I don't know how to edit it in.

๐Ÿ’ก [FEAT] Full XDG compliance

Is your feature request related to a problem? ๐Ÿ˜ข Please describe.
termtyper does not fully respect the XDG Base Directory Specification.

Describe the solution you'd like ๐Ÿค”
Store the [speed records word] and [speed records time] sections of $XDG_CONFIG_HOME/termtyper/termtyper.ini in $XDG_DATA_HOME/termtyper/termtyper.ini

[BUG] Crash on installing with `scoop`

Describe the bug ๐Ÿ›

using pip in windows, installed from scoop.
I get this error after I install smassh from pip:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\anshu\scoop\apps\python\current\Scripts\smassh.exe\__main__.py", line 4, in <module>
  File "C:\Users\anshu\scoop\apps\python\current\Lib\site-packages\smassh\__init__.py", line 3, in <module>
    from smassh.ui.tui import Smassh
  File "C:\Users\anshu\scoop\apps\python\current\Lib\site-packages\smassh\ui\__init__.py", line 1, in <module>
    from .tui import Smassh
  File "C:\Users\anshu\scoop\apps\python\current\Lib\site-packages\smassh\ui\tui.py", line 2, in <module>
    from textual import on
  File "C:\Users\anshu\scoop\apps\python\current\Lib\site-packages\textual\__init__.py", line 9, in <module>
    from . import constants
  File "C:\Users\anshu\scoop\apps\python\current\Lib\site-packages\textual\constants.py", line 10, in <module>
    from typing_extensions import Final, TypeGuard
  File "C:\Users\anshu\scoop\apps\python\current\Lib\site-packages\typing_extensions.py", line 1174, in <module>
    class TypeVar(typing.TypeVar, _DefaultMixin, _root=True):
TypeError: type 'typing.TypeVar' is not an acceptable base type

To Reproduce ๐Ÿฃ

  1. use windows (not linux)
  2. use pip from scoop
  3. install smassh from pip
  4. try to open smassh from the terminal
  5. cry that this error would not have existed on arch linux

Expected behavior ๐Ÿค”

it work

Screenshots ๐Ÿง

No response

Your operating system name

Windows

Your operating system version

23H2

Additional context ๐Ÿ“

No response

[BUG] About page pushes header up

Describe the bug ๐Ÿ›

When you click the about page it pushes the header up and out of the viewable area. If you keep doing it eventually it is totally gone but the buttons come back down when they are hovered over.

To Reproduce ๐Ÿฃ

  1. go to about page
  2. hover over other header buttons
  3. go to another page
  4. go back to about page

Expected behavior ๐Ÿค”

The header should stay in place.

Screenshots ๐Ÿง

20240204_11h52m12s_grim

Your operating system name

Linux

Your operating system version

Fedora 38

Additional context ๐Ÿ“

No response

No click sound and can't use underline caret style in Windows Terminal [BUG]

OS: Windows 11
Terminal: Windows Terminal
Shell: Power shell
Python Version: 3.10
Issue: No sound when typing, I have set keypress sound on, and no underline caret sytle.
I tested in cmd ,still no sound but underline caret display normally.
Feature request: Normal vertical line caret style and it is better for typing.

error while installing

$ python -m pip install git+https://github.com/kraanzu/termtyper.git
Defaulting to user installation because normal site-packages is not writeable
Collecting git+https://github.com/kraanzu/termtyper.git
Cloning https://github.com/kraanzu/termtyper.git to /tmp/pip-req-build-63zj3e79
Running command git clone -q https://github.com/kraanzu/termtyper.git /tmp/pip-req-build-63zj3e79
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
WARNING: Keyring is skipped due to an exception: g-dbus-error-quark: The name org.freedesktop.secrets was not provided by any .service files (2)
ERROR: Exception:
Traceback (most recent call last):
File "/usr/lib/python3.10/site-packages/pip/_internal/cli/base_command.py", line 189, in _main
status = self.run(options, args)
File "/usr/lib/python3.10/site-packages/pip/_internal/cli/req_command.py", line 178, in wrapper
return func(self, options, args)
File "/usr/lib/python3.10/site-packages/pip/_internal/commands/install.py", line 316, in run
requirement_set = resolver.resolve(
File "/usr/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 121, in resolve
self._result = resolver.resolve(
File "/usr/lib/python3.10/site-packages/resolvelib/resolvers.py", line 454, in resolve
state = resolution.resolve(requirements, max_rounds=max_rounds)
File "/usr/lib/python3.10/site-packages/resolvelib/resolvers.py", line 348, in resolve
failure_causes = self._attempt_to_pin_criterion(name, criterion)
File "/usr/lib/python3.10/site-packages/resolvelib/resolvers.py", line 208, in _attempt_to_pin_criterion
criteria = self._get_criteria_to_update(candidate)
File "/usr/lib/python3.10/site-packages/resolvelib/resolvers.py", line 200, in _get_criteria_to_update
name, crit = self._merge_into_criterion(r, parent=candidate)
File "/usr/lib/python3.10/site-packages/resolvelib/resolvers.py", line 176, in _merge_into_criterion
crit = Criterion.from_requirement(self._p, requirement, parent)
File "/usr/lib/python3.10/site-packages/resolvelib/resolvers.py", line 83, in from_requirement
if not cands:
File "/usr/lib/python3.10/site-packages/resolvelib/structs.py", line 124, in bool
return bool(self._sequence)
File "/usr/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py", line 99, in bool
return any(self)
File "/usr/lib/python3.10/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 218, in iter_index_candidates
result = self._finder.find_best_candidate(
File "/usr/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 872, in find_best_candidate
candidates = self.find_all_candidates(project_name)
File "/usr/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 815, in find_all_candidates
package_links = self.process_project_url(
File "/usr/lib/python3.10/site-packages/pip/_internal/index/package_finder.py", line 779, in process_project_url
html_page = self._link_collector.fetch_page(project_url)
File "/usr/lib/python3.10/site-packages/pip/_internal/index/collector.py", line 617, in fetch_page
return _get_html_page(location, session=self.session)
File "/usr/lib/python3.10/site-packages/pip/_internal/index/collector.py", line 429, in _get_html_page
resp = _get_html_response(url, session=session)
File "/usr/lib/python3.10/site-packages/pip/_internal/index/collector.py", line 126, in _get_html_response
resp = session.get(
File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 542, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python3.10/site-packages/pip/_internal/network/session.py", line 424, in request
return super().request(method, url, *args, **kwargs)
File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 529, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.10/site-packages/requests/sessions.py", line 687, in send
r.content
File "/usr/lib/python3.10/site-packages/requests/models.py", line 838, in content
self._content = b''.join(self.iter_content(CONTENT_CHUNK_SIZE)) or b''
File "/usr/lib/python3.10/site-packages/requests/models.py", line 760, in generate
for chunk in self.raw.stream(chunk_size, decode_content=True):
File "/usr/lib/python3.10/site-packages/urllib3/response.py", line 579, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "/usr/lib/python3.10/site-packages/urllib3/response.py", line 522, in read
data = self._fp.read(amt) if not fp_closed else b""
File "/home/asus/.local/lib/python3.10/site-packages/cachecontrol/filewrapper.py", line 96, in read
self._close()
File "/home/asus/.local/lib/python3.10/site-packages/cachecontrol/filewrapper.py", line 76, in _close
self.__callback(result)
File "/home/asus/.local/lib/python3.10/site-packages/cachecontrol/controller.py", line 353, in cache_response
self._cache_set(cache_url, request, response, body, expires_time)
File "/home/asus/.local/lib/python3.10/site-packages/cachecontrol/controller.py", line 272, in _cache_set
self.cache.set(
TypeError: SafeFileCache.set() got an unexpected keyword argument 'expires'

[BUG] 3.1.x thinks I'm sending lots of keys

Describe the bug ๐Ÿ›

I've tried reinstalling and deleting my settings

When running smassh @ 3.1.0 - it interprets each character I write as more than one

To Reproduce ๐Ÿฃ

  1. Delete smassh configuration json
  2. Install 3.1.0 via pipx, with pipx install smassh
  3. Start smassh, it interprets each character as more than one

Expected behavior ๐Ÿค”

Only one character is pressed per key.

Screenshots ๐Ÿง

typing 'home', the first character is recognized, but thinks I also pressed many more I guess, proceeding to continue to type ome- the cursor is placed on the last character of the 2nd word, 8 characters away or double in length from where it should be.
image

Your operating system name

Mac

Your operating system version

Sonoma 14.3.1

Additional context ๐Ÿ“

If I delete the configuration and downgrade to smassh==3.0.*, with:

  • pipx uninstall smassh
  • rm ~/Library/Application\ Support/smassh/smassh.json (where smassh keeps its configuration instead of $HOME)
  • pipx install smassh==3.0.*
  • Run smassh - it works as it used to, and correctly

If I don't delete my configuration, other weird things happen like not interpreting any mistakes and not changing character colors.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.