/usr/lib/urxvt/perl/xim-onthespot is in rxvt-unicode 9.14-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | #! perl
#
# problems with this implementation include
#
# - primary, secondary, tertiary are NO different to other highlighting styles
# - if rend values are missing, they are not being interpolated
#
my $SIZEOF_LONG = length pack "l!", 0;
sub refresh {
my ($self) = @_;
delete $self->{overlay};
my $text = $self->{text};
return unless length $text;
my ($row, $col) = $self->screen_cur;
my $idx = 0;
my @rend = map {
my $rstyle = $self->{caret} == $idx ? urxvt::OVERLAY_RSTYLE : $self->rstyle;
$rstyle |= urxvt::RS_Uline if $_ & (urxvt::XIMUnderline | urxvt::XIMPrimary);
$rstyle |= urxvt::RS_RVid if $_ & (urxvt::XIMReverse | urxvt::XIMSecondary);
$rstyle |= urxvt::RS_Italic if $_ & (urxvt::XIMHighlight | urxvt::XIMTertiary);
($rstyle) x ($self->strwidth (substr $text, $idx++, 1))
} unpack "l!*", $self->{rend};
if ($self->{caret} >= length $text) {
$text .= " ";
push @rend, urxvt::OVERLAY_RSTYLE;
}
$self->{overlay} = $self->overlay ($col, $row, $self->strwidth ($text), 1, $self->rstyle, 0);
$self->{overlay}->set (0, 0, $self->special_encode ($text), \@rend);
}
sub on_xim_preedit_start {
my ($self) = @_;
()
}
sub on_xim_preedit_done {
my ($self) = @_;
delete $self->{overlay};
delete $self->{text};
delete $self->{rend};
()
}
sub on_xim_preedit_draw {
my ($self, $caret, $pos, $len, $feedback, $chars) = @_;
$self->{caret} = $caret;
substr $self->{rend}, $pos * $SIZEOF_LONG, $len * $SIZEOF_LONG, $feedback;
substr $self->{text}, $pos , $len , $chars if defined $feedback || !defined $chars;
$self->refresh;
()
}
|