ViewportKeyMap

Struct ViewportKeyMap 

Source
pub struct ViewportKeyMap {
    pub page_down: Binding,
    pub page_up: Binding,
    pub half_page_up: Binding,
    pub half_page_down: Binding,
    pub down: Binding,
    pub up: Binding,
    pub left: Binding,
    pub right: Binding,
}
Expand description

Keyboard binding configuration for viewport navigation.

This struct defines all key combinations that control viewport scrolling, including line-by-line movement, page scrolling, and horizontal navigation. Each binding supports multiple key combinations and includes help text for documentation generation.

§Default Key Bindings

The default configuration provides both traditional navigation keys and Vim-style alternatives for maximum compatibility:

  • Line Movement: Arrow keys (↑↓) and Vim keys (kj)
  • Page Movement: Page Up/Down and Vim keys (bf)
  • Half Page: Vim-style u (up) and d (down)
  • Horizontal: Arrow keys (←→) and Vim keys (hl)

§Examples

use bubbletea_widgets::viewport::{ViewportKeyMap, Model};
use bubbletea_widgets::key;
use crossterm::event::KeyCode;

// Use default key bindings
let mut viewport = Model::new(80, 24);
let keymap = viewport.keymap.clone(); // Uses ViewportKeyMap::default()

// Customize key bindings
let mut custom_keymap = ViewportKeyMap::default();
custom_keymap.page_down = key::Binding::new(vec![KeyCode::Char('n')])
    .with_help("n", "next page");
custom_keymap.page_up = key::Binding::new(vec![KeyCode::Char('p')])
    .with_help("p", "previous page");

viewport.keymap = custom_keymap;

Integration with help system:

use bubbletea_widgets::viewport::ViewportKeyMap;
use bubbletea_widgets::key::KeyMap as KeyMapTrait;

let keymap = ViewportKeyMap::default();

// Get essential bindings for compact help
let short_help = keymap.short_help();
assert_eq!(short_help.len(), 4); // up, down, page_up, page_down

// Get all bindings organized by category
let full_help = keymap.full_help();
assert_eq!(full_help.len(), 4); // 4 categories of bindings

§Customization Patterns

Common customization scenarios:

use bubbletea_widgets::viewport::ViewportKeyMap;
use bubbletea_widgets::key;
use crossterm::event::KeyCode;

let mut keymap = ViewportKeyMap::default();

// Add additional keys for page navigation
keymap.page_down = key::Binding::new(vec![
    KeyCode::PageDown,
    KeyCode::Char(' '),    // Space bar (default)
    KeyCode::Char('f'),    // Vim style (default)
    KeyCode::Enter,        // Custom addition
]).with_help("space/f/enter", "next page");

// Game-style WASD navigation
keymap.up = key::Binding::new(vec![KeyCode::Char('w')])
    .with_help("w", "move up");
keymap.down = key::Binding::new(vec![KeyCode::Char('s')])
    .with_help("s", "move down");
keymap.left = key::Binding::new(vec![KeyCode::Char('a')])
    .with_help("a", "move left");
keymap.right = key::Binding::new(vec![KeyCode::Char('d')])
    .with_help("d", "move right");

Fields§

§page_down: Binding

Key binding for scrolling down one full page.

Default keys: Page Down, Space, f (Vim-style “forward”)

§page_up: Binding

Key binding for scrolling up one full page.

Default keys: Page Up, b (Vim-style “backward”)

§half_page_up: Binding

Key binding for scrolling up half a page.

Default key: u (Vim-style “up half page”)

§half_page_down: Binding

Key binding for scrolling down half a page.

Default key: d (Vim-style “down half page”)

§down: Binding

Key binding for scrolling down one line.

Default keys: Down arrow (), j (Vim-style)

§up: Binding

Key binding for scrolling up one line.

Default keys: Up arrow (), k (Vim-style)

§left: Binding

Key binding for horizontal scrolling to the left.

Default keys: Left arrow (), h (Vim-style)

§right: Binding

Key binding for horizontal scrolling to the right.

Default keys: Right arrow (), l (Vim-style)

Trait Implementations§

Source§

impl Clone for ViewportKeyMap

Source§

fn clone(&self) -> ViewportKeyMap

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ViewportKeyMap

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for ViewportKeyMap

Source§

fn default() -> Self

Creates default viewport key bindings with Vim-style alternatives.

The default configuration provides comprehensive navigation options that accommodate both traditional arrow key users and Vim enthusiasts. Each binding includes multiple key combinations for flexibility.

§Default Key Mappings
BindingKeysDescription
page_downPgDn, Space, fScroll down one page
page_upPgUp, bScroll up one page
half_page_downdScroll down half page
half_page_upuScroll up half page
down, jScroll down one line
up, kScroll up one line
left, hScroll left horizontally
right, lScroll right horizontally
§Examples
use bubbletea_widgets::viewport::ViewportKeyMap;

// Create with default bindings
let keymap = ViewportKeyMap::default();

// Verify some default key combinations
assert!(!keymap.page_down.keys().is_empty());
assert!(!keymap.up.keys().is_empty());
§Design Philosophy
  • Accessibility: Arrow keys work for all users
  • Efficiency: Vim keys provide rapid navigation for power users
  • Consistency: Key choices match common terminal application patterns
  • Discoverability: Help text explains each binding clearly
Source§

impl KeyMap for ViewportKeyMap

Source§

fn short_help(&self) -> Vec<&Binding>

Returns the most essential key bindings for compact help display.

This method provides a concise list of the most frequently used navigation keys, suitable for brief help displays or status bars.

§Returns

A vector containing bindings for: up, down, page up, page down

§Examples
use bubbletea_widgets::viewport::ViewportKeyMap;
use bubbletea_widgets::key::KeyMap as KeyMapTrait;

let keymap = ViewportKeyMap::default();
let essential_keys = keymap.short_help();

assert_eq!(essential_keys.len(), 4);
// Contains: up, down, page_up, page_down
Source§

fn full_help(&self) -> Vec<Vec<&Binding>>

Returns all key bindings organized by navigation category.

This method groups related navigation keys together for comprehensive help displays. Each group represents a logical category of movement.

§Returns

A vector of binding groups:

  1. Line navigation: up, down
  2. Horizontal navigation: left, right
  3. Page navigation: page up, page down
  4. Half-page navigation: half page up, half page down
§Examples
use bubbletea_widgets::viewport::ViewportKeyMap;
use bubbletea_widgets::key::KeyMap as KeyMapTrait;

let keymap = ViewportKeyMap::default();
let all_keys = keymap.full_help();

assert_eq!(all_keys.len(), 4); // 4 categories
assert_eq!(all_keys[0].len(), 2); // Line navigation: up, down
assert_eq!(all_keys[1].len(), 2); // Horizontal: left, right
assert_eq!(all_keys[2].len(), 2); // Page: page_up, page_down
assert_eq!(all_keys[3].len(), 2); // Half-page: half_page_up, half_page_down
§Help Display Integration

This organization enables structured help displays:

Navigation:
  ↑/k, ↓/j     line up, line down
  ←/h, →/l     scroll left, scroll right
   
  b/pgup, f/pgdn/space    page up, page down
  u, d                     half page up, half page down

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.