#define SvOVERLAY(sv) (overlay *)SvPTR (sv, "urxvt::overlay")
-class overlay {
+class overlay : overlay_base
+{
rxvt_term *THIS;
AV *overlay_av;
- int x, y, w, h;
int border;
- text_t **text;
- rend_t **rend;
public:
HV *self;
};
overlay::overlay (rxvt_term *THIS, int x_, int y_, int w_, int h_, rend_t rstyle, int border)
-: THIS(THIS), x(x_), y(y_), w(w_), h(h_), border(border == 2), overlay_av (0)
+: THIS(THIS), border(border == 2), overlay_av (0)
{
+ x = x_;
+ y = y_;
+ w = w_;
+ h = h_;
+
if (w < 0) w = 0;
if (h < 0) h = 0;
int ov_w = min (w, THIS->ncol - ov_x);
int ov_h = min (h, THIS->nrow - ov_y);
+ // hide cursor if it is within the overlay area
+ if (IN_RANGE_EXC (THIS->screen.cur.col - ov_x, 0, ov_w)
+ && IN_RANGE_EXC (THIS->screen.cur.row - ov_y, 0, ov_h))
+ THIS->screen.flags &= ~Screen_VisibleCursor;
+
for (int y = ov_h; y--; )
{
text_t *t1 = text [y];
{
perl_destruct (perl);
perl_free (perl);
+ PERL_SYS_TERM ();
}
}
perl_environ = rxvt_environ;
swap (perl_environ, environ);
- char *argv[] = {
+ char *args[] = {
"",
"-e"
"BEGIN {"
""
"use urxvt;"
};
+ int argc = sizeof (args) / sizeof (args[0]);
+ char **argv = args;
+ PERL_SYS_INIT3 (&argc, &argv, &environ);
perl = perl_alloc ();
perl_construct (perl);
- if (perl_parse (perl, xs_init, 2, argv, (char **)NULL)
+ if (perl_parse (perl, xs_init, argc, argv, (char **)NULL)
|| perl_run (perl))
{
rxvt_warn ("unable to initialize perl-interpreter, continuing without.\n");
#define TERM_OFFSET(sym) offsetof (TermWin_t, sym)
-#define TERM_OFFSET_width TERM_OFFSET(width)
-#define TERM_OFFSET_height TERM_OFFSET(height)
-#define TERM_OFFSET_fwidth TERM_OFFSET(fwidth)
-#define TERM_OFFSET_fheight TERM_OFFSET(fheight)
-#define TERM_OFFSET_fbase TERM_OFFSET(fbase)
-#define TERM_OFFSET_nrow TERM_OFFSET(nrow)
-#define TERM_OFFSET_ncol TERM_OFFSET(ncol)
-#define TERM_OFFSET_focus TERM_OFFSET(focus)
-#define TERM_OFFSET_mapped TERM_OFFSET(mapped)
-#define TERM_OFFSET_int_bwidth TERM_OFFSET(int_bwidth)
-#define TERM_OFFSET_ext_bwidth TERM_OFFSET(ext_bwidth)
-#define TERM_OFFSET_lineSpace TERM_OFFSET(lineSpace)
-#define TERM_OFFSET_saveLines TERM_OFFSET(saveLines)
-#define TERM_OFFSET_total_rows TERM_OFFSET(total_rows)
-#define TERM_OFFSET_top_row TERM_OFFSET(top_row)
+#define TERM_OFFSET_width TERM_OFFSET(width)
+#define TERM_OFFSET_height TERM_OFFSET(height)
+#define TERM_OFFSET_fwidth TERM_OFFSET(fwidth)
+#define TERM_OFFSET_fheight TERM_OFFSET(fheight)
+#define TERM_OFFSET_fbase TERM_OFFSET(fbase)
+#define TERM_OFFSET_nrow TERM_OFFSET(nrow)
+#define TERM_OFFSET_ncol TERM_OFFSET(ncol)
+#define TERM_OFFSET_focus TERM_OFFSET(focus)
+#define TERM_OFFSET_mapped TERM_OFFSET(mapped)
+#define TERM_OFFSET_int_bwidth TERM_OFFSET(int_bwidth)
+#define TERM_OFFSET_ext_bwidth TERM_OFFSET(ext_bwidth)
+#define TERM_OFFSET_lineSpace TERM_OFFSET(lineSpace)
+#define TERM_OFFSET_letterSpace TERM_OFFSET(letterSpace)
+#define TERM_OFFSET_saveLines TERM_OFFSET(saveLines)
+#define TERM_OFFSET_total_rows TERM_OFFSET(total_rows)
+#define TERM_OFFSET_top_row TERM_OFFSET(top_row)
int
rxvt_term::width ()
ALIAS:
- width = TERM_OFFSET_width
- height = TERM_OFFSET_height
- fwidth = TERM_OFFSET_fwidth
- fheight = TERM_OFFSET_fheight
- fbase = TERM_OFFSET_fbase
- nrow = TERM_OFFSET_nrow
- ncol = TERM_OFFSET_ncol
- focus = TERM_OFFSET_focus
- mapped = TERM_OFFSET_mapped
- int_bwidth = TERM_OFFSET_int_bwidth
- ext_bwidth = TERM_OFFSET_ext_bwidth
- lineSpace = TERM_OFFSET_lineSpace
- saveLines = TERM_OFFSET_saveLines
- total_rows = TERM_OFFSET_total_rows
- top_row = TERM_OFFSET_top_row
+ width = TERM_OFFSET_width
+ height = TERM_OFFSET_height
+ fwidth = TERM_OFFSET_fwidth
+ fheight = TERM_OFFSET_fheight
+ fbase = TERM_OFFSET_fbase
+ nrow = TERM_OFFSET_nrow
+ ncol = TERM_OFFSET_ncol
+ focus = TERM_OFFSET_focus
+ mapped = TERM_OFFSET_mapped
+ int_bwidth = TERM_OFFSET_int_bwidth
+ ext_bwidth = TERM_OFFSET_ext_bwidth
+ lineSpace = TERM_OFFSET_lineSpace
+ letterSpace = TERM_OFFSET_letterSpace
+ saveLines = TERM_OFFSET_saveLines
+ total_rows = TERM_OFFSET_total_rows
+ top_row = TERM_OFFSET_top_row
CODE:
RETVAL = *(int *)((char *)THIS + ix);
OUTPUT:
case 1: RETVAL = THIS->ModMetaMask; break;
case 2: RETVAL = THIS->ModNumLockMask; break;
case 3: RETVAL = THIS->current_screen; break;
+#ifdef CURSOR_BLINK
case 4: RETVAL = THIS->hidden_cursor; break;
+#endif
}
OUTPUT:
RETVAL
PUSHs (sv_2mortal (newSViv (rc.col)));
}
- if (items == 3)
+ if (items >= 3)
{
rc.row = SvIV (ST (1));
rc.col = SvIV (ST (2));
if (ix)
{
+ THIS->selection.screen = THIS->current_screen;
+
THIS->want_refresh = 1;
THIS->refresh_check ();
}
}
}
-char
-rxvt_term::cur_charset ()
+int
+rxvt_term::selection_screen (int screen = -1)
CODE:
- RETVAL = THIS->charsets [THIS->screen.charset];
- OUTPUT:
+ RETVAL = THIS->selection.screen;
+ if (screen >= 0)
+ THIS->selection.screen = screen;
+ OUTPUT:
RETVAL
void
-rxvt_term::selection_clear ()
+rxvt_term::selection_clear (bool clipboard = false)
+
+void
+rxvt_term::clipboard_copy (Time eventtime)
void
rxvt_term::selection_make (Time eventtime, bool rect = false)
THIS->selection_make (eventtime);
int
-rxvt_term::selection_grab (Time eventtime)
+rxvt_term::selection_grab (Time eventtime, bool clipboard = false)
void
rxvt_term::selection (SV *newtext = 0)
}
}
+char
+rxvt_term::cur_charset ()
+ CODE:
+ RETVAL = THIS->charsets [THIS->screen.charset];
+ OUTPUT:
+ RETVAL
+
void
rxvt_term::scr_xor_rect (int beg_row, int beg_col, int end_row, int end_col, U32 rstyle1 = RS_RVid, U32 rstyle2 = RS_RVid | RS_Uline)