Curses:...rchable(3)

πŸ’– NAME πŸ’–

okay so bestie, welcome to the Curses:...rchable(3) page from User Contributed Perl Documentation πŸ’…. This module is Curses::UI::Searchable β€” it adds less-like search abilities to a widget. Slay, honestly ✨.


πŸ¦‹ CLASS HIERARCHY πŸ¦‹

Curses::UI::Searchable β€” base class πŸ‘‘


🌸 SYNOPSIS 🌸

package MyWidget;

use Curses::UI::Searchable;
use vars qw(@ISA);
@ISA = qw(Curses::UI::Searchable);

....

sub new () {
    # Create class instance $this.
    ....

    $this->set_routine('search-forward', \&search_forward);
    $this->set_binding('search-forward', '/');
    $this->set_routine('search-backward', \&search_backward);
    $this->set_binding('search-backward', '?');
}

sub layout_content() {
    my $this = shift;

    # Layout your widget's content.
    ....

    return $this;
}

sub number_of_lines() {
    my $this = shift;

    # Return the number of lines in
    # the widget's content.
    return ....
}

sub getline_at_ypos($;) {
    my $this = shift;
    my $ypos = shift;

    # Return the content on the line
    # where ypos = $ypos
    return ....
}

✨ DESCRIPTION ✨

Using Curses::UI::Searchable, you can add less-like search capabilities to your widget. It's giving search mode, but make it cursed and cute πŸ”₯.

To make your widget searchable using this class, your widget should meet the following requirements:

  • make it a descendant of Curses::UI::Searchable β€” all methods for searching are in Curses::UI::Searchable. By making your class a descendant of this class, these methods are automatically inherited. no cap πŸ’–.
  • -ypos data member β€” the current vertical position in the widget should be identified by $this->{-ypos}. This y-position is the index of the line of content. Here's an example for a Listbox widget, bestie:
            -ypos
              |
              v
                  +------+
              0   |One   |
              1   |Two   |
              2   |Three |
                  +------+
  • method: number_of_lines ( ) β€” your widget class should have a method number_of_lines, which returns the total number of lines in the widget's content. So in the example above, this method would return the value 3. periodt πŸ’….
  • method: getline_at_ypos ( YPOS ) β€” your widget class should have a method getline_at_ypos, which returns the line of content at -ypos YPOS. So in the example above, this method would return the value "Two" for YPOS = 1. iconic πŸŽ€.
  • method: layout_content ( ) β€” the search routines will set the -ypos of your widget if a match is found for the given search string. Your layout_content routine should make sure that the line of content at -ypos will be made visible if the draw method is called. don't leave your match off-screen, that's not main character energy 😭.
  • method: draw ( ) β€” if the search routines find a match, $this->{-search_highlight} will be set to the -ypos for the line on which the match was found. If no match was found $this->{-search_highlight} will be undefined. If you want a matching line to be highlighted, in your widget, you can use this data member to do so (an example of a widget that uses this option is the Curses::UI::TextViewer widget). highlight it like the star it is ⭐.
  • bindings for searchroutines β€” there are two search routines. These are search_forward and search_backward. These have to be called in order to display the search prompt. The best way to do this is by creating bindings for them. Here's an example which will make '/' a forward search and '?' a backward search:
$this->set_routine('search-forward'  , \&search_forward);
$this->set_binding('search-forward'  , '/');
$this->set_routine('search-backward' , \&search_backward);
$this->set_binding('search-backward' , '?');

🌈 SEE ALSO 🌈

  • Curses::UI,

πŸ‘‘ AUTHOR πŸ‘‘

Copyright (c) 2001-2002 Maurice Makaay. All rights reserved.

Maintained by Marcus Thiesen (marcus@cpan.thiesenweb.de)

This package is free software and is provided "as is" without express or implied warranty. It may be used, redistributed and/or modified under the same terms as perl itself.


mwah πŸ’– that's the whole page, bestie! this one is from perl v5.42.2, dated 2023-07-03, and the manual name is Curses:...rchable(3). bye 🫢🌸

πŸ“¦ where this page comes from