Skip to main content

Hoptex is Textual plugin that allows you to focus widgets fast!

Project description

Hoptex

If you are Vim user you heard about EasyMotion and Hop. This library is exactly this concept but for Textual! Just type your shortcut and focus/press widget you want. No mouse needed!

Please always pin version of this library as API may change rapidly. It is experimental project and some staff may be modified.

Demo

DemoScreen HoptexScreen

Documentation

Hoptex allow to focus object and additionaly press it. By default:

  • space will highlight focusable widgets and allow to focus choosen one
  • ctrl+o will focus and press widgets that are focusable and have on_click or _on_click method.

Usage

The most basic usage is just adding decorator on your Textual app like this:

from textual.app import App
from hoptex import hoptex

@hoptex()
class NewTextualApp(App):
    ...

That is all. Super easy, right?

Allow and Block list

To choose which widgets will be highlighted Hoptex checks for three condition:

  • Widget have property focusable=True.
  • Widget is in allow list (then will be forced to be highlighted)
  • Widget is in blocked list (it have priority to exclude widget over allow list)

This parameters can be changed in @hoptex parameter filter_lists using HoptexFilterWidgetsConfig. By default allow_list and block_list are empty and include_focusable=True. Example can be like this:

from textual.demo import DemoApp, LocationLink  # Tested on Texutal 0.30.0 Demo App
from textual.widgets import TextLog
from hoptex import hoptex
from hoptex.configs import HoptexWidgetsFiltersConfig

widgets_filters = HoptexWidgetsFiltersConfig(allow_list=[LocationLink], block_list=[TextLog])


@hoptex(widgets_filters=widgets_filters)
class WrappedDemoApp(DemoApp):
    ...

Custom bindings

If you do not like default bindings you can change them with HoptexBindingConfig. It has four fields, which you can replace with keybinding like in Textual:

  • focus, default to space -> Run Hoptex screen to focus widget
  • press, default to ctrl+p -> Run Hoptex screen to focus and press/click widget
  • quit, default to escape -> Quits from Hoptex screen
  • unfocus, default to escape -> Unfocuses from any widgets (if you are in e.x. text window, you need first to unfocus to use space)

and also four config fields, that takes dictionary that will be injected in standard Binding field:

  • focus_conf, default to {"description": "Hop Focus"}
  • press_conf, default to {"description": "Hop Press"}
  • quit_conf, default to {"description": "Hop Quit", "show": False}
  • unfocus_conf, default to {"description": "Hop Unfocus", "show": False}
from textual.demo import DemoApp

from hoptex import hoptex
from hoptex.configs import HoptexBindingConfig

bindings = HoptexBindingConfig(press="ctrl+g", press_conf={"description": "Another description"})


@hoptex(bindings=bindings)
class DemoAppMy(DemoApp):
    ...

Custom Appearance

You can also inject custom label appearance, by label value. It should inherit from Static and allow for one argument (the letter that will be displayed). However easier way is to change CSS of HopLabel, which default is to:

HopLabel {
  width: 1;
  height: 1;
  color: yellow;
  text-style: bold;
  background: black;
}

TODO

  • Support more widgets on screen
  • Allow to use hoptex as wrapper for application (open any app with hoptex support)
  • If no place to jump, return
  • Color change
  • list of characters
  • custom Widget to mark

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hoptex-0.1.0.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

hoptex-0.1.0-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file hoptex-0.1.0.tar.gz.

File metadata

  • Download URL: hoptex-0.1.0.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Linux/5.15.125-1-MANJARO

File hashes

Hashes for hoptex-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9564048175a33706b6eeadf9446836824e5bc6e263a431a19457d99707d6e0e4
MD5 ebf4a9cc7fb2b9eb5ad42ffac2503615
BLAKE2b-256 22ca59ad3234520eba5887173759c7f6725c814e56c4f72a841648b0118315d6

See more details on using hashes here.

File details

Details for the file hoptex-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: hoptex-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.3 Linux/5.15.125-1-MANJARO

File hashes

Hashes for hoptex-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 66cd49d081218efd97a268c36f9231030bf3a240b42c697ec10e6649d559b341
MD5 63b4436cf4a10e3dbfe9c379b3c23bce
BLAKE2b-256 2ec76e3c4658c4b9a72cc2df30de0b27230ca4630b932e5be71fb23cfba0b8fa

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page