Term-ReadLine-Perl5
view release on metacpan or search on metacpan
lib/Term/ReadLine/Perl5/readline.pm view on Meta::CPAN
}
$n *= $count; # So 2d3w deletes six words
$n = $rl_max_numeric_arg if $n > $rl_max_numeric_arg;
&do_command($var_EditingMode, $n, $ord);
}
sub F_ViComplete {
my($n, $ord) = @_;
$Dot_state = savestate(); # Completion is undo-able
undef $Dot_buf; # but not redo-able
my $ch;
while (1) {
&F_Complete() or return;
# Vi likes the cursor one character right of where emacs like it.
&F_ForwardChar(1);
rl_forced_update_display();
# Look ahead to the next input keystroke.
$ch = &getc_with_pending();
last unless ord($ch) == $ord; # Not a '\' - quit.
# Another '\' was typed - put the cursor back where &F_Complete left
# it, and try again.
&F_BackwardChar(1);
$lastcommand = 'F_Complete'; # Play along with &F_Complete's kludge
}
unshift(@Pending, $ch); # Unget the lookahead keystroke
# Successful completion - enter input mode with cursor beyond end of word.
&vi_input_mode;
}
sub F_ViInsertPossibleCompletions {
$Dot_state = savestate(); # Completion is undo-able
undef $Dot_buf; # but not redo-able
&complete_internal('*') or return;
# Successful completion - enter input mode with cursor beyond end of word.
&F_ForwardChar(1);
&vi_input_mode;
}
sub F_ViPossibleCompletions {
# List possible completions
&complete_internal('?');
# Enter input mode with cursor where we left off.
&F_ForwardChar(1);
&vi_input_mode;
}
sub F_CopyRegionAsKillClipboard {
return clipboard_set($line) unless $line_rl_mark == $rl_HistoryIndex;
&F_CopyRegionAsKill;
clipboard_set($KillBuffer);
}
sub F_KillRegionClipboard {
&F_KillRegion;
clipboard_set($KillBuffer);
}
sub F_YankClipboard
{
remove_selection();
my $in;
if ($^O eq 'os2') {
eval {
require OS2::Process;
$in = OS2::Process::ClipbrdText();
$in =~ s/\r\n/\n/g; # With old versions, or what?
}
} elsif ($^O eq 'MSWin32') {
eval {
require Win32::Clipboard;
$in = Win32::Clipboard::GetText();
$in =~ s/\r\n/\n/g; # is this needed?
}
} else {
my $mess;
my $paste_fh;
if ($ENV{RL_PASTE_CMD}) {
$mess = "Reading from pipe `$ENV{RL_PASTE_CMD}'";
open($paste_fh, "$ENV{RL_PASTE_CMD} |") or warn("$mess: $!"), return;
} elsif (defined $HOME) {
my $cutpastefile = File::Spec($HOME, '.rl_cutandpaste');
$mess = "Reading from file `$cutpastefile'";
open($paste_fh, '<:encoding(utf-8)', $cutpastefile)
or warn("$mess: $!"), return;
}
if ($mess) {
local $/;
$in = <$paste_fh>;
close $paste_fh or warn("$mess, closing: $!");
}
}
if (defined $in) {
$in =~ s/\n+$//;
return &TextInsert($_[0], $in);
}
&TextInsert($_[0], $KillBuffer);
}
sub F_BeginUndoGroup {
push @undoGroupS, $#undo;
}
sub F_EndUndoGroup {
return F_Ding unless @undoGroupS;
my $last = pop @undoGroupS;
return unless $#undo > $last + 1;
my $now = pop @undo;
$#undo = $last;
push @undo, $now;
}
sub F_DoNothing { # E.g., reset digit-argument
1;
}
lib/Term/ReadLine/Perl5/readline.pm view on Meta::CPAN
$rl_HistoryIndex = $n;
}
# Redisplay the line, without attempting any optimization
sub rl_forced_update_display() {
local $force_redraw = 1;
redisplay(@_);
}
## returns a new $i or -1 if not found.
sub vi_search {
my ($i) = @_;
return -1 if $i < 0 || $i > $#rl_History; ## for safety
while (1) {
return $i if $rl_History[$i] =~ /$Vi_search_re/;
if ($reverse) {
return -1 if $i-- == 0;
} else {
return -1 if $i++ == $#rl_History;
}
}
}
sub do_vi_search {
my $incr = $reverse ? -1 : 1;
my $i = &vi_search($rl_HistoryIndex + $incr);
return &F_Ding if $i < 0; # Not found.
$rl_HistoryIndex = $i;
($D, $line) = (0, $rl_History[$rl_HistoryIndex]);
}
# Using local $line, $D, and $prompt, get and return the string to
# search for.
sub get_vi_search_str($) {
my($c) = @_;
local $prompt = $prompt . $c;
local ($line, $D) = ('', 0);
rl_redisplay();
# Gather a search string in our local $line.
while ($lastcommand ne 'F_ViEndSearch') {
&do_command($var_EditingMode{'visearch'}, 1, ord(&getc_with_pending));
rl_redisplay();
# We've backspaced past beginning of line
return undef if !defined $line;
}
$line;
}
sub vi_input_mode()
{
$InsertMode = 1;
$var_EditingMode = $var_EditingMode{'vi'};
$Vi_mode = 1;
}
sub clipboard_set($) {
my $in = shift;
if ($^O eq 'os2') {
eval {
require OS2::Process;
OS2::Process::ClipbrdText_set($in); # Do not disable \r\n-conversion
1
} and return;
} elsif ($^O eq 'MSWin32') {
eval {
require Win32::Clipboard;
Win32::Clipboard::Set($in);
1
} and return;
}
my $mess;
if ($ENV{RL_CLCOPY_CMD}) {
$mess = "Writing to pipe `$ENV{RL_CLCOPY_CMD}'";
open COPY, "| $ENV{RL_CLCOPY_CMD}" or warn("$mess: $!"), return;
} elsif (defined $HOME) {
my $cutpastefile = File::Spec($HOME, '.rl_cutandpaste');
$mess = "Writing to file `$cutpastefile'";
open COPY, "> $cutpastefile" or warn("$mess: $!"), return;
} else {
return;
}
print COPY $in;
close COPY or warn("$mess: closing $!");
}
=head3 read_an_init_file
B<read_an_init_file>(I<inputrc_file>, [I<include_depth>])
Reads and executes I<inputrc_file> which does things like Sets input
key bindings in key maps.
If there was a problem return 0. Otherwise return 1;
=cut
sub read_an_init_file($;$)
{
my $file = shift;
my $include_depth = shift or 0;
my $rc;
$file = File::Spec->catfile($HOME, $file) unless -f $file;
return 0 unless open $rc, "< $file";
local (@action) = ('exec'); ## exec, skip, ignore (until appropriate endnif)
local (@level) = (); ## if, else
local $/ = "\n";
while (my $line = <$rc>) {
parse_and_bind($line, $file, $include_depth);
}
close($rc);
return 1;
}
=head1 SEE ALSO
( run in 1.227 second using v1.01-cache-2.11-cpan-2398b32b56e )