ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/perl/readline
Revision: 1.10
Committed: Mon Feb 20 20:48:11 2006 UTC (18 years, 3 months ago) by root
Branch: MAIN
CVS Tags: before_dynamic_fontidx, rel-7_8, rel-7_9, rel-7_7, rel-9_11, rel-9_10, rel-8_1, rel-9_12, rel-8_5a, rel-8_2, rel-8_9, rel-8_8, dynamic_fontidx, rel-8_0, rel-8_4, rel-9_0, rel-8_3, rel-8_6, rel-8_7, rel-9_09, rel-9_02, rel-9_01, rel-9_06, rel-9_07, rel-9_05
Changes since 1.9: +14 -15 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #! perl
2
3 use POSIX ();
4
5 my $termios = new POSIX::Termios;
6
7 sub on_init {
8 my ($self) = @_;
9
10 $self->{enabled} = 1;
11
12 push @{ $self->{term}{option_popup_hook} }, sub {
13 ("readline" => $self->{enabled}, sub { $self->{enabled} = shift })
14 };
15
16 ()
17 }
18
19 sub on_button_press {
20 my ($self, $event) = @_;
21
22 $self->current_screen || $self->hidden_cursor || !$self->{enabled}
23 and return;
24
25 my $mask = $self->ModLevel3Mask | $self->ModMetaMask
26 | urxvt::ShiftMask | urxvt::ControlMask;
27
28 ($event->{state} & $mask) == urxvt::ShiftMask
29 or return;
30
31 $termios->getattr ($self->pty_fd)
32 or return;
33
34 $termios->getlflag & &POSIX::ICANON
35 and return;
36
37 my ($row, $col) = $self->screen_cur;
38 my $line = $self->line ($row);
39 my $cur = $line->offset_of ($row, $col);
40 my $ofs = $line->offset_of ($event->{row}, $event->{col});
41
42 $ofs >= 0 && $ofs < $line->l
43 or return;
44
45 my $diff = $ofs - $cur;
46 my $move;
47
48 if ($diff < 0) {
49 ($ofs, $cur) = ($cur, $ofs);
50 $move = "\x1b[D";
51 } else {
52 $move = "\x1b[C";
53 }
54
55 my $skipped = substr $line->t, $cur, $ofs - $cur;
56 $skipped =~ s/\x{ffff}//g;
57
58 $self->tt_write ($move x length $skipped);
59
60 1
61 }