ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/option-popup
Revision: 1.15
Committed: Wed Jun 23 12:45:29 2021 UTC (2 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rxvt-unicode-rel-9_29, rxvt-unicode-rel-9_30, HEAD
Changes since 1.14: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #! perl
2
3 =head1 NAME
4
5 option-popup - option menu
6
7 =head1 DESCRIPTION
8
9 Binds a popup menu to Ctrl-Button2 that lets you toggle (some) options at
10 runtime.
11
12 Other extensions can extend this popup menu by pushing a code reference
13 onto C<< @{ $term->{option_popup_hook} } >>, which gets called whenever
14 the popup is being displayed.
15
16 Its sole argument is the popup menu, which can be modified. It should
17 either return nothing or a string, the initial boolean value and a code
18 reference. The string will be used as button text and the code reference
19 will be called when the toggle changes, with the new boolean value as
20 first argument.
21
22 The following will add an entry C<myoption> that changes
23 C<< $self->{myoption} >>:
24
25 push @{ $self->{term}{option_popup_hook} }, sub {
26 ("my option" => $myoption, sub { $self->{myoption} = $_[0] })
27 };
28
29 =cut
30
31 sub on_start {
32 my ($self) = @_;
33
34 $self->grab_button (2, urxvt::ControlMask);
35
36 ()
37 }
38
39 sub on_button_press {
40 my ($self, $event) = @_;
41
42 if ($event->{button} == 2 && $event->{state} & urxvt::ControlMask) {
43 my $popup = $self->popup ($event)
44 or return 1;
45
46 $popup->add_title ("Options");
47 $popup->add_separator;
48
49 my %unsafe = map +($_ => 1),
50 qw(borderLess console iconic loginShell reverseVideo
51 scrollBar scrollBar_floating scrollBar_right
52 secondaryScreen transparent utmpInhibit meta8
53 override_redirect);
54
55 for my $name (sort keys %urxvt::OPTION) {
56 next if $unsafe{$name};
57
58 my $optval = $urxvt::OPTION{$name};
59
60 $popup->add_toggle ($name => $self->option ($optval),
61 sub { $self->option ($optval, $_[0]) });
62 }
63
64 for my $hook (@{ $self->{term}{option_popup_hook} || [] }) {
65 if (my ($name, $value, $cb) = $hook->($popup)) {
66 $popup->add_toggle ($name => $value, sub { $cb->($_[0]) });
67 }
68 }
69
70 {
71 $popup->add_separator;
72 my $locale = $self->locale;
73 $locale =~ y/\x20-\x7e//cd;
74 $popup->add_title ("Locale: $locale");
75 }
76
77 $popup->show;
78
79 return 1;
80 }
81
82 ()
83 }
84