to save memory in the common case of not using visual gimmicks.
- try to work around a race between urxvt and wm's on programmatic
resizes by temporarily disabling size hints.
+ - implement the DECSTR soft reset sequence and use it for tput init,
+ and make hard RIS and DECSTR both reset more private modes, such
+ as mouse reporting.
+ - redundantly clear mouse reporting and a few other states in
+ tput init/tput reset, for older urxvts.
+ - no longer clear the screen in tput init.
9.05 Sun Jun 15 20:09:20 CEST 2008
- new option --cd/chdir to set the starting working directory.
:as=\E(0:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:\
:dl=\E[M:do=^J:ds=\E]2;\007:ec=\E[%dX:ei=\E[4l:fs=^G:\
- :ho=\E[H:i1=\E[?47l\E=\E[?1l:ic=\E[@:im=\E[4h:\
- :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l:\
+ :ho=\E[H:i1=\E[!p:ic=\E[@:im=\E[4h:\
+ :is=\E[m\E[?7;25h\E[?1;3;4;5;6;7;9;66;1000;1001;1049l\E[4l:\
:k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:kD=\E[3~:\
:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kd=\E[B:ke=\E>:\
# From: Thomas Dickey <dickey@clark.net> 04 Oct 1997
# Updated: Özgür Kesim <kesim@math.fu-berlin.de> 02 Nov 1997
# Updated: Marc Lehmann <pcg@goof.com>, 17 Feb 2005
+# Updated: Marc Lehmann <schmorp@schmorp.de>, 04 Nov 2008: change init/reset sequences
rxvt-unicode|rxvt-unicode terminal (X Window System),
am,
bce,
il=\E[%p1%dL,
il1=\E[L,
ind=^J,
- is1=\E[?47l\E=\E[?1l,
- is2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l,
+ is1=\E[\041p,
+ is2=\E[r\E[m\E[?7;25h\E[?1;3;4;5;6;7;9;66;1000;1001;1049l\E[4l,
kDC=\E[3$,
kIC=\E2$,
kEND=\E[8$,
ri=\EM,
rmso=\E[27m,
rmul=\E[24m,
- rs1=\Ec,
- rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>,
+ rs1=\E[c,
+ rs2=\E[r\E[m\E[?7;25h\E[?1;3;4;5;6;7;9;66;1000;1001;1049l\E[4l,
sgr0=\E[m\017,
enacs=,
smacs=\E(0,
.\" ========================================================================
.\"
.IX Title "@@RXVT_NAME@@ 1"
-.TH @@RXVT_NAME@@ 1 "2008-06-15" "@@RXVT_VERSION@@" "RXVT-UNICODE"
+.TH @@RXVT_NAME@@ 1 "2008-11-04" "@@RXVT_VERSION@@" "RXVT-UNICODE"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
radii to 1 and another to a large number creates interesting effects
on some backgrounds. Maximum radius value is 128. Compile \fIafterimage\fR;
resource \fIblurRadius\fR.
+.IP "\fB\-icon\fR \fIfile\fR" 4
+.IX Item "-icon file"
+Compile \fIafterimage\fR: Use the specified image as application icon. This
+is used by many window managers, taskbars and pagers to represent the
+appliation window; resource \fIiconFile\fR.
.IP "\fB\-bg\fR \fIcolour\fR" 4
.IX Item "-bg colour"
Window background colour; resource \fBbackground\fR.
.IX Item "-bl"
Compile \fIfrills\fR: Set \s-1MWM\s0 hints to request a borderless window, i.e.
if honoured by the \s-1WM\s0, the rxvt-unicode window will not have window
-decorations; resource \fBborderLess\fR.
+decorations; resource \fBborderLess\fR. If the window manager does not
+support \s-1MWM\s0 hints (e.g. kwin), enables override-redirect mode.
.IP "\fB\-override\-redirect\fR" 4
.IX Item "-override-redirect"
Compile \fIfrills\fR: Sets override-redirect on the window; resource
Specify background blending type; option \fB\-blt\fR.
.IP "\fBblurRadius:\fR \fInumber\fR" 4
.IX Item "blurRadius: number"
-Apply Gaussian Blurr with the specified radius to the transparent
+Apply gaussian blur with the specified radius to the transparent
background image; option \fB\-blr\fR.
+.IP "\fBiconFile:\fR \fIfile\fR" 4
+.IX Item "iconFile: file"
+Set the application icon pixmap; option \fB\-icon\fR.
.IP "\fBscrollColor:\fR \fIcolour\fR" 4
.IX Item "scrollColor: colour"
Use the specified colour for the scrollbar [default #B2B2B2].
.IX Item "urgentOnBell: boolean"
\&\fBTrue\fR: set the urgency hint for the wm on receipt of a bell character.
\&\fBFalse\fR: do not set the urgency hint [default].
+.Sp
+@@RXVT_NAME@@ resets the urgency hint on every focus change.
.IP "\fBvisualBell:\fR \fIboolean\fR" 4
.IX Item "visualBell: boolean"
\&\fBTrue\fR: use visual bell on receipt of a bell character; option \fB\-vb\fR.
.IP "\fBperl-eval\fR: \fIstring\fR" 4
.IX Item "perl-eval: string"
Perl code to be evaluated when all extensions have been registered. See
-the @@RXVT_NAME@@\fIperl\fR\|(3) manpage. Due to security reasons, this resource
-will be ignored when running setuid/setgid.
+the @@RXVT_NAME@@\fIperl\fR\|(3) manpage.
.IP "\fBperl-lib\fR: \fIpath\fR" 4
.IX Item "perl-lib: path"
Colon-separated list of additional directories that hold extension
scripts. When looking for extensions specified by the \f(CW\*(C`perl\*(C'\fR resource,
@@RXVT_NAME@@ will first look in these directories and then in
-\&\fI@@RXVT_LIBDIR@@/urxvt/perl/\fR. Due to security reasons, this resource
-will be ignored when running setuid/setgid.
+\&\fI@@RXVT_LIBDIR@@/urxvt/perl/\fR.
.Sp
See the @@RXVT_NAME@@\fIperl\fR\|(3) manpage.
.IP "\fBselection.pattern\-\f(BIidx\fB\fR: \fIperl-regex\fR" 4
.\" ========================================================================
.\"
.IX Title "@@RXVT_NAME@@ 3"
-.TH @@RXVT_NAME@@ 3 "2008-06-15" "@@RXVT_VERSION@@" "RXVT-UNICODE"
+.TH @@RXVT_NAME@@ 3 "2008-11-04" "@@RXVT_VERSION@@" "RXVT-UNICODE"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
first argument.
.Sp
The following will add an entry \f(CW\*(C`myoption\*(C'\fR that changes
-\&\f(CW\*(C`$self\-\*(C'\fR{myoption}>:
+\&\f(CW\*(C`$self\->{myoption}\*(C'\fR:
.Sp
.Vb 3
\& push @{ $self\->{term}{option_popup_hook} }, sub {
It is called before lines are scrolled out (so rows 0 .. min ($lines \- 1,
\&\f(CW$nrow\fR \- 1) represent the lines to be scrolled out). \f(CW$saved\fR is the total
number of lines that will be in the scrollback buffer.
-.ie n .IP "on_osc_seq $term\fR, \f(CW$op\fR, \f(CW$args" 4
-.el .IP "on_osc_seq \f(CW$term\fR, \f(CW$op\fR, \f(CW$args\fR" 4
-.IX Item "on_osc_seq $term, $op, $args"
+.ie n .IP "on_osc_seq $term\fR, \f(CW$op\fR, \f(CW$args\fR, \f(CW$resp" 4
+.el .IP "on_osc_seq \f(CW$term\fR, \f(CW$op\fR, \f(CW$args\fR, \f(CW$resp\fR" 4
+.IX Item "on_osc_seq $term, $op, $args, $resp"
Called on every \s-1OSC\s0 sequence and can be used to suppress it or modify its
-behaviour. The default should be to return an empty list. A true value
+behaviour. The default should be to return an empty list. A true value
suppresses execution of the request completely. Make sure you don't get
-confused by recursive invocations when you output an osc sequence within
+confused by recursive invocations when you output an \s-1OSC\s0 sequence within
this callback.
.Sp
\&\f(CW\*(C`on_osc_seq_perl\*(C'\fR should be used for new behaviour.
-.ie n .IP "on_osc_seq_perl $term\fR, \f(CW$string" 4
-.el .IP "on_osc_seq_perl \f(CW$term\fR, \f(CW$string\fR" 4
-.IX Item "on_osc_seq_perl $term, $string"
+.ie n .IP "on_osc_seq_perl $term\fR, \f(CW$args\fR, \f(CW$resp" 4
+.el .IP "on_osc_seq_perl \f(CW$term\fR, \f(CW$args\fR, \f(CW$resp\fR" 4
+.IX Item "on_osc_seq_perl $term, $args, $resp"
Called whenever the \fB\s-1ESC\s0 ] 777 ; string \s-1ST\s0\fR command sequence (\s-1OSC\s0 =
operating system command) is processed. Cursor position and other state
information is up-to-date when this happens. For interoperability, the
-string should start with the extension name and a colon, to distinguish
-it from commands for other extensions, and this might be enforced in the
-future.
+string should start with the extension name (sans \-osc) and a semicolon,
+to distinguish it from commands for other extensions, and this might be
+enforced in the future.
+.Sp
+For example, \f(CW\*(C`overlay\-osc\*(C'\fR uses this:
+.Sp
+.Vb 2
+\& sub on_osc_seq_perl {
+\& my ($self, $osc, $resp) = @_;
+\&
+\& return unless $osc =~ s/^overlay;//;
+\&
+\& ... process remaining $osc string
+\& }
+.Ve
.Sp
Be careful not ever to trust (in a security sense) the data you receive,
as its source can not easily be controlled (e\-mail content, messages from
other users on the same system etc.).
+.Sp
+For responses, \f(CW$resp\fR contains the end-of-args separator used by the
+sender.
.ie n .IP "on_add_lines $term\fR, \f(CW$string" 4
.el .IP "on_add_lines \f(CW$term\fR, \f(CW$string\fR" 4
.IX Item "on_add_lines $term, $string"
.ie n .IP "on_refresh_begin $term" 4
.el .IP "on_refresh_begin \f(CW$term\fR" 4
.IX Item "on_refresh_begin $term"
-Called just before the screen gets redrawn. Can be used for overlay
-or similar effects by modify terminal contents in refresh_begin, and
+Called just before the screen gets redrawn. Can be used for overlay or
+similar effects by modifying the terminal contents in refresh_begin, and
restoring them in refresh_end. The built-in overlay and selection display
code is run after this hook, and takes precedence.
.ie n .IP "on_refresh_end $term" 4
.Sp
The methods currently supported on \f(CW\*(C`urxvt::overlay\*(C'\fR objects are:
.RS 4
-.ie n .IP "$overlay\fR\->set ($x, \f(CW$y\fR, \f(CW$text\fR, \f(CW$rend)" 4
-.el .IP "\f(CW$overlay\fR\->set ($x, \f(CW$y\fR, \f(CW$text\fR, \f(CW$rend\fR)" 4
-.IX Item "$overlay->set ($x, $y, $text, $rend)"
+.ie n .IP "$overlay\fR\->set ($x, \f(CW$y\fR, \f(CW$text\fR[, \f(CW$rend])" 4
+.el .IP "\f(CW$overlay\fR\->set ($x, \f(CW$y\fR, \f(CW$text\fR[, \f(CW$rend\fR])" 4
+.IX Item "$overlay->set ($x, $y, $text[, $rend])"
Similar to \f(CW\*(C`$term\->ROW_t\*(C'\fR and \f(CW\*(C`$term\->ROW_r\*(C'\fR in that it puts
text in rxvt-unicode's special encoding and an array of rendition values
at a specific position inside the overlay.
+.Sp
+If \f(CW$rend\fR is missing, then the rendition will not be changed.
.ie n .IP "$overlay\->hide" 4
.el .IP "\f(CW$overlay\fR\->hide" 4
.IX Item "$overlay->hide"
tt_write (ESCZ_ANSWER, sizeof (ESCZ_ANSWER) - 1);
break; /* steal obsolete ESC [ c */
- /* 8.3.16: CONTROL SEQUENCE INTRODUCER */
+ /* 8.3.16: CONTROL SEQUENCE INTRODUCER (CSI) */
case C1_CSI: /* ESC [ */
process_csi_seq ();
break;
- /* 8.3.90: OPERATING SYSTEM COMMAND */
+ /* 8.3.90: OPERATING SYSTEM COMMAND (OSC) */
case C1_OSC: /* ESC ] */
process_osc_seq ();
break;
- /* 8.3.106: RESET TO INITIAL STATE */
+ /* 8.3.106: RESET TO INITIAL STATE (RIS) */
case 'c':
mbstate.reset ();
scr_poweron ();
priv = 0;
ch = cmd_getc ();
- if (ch >= '<' && ch <= '?')
+ if ((ch >= '<' && ch <= '?') || ch == '!')
{
- /* '<' '=' '>' '?' */
+ /* '<' '=' '>' '?' '!' */
priv = ch;
ch = cmd_getc ();
}
if (ch == 'h' || ch == 'l' || ch == 'r' || ch == 's' || ch == 't')
process_terminal_mode (ch, priv, nargs, arg);
break;
+
+ case '!':
+ if (ch == CSI_70)
+ {
+ /* DECSTR: soft terminal reset, used by our terminfo since 9.06 */
+ scr_soft_reset ();
+
+ static const int pm_h[] = { 7, 25 };
+ static const int pm_l[] = { 1, 3, 4, 5, 6, 7, 9, 66, 1000, 1001, 1049 };
+
+ process_terminal_mode ('h', 0, sizeof (pm_h) / sizeof (pm_h[0]), pm_h);
+ process_terminal_mode ('l', 0, sizeof (pm_l) / sizeof (pm_l[0]), pm_l);
+ }
+ break;
}
+
return;
}
enum cursor_mode { SAVE, RESTORE };
void scr_poweron ();
+ void scr_soft_reset () NOTHROW;
void scr_cursor (cursor_mode mode) NOTHROW;
void scr_do_wrap () NOTHROW;
void scr_swap_screen () NOTHROW;
void
rxvt_term::scr_reset ()
{
-#if ENABLE_OVERLAY
- scr_overlay_off ();
-#endif
-
- rvideo_mode = false;
view_start = 0;
num_scr = 0;
if (ncol == prev_ncol && nrow == prev_nrow)
return;
- if (current_screen != PRIMARY)
- scr_swap_screen ();
-
// we need at least two lines for wrapping to work correctly
while (nrow + saveLines < 2)
{
clamp_it (screen.cur.row, 0, nrow - 1);
clamp_it (screen.cur.col, 0, ncol - 1);
-
- free (tabs);
}
CLEAR_ALL_SELECTION ();
prev_nrow = nrow;
prev_ncol = ncol;
- tabs = (char *)rxvt_malloc (ncol);
-
- for (int col = ncol; --col; )
- tabs [col] = col % TABSIZE == 0;
-
- if (current_screen != PRIMARY)
- scr_swap_screen ();
-
tt_winch ();
HOOK_INVOKE ((this, HOOK_RESET, DT_END));
free (row_buf);
free (swap_buf);
free (drawn_buf);
- free (tabs);
+ row_buf = 0; // signal that we freed all the arrays above
- row_buf = 0; // signal that we freed all the arrays
+ free (tabs);
+ tabs = 0;
}
}
/* ------------------------------------------------------------------------- */
/*
- * Hard reset
+ * Hard/Soft reset
*/
void
rxvt_term::scr_poweron ()
{
scr_release ();
prev_nrow = prev_ncol = 0;
+ scr_soft_reset ();
scr_reset ();
scr_clear (true);
scr_refresh ();
}
+void
+rxvt_term::scr_soft_reset ()
+{
+ /* only affects modes, nothing drastic such as clearing the screen */
+#if ENABLE_OVERLAY
+ scr_overlay_off ();
+#endif
+
+ rvideo_mode = false;
+
+ if (current_screen != PRIMARY)
+ scr_swap_screen ();
+
+ free (tabs);
+ tabs = (char *)rxvt_malloc (ncol);
+
+ for (int col = ncol; --col; )
+ tabs [col] = col % TABSIZE == 0;
+
+ if (current_screen != PRIMARY)
+ scr_swap_screen ();
+
+ scr_scroll_region (0, MAX_ROWS - 1);
+ scr_rendition (0, ~RS_None);
+ scr_insert_mode (0);
+}
+
/* ------------------------------------------------------------------------- *
* PROCESS SCREEN COMMANDS *
* ------------------------------------------------------------------------- */