ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/rxvtperl.xs
(Generate patch)

Comparing rxvt-unicode/src/rxvtperl.xs (file contents):
Revision 1.5 by root, Mon Jan 2 20:35:39 2006 UTC vs.
Revision 1.8 by root, Tue Jan 3 00:06:57 2006 UTC

35#include "rxvtutil.h" 35#include "rxvtutil.h"
36#include "rxvtperl.h" 36#include "rxvtperl.h"
37 37
38#include "perlxsi.c" 38#include "perlxsi.c"
39 39
40#undef LINENO
41#define LINENO(n) MOD (THIS->term_start + int(n), THIS->total_rows)
42#undef ROW
43#define ROW(n) THIS->row_buf [LINENO (n)]
44
40///////////////////////////////////////////////////////////////////////////// 45/////////////////////////////////////////////////////////////////////////////
41 46
42static wchar_t * 47static wchar_t *
43sv2wcs (SV *sv) 48sv2wcs (SV *sv)
44{ 49{
239 XPUSHs (sv_2mortal (newSViv (va_arg (ap, int)))); 244 XPUSHs (sv_2mortal (newSViv (va_arg (ap, int))));
240 break; 245 break;
241 246
242 case DT_LONG: 247 case DT_LONG:
243 XPUSHs (sv_2mortal (newSViv (va_arg (ap, long)))); 248 XPUSHs (sv_2mortal (newSViv (va_arg (ap, long))));
249 break;
250
251 case DT_STRING:
252 XPUSHs (sv_2mortal (newSVpv (va_arg (ap, char *), 0)));
244 break; 253 break;
245 254
246 case DT_END: 255 case DT_END:
247 { 256 {
248 va_end (ap); 257 va_end (ap);
303 set_hookname (VIEW_CHANGE); 312 set_hookname (VIEW_CHANGE);
304 set_hookname (SCROLL_BACK); 313 set_hookname (SCROLL_BACK);
305 set_hookname (TTY_ACTIVITY); 314 set_hookname (TTY_ACTIVITY);
306 set_hookname (REFRESH_BEGIN); 315 set_hookname (REFRESH_BEGIN);
307 set_hookname (REFRESH_END); 316 set_hookname (REFRESH_END);
317 set_hookname (KEYBOARD_COMMAND);
308 318
309 sv_setpv (get_sv ("urxvt::LIBDIR", 1), LIBDIR); 319 sv_setpv (get_sv ("urxvt::LIBDIR", 1), LIBDIR);
310} 320}
311 321
312void 322void
384 SvUTF8_on (RETVAL); 394 SvUTF8_on (RETVAL);
385 free (str); 395 free (str);
386} 396}
387 OUTPUT: 397 OUTPUT:
388 RETVAL 398 RETVAL
399
400int
401rxvt_term::nsaved ()
402 CODE:
403 RETVAL = THIS->nsaved;
404 OUTPUT:
405 RETVAL
406
407int
408rxvt_term::view_start (int newval = -1)
409 CODE:
410{
411 RETVAL = THIS->view_start;
412
413 if (newval >= 0)
414 {
415 THIS->view_start = min (newval, THIS->nsaved);
416 THIS->scr_changeview (RETVAL);
417 }
418}
419 OUTPUT:
420 RETVAL
421
422int
423rxvt_term::nrow ()
424 CODE:
425 RETVAL = THIS->nrow;
426 OUTPUT:
427 RETVAL
428
429int
430rxvt_term::ncol ()
431 CODE:
432 RETVAL = THIS->ncol;
433 OUTPUT:
434 RETVAL
435
436void
437rxvt_term::ROW_t (int row_number, SV *new_text = 0, int start_col = 0)
438 PPCODE:
439{
440 if (!IN_RANGE_EXC (row_number, -THIS->nsaved, THIS->nrow))
441 croak ("row_number number of out range");
442
443 line_t &l = ROW(row_number);
444
445 if (GIMME_V != G_VOID)
446 {
447 wchar_t *wstr = new wchar_t [THIS->ncol];
448
449 for (int col = 0; col <THIS->ncol; col++)
450 wstr [col] = l.t [col];
451
452 char *str = rxvt_wcstoutf8 (wstr, THIS->ncol);
453 free (wstr);
454
455 SV *sv = newSVpv (str, 0);
456 SvUTF8_on (sv);
457 XPUSHs (sv_2mortal (sv));
458 free (str);
459 }
460
461 if (new_text)
462 {
463 STRLEN slen;
464 char *str = SvPVutf8 (new_text, slen);
465 wchar_t *wstr = rxvt_utf8towcs (str, slen);
466
467 int len = wcslen (wstr);
468
469 if (start_col + len > THIS->ncol)
470 {
471 free (wstr);
472 croak ("new_text extends beyond right margin");
473 }
474
475 for (int col = start_col; col < start_col + len; col++)
476 {
477 l.t [col] = wstr [col];
478 l.r [col] = SET_FONT (l.r [col], THIS->fontset [GET_STYLE (l.r [col])]->find_font (l.t [col]));
479 }
480 }
481}
482
483void
484rxvt_term::ROW_r (int row_number, SV *new_rend = 0, int start_col = 0)
485 PPCODE:
486{
487 if (!IN_RANGE_EXC (row_number, -THIS->nsaved, THIS->nrow))
488 croak ("row_number number of out range");
489
490 line_t &l = ROW(row_number);
491
492 if (GIMME_V != G_VOID)
493 {
494 AV *av = newAV ();
495
496 av_extend (av, THIS->ncol - 1);
497 for (int col = 0; col < THIS->ncol; col++)
498 av_store (av, col, newSViv (l.r [col]));
499
500 XPUSHs (sv_2mortal (newRV_noinc ((SV *)av)));
501 }
502
503 if (new_rend)
504 {
505 if (!SvROK (new_rend) || SvTYPE (SvRV (new_rend)) != SVt_PVAV)
506 croak ("new_rend must be arrayref");
507
508 AV *av = (AV *)SvRV (new_rend);
509 int len = av_len (av) + 1;
510
511 if (start_col + len > THIS->ncol)
512 croak ("new_rend array extends beyond right margin");
513
514 for (int col = start_col; col < start_col + len; col++)
515 {
516 rend_t r = SvIV (*av_fetch (av, col, 1)) & ~RS_fontMask;
517
518 l.r [col] = SET_FONT (r, THIS->fontset [GET_STYLE (r)]->find_font (l.t [col]));
519 }
520 }
521}
522
523int
524rxvt_term::ROW_l (int row_number, int new_length = -2)
525 CODE:
526{
527 if (!IN_RANGE_EXC (row_number, -THIS->nsaved, THIS->nrow))
528 croak ("row_number number of out range");
529
530 line_t &l = ROW(row_number);
531 RETVAL = l.l;
532
533 if (new_length >= -1)
534 l.l = new_length;
535}
536 OUTPUT:
537 RETVAL
538
539SV *
540rxvt_term::special_encode (SV *str)
541 CODE:
542 abort ();//TODO
543
544SV *
545rxvt_term::special_decode (SV *str)
546 CODE:
547 abort ();//TODO
389 548
390void 549void
391rxvt_term::_resource (char *name, int index, SV *newval = 0) 550rxvt_term::_resource (char *name, int index, SV *newval = 0)
392 PPCODE: 551 PPCODE:
393{ 552{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines