⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pager

📁 早期freebsd实现
💻
字号:
#!./curseperleval <<'EndOfMain';   $evaloffset = __LINE__;    $SIG{'INT'} = 'endit';    $| = 1;		# command buffering on stdout    &initterm;    &inithelp;    &slurpfile && &pagearray;EndOfMain&endit;################################################################################sub initterm {    &initscr; &cbreak; &noecho; &scrollok($stdscr, 1);    &defbell unless defined &bell;    $lines = $LINES; $lines1 = $lines - 1; $lines2 = $lines - 2;    $cols = $COLS;   $cols1  = $cols  - 1; $cols2  = $cols  - 2;;    $dl = &getcap('dl');    $al = &getcap('al');    $ho = &getcap('ho');    $ce = &getcap('ce');}sub slurpfile {    while (<>) {	s/^(\t+)/'        ' x length($1)/e;	&expand($_) if /\t/;	if (length($_) < $cols) {	    push(@lines, $_);	}	else {	    while ($_ && $_ ne "\n") {		push(@lines, substr($_,0,$cols));		substr($_,0,$cols) = '';	    }	}    }    1;}sub drawscreen {    &move(0,0);    for ($line .. $line + $lines2) {	&addstr($lines[$_]);    }    &clrtobot;    &percent;    &refresh;}sub expand {    while (($off = index($_[0],"\t")) >= 0) {	substr($_[0], $off, 1) = ' ' x (8 - $off % 8);    }}sub pagearray {    $line = 0;    $| = 1;    for (&drawscreen;;&drawscreen) {	$ch = &getch;	$ch = 'j' if $ch eq "\n";	if ($ch eq ' ') {	    last if $percent >= 100;	    &move(0,0);	    $line += $lines1;	}	elsif ($ch eq 'b') {	    $line -= $lines1;	    &move(0,0);	    $line = 0 if $line < 0;	}	elsif ($ch eq 'j') {	    next if $percent >= 100;	    $line += 1;	    if ($dl && $ho) {		print $ho, $dl;		&mvcur(0,0,$lines2,0);		print $ce,$lines[$line+$lines2],$ce;		&wmove($curscr,0,0);		&wdeleteln($curscr);		&wmove($curscr,$lines2,0);		&waddstr($curscr,$lines[$line+$lines2]);	    }	    &wmove($stdscr,0,0);	    &wdeleteln($stdscr);	    &wmove($stdscr,$lines2,0);	    &waddstr($stdscr,$lines[$line+$lines2]);	    &percent;	    &refresh;	    redo;	}	elsif ($ch eq 'k') {	    next if $line <= 0;	    $line -= 1;	    if ($al && $ho && $ce) {		print $ho, $al, $ce, $lines[$line];		&wmove($curscr,0,0);		&winsertln($curscr);		&waddstr($curscr,$lines[$line]);	    }	    &wmove($stdscr,0,0);	    &winsertln($stdscr);	    &waddstr($stdscr,$lines[$line]);	    &percent;	    &refresh;	    redo;	}	elsif ($ch eq "\f") {	    &clear;	}	elsif ($ch eq 'q') {	    last;	}	elsif ($ch eq 'h') {	    &clear;	    &help;	    &clear;	}	else {	    &bell;	}    }}sub defbell {    eval q#	sub bell {	    print "\007";	}    #;}sub help {    local(*lines) = *helplines;    local($line);    &pagearray;}sub inithelp {    @helplines = split(/\n/,<<'EOT');  h              Display this help.  q              Exit.  SPACE          Forward  screen.  b              Backward screen.  j, CR          Forward  1 line.  k              Backward 1 line.  FF             Repaint screen.EOT    for (@helplines) {	s/$/\n/;    }}sub percent {    &standout;      $percent = int(($line + $lines1) * 100 / @lines);      &move($lines1,0);      &addstr("($percent%)");    &standend;    &clrtoeol;}sub endit {    &move($lines1,0);    &clrtoeol;    &refresh;    &endwin;    if ($@) {	print "";				# force flush of stdout	$@ =~ s/\(eval\)/$0/ && $@ =~ s/line (\d+)/'line ' . ($1 + $evaloffset)/e;	die $@;    }    exit;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -