/*--------------------------------*-C-*---------------------------------*
- * File: init.c
+ * File: init.c
*----------------------------------------------------------------------*
- * $Id: init.C,v 1.3 2003-11-25 11:52:42 pcg Exp $
+ * $Id: init.C,v 1.4 2003-11-25 15:25:17 pcg Exp $
*
* All portions of code are copyright by their respective author/s.
* Copyright (c) 1992 John Bovey, University of Kent at Canterbury <jdb@ukc.ac.uk>
- * - original version
+ * - original version
* Copyright (c) 1994 Robert Nation <nation@rocket.sanders.lockheed.com>
- * - extensive modifications
+ * - extensive modifications
* Copyright (c) 1998-2001 Geoff Wing <gcw@pobox.com>
- * - extensive modifications
+ * - extensive modifications
* Copyright (c) 1999 D J Hawkey Jr <hawkeyd@visi.com>
- * - QNX support
+ * - QNX support
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Initialisation routines.
*/
-#include "../config.h" /* NECESSARY */
-#include "rxvt.h" /* NECESSARY */
+#include "../config.h" /* NECESSARY */
+#include "rxvt.h" /* NECESSARY */
#include "init.h"
#include <signal.h>
COLOR_FOREGROUND,
COLOR_BACKGROUND,
/* low-intensity colors */
- "Black", /* 0: black (#000000) */
+ "Black", /* 0: black (#000000) */
#ifndef NO_BRIGHTCOLOR
- "Red3", /* 1: red (#CD0000) */
- "Green3", /* 2: green (#00CD00) */
- "Yellow3", /* 3: yellow (#CDCD00) */
- "Blue3", /* 4: blue (#0000CD) */
- "Magenta3", /* 5: magenta (#CD00CD) */
- "Cyan3", /* 6: cyan (#00CDCD) */
+ "Red3", /* 1: red (#CD0000) */
+ "Green3", /* 2: green (#00CD00) */
+ "Yellow3", /* 3: yellow (#CDCD00) */
+ "Blue3", /* 4: blue (#0000CD) */
+ "Magenta3", /* 5: magenta (#CD00CD) */
+ "Cyan3", /* 6: cyan (#00CDCD) */
# ifdef XTERM_COLORS
- "Grey90", /* 7: white (#E5E5E5) */
+ "Grey90", /* 7: white (#E5E5E5) */
# else
- "AntiqueWhite", /* 7: white (#FAEBD7) */
+ "AntiqueWhite", /* 7: white (#FAEBD7) */
# endif
/* high-intensity colors */
# ifdef XTERM_COLORS
- "Grey30", /* 8: bright black (#4D4D4D) */
+ "Grey30", /* 8: bright black (#4D4D4D) */
# else
- "Grey25", /* 8: bright black (#404040) */
+ "Grey25", /* 8: bright black (#404040) */
# endif
-#endif /* NO_BRIGHTCOLOR */
- "Red", /* 1/9: bright red (#FF0000) */
- "Green", /* 2/10: bright green (#00FF00) */
- "Yellow", /* 3/11: bright yellow (#FFFF00) */
- "Blue", /* 4/12: bright blue (#0000FF) */
- "Magenta", /* 5/13: bright magenta (#FF00FF) */
- "Cyan", /* 6/14: bright cyan (#00FFFF) */
- "White", /* 7/15: bright white (#FFFFFF) */
+#endif /* NO_BRIGHTCOLOR */
+ "Red", /* 1/9: bright red (#FF0000) */
+ "Green", /* 2/10: bright green (#00FF00) */
+ "Yellow", /* 3/11: bright yellow (#FFFF00) */
+ "Blue", /* 4/12: bright blue (#0000FF) */
+ "Magenta", /* 5/13: bright magenta (#FF00FF) */
+ "Cyan", /* 6/14: bright cyan (#00FFFF) */
+ "White", /* 7/15: bright white (#FFFFFF) */
#ifdef TTY_256COLOR
- "rgb:00/00/00", /* default 16-255 color table */
+ "rgb:00/00/00", /* default 16-255 color table */
"rgb:00/00/2a",
"rgb:00/00/55",
"rgb:00/00/7f",
#ifndef NO_CURSORCOLOR
COLOR_CURSOR_BACKGROUND,
COLOR_CURSOR_FOREGROUND,
-#endif /* ! NO_CURSORCOLOR */
- NULL, /* Color_pointer */
- NULL, /* Color_border */
+#endif /* ! NO_CURSORCOLOR */
+ NULL, /* Color_pointer */
+ NULL, /* Color_border */
#ifndef NO_BOLD_UNDERLINE_REVERSE
- NULL, /* Color_BD */
- NULL, /* Color_UL */
- NULL, /* Color_RV */
-#endif /* ! NO_BOLD_UNDERLINE_REVERSE */
+ NULL, /* Color_BD */
+ NULL, /* Color_UL */
+ NULL, /* Color_RV */
+#endif /* ! NO_BOLD_UNDERLINE_REVERSE */
#ifdef OPTION_HC
NULL,
#endif
#ifdef KEEP_SCROLLCOLOR
COLOR_SCROLLBAR,
COLOR_SCROLLTROUGH,
-#endif /* KEEP_SCROLLCOLOR */
+#endif /* KEEP_SCROLLCOLOR */
};
const char *const xa_names[NUM_XA] = {
"COMPOUND_TEXT",
- "MULTIPLE",
- "TARGETS",
+ "MULTIPLE",
+ "TARGETS",
"TEXT",
"TIMESTAMP",
"VT_SELECTION",
}
#endif
/*----------------------------------------------------------------------*/
-/* EXTPROTO */
-int
-rxvt_init_vars(pR)
+bool
+rxvt_term::init_vars()
{
- R->PixColors = (rxvt_color *)rxvt_malloc(sizeof(rxvt_color) * TOTAL_COLORS);
- if (R->PixColors == NULL)
- return -1;
+ PixColors = new rxvt_color [TOTAL_COLORS];
+ if (PixColors == NULL)
+ return false;
#if defined(XPM_BACKGROUND) || defined(TRANSPARENT)
- R->TermWin.pixmap = None;
+ TermWin.pixmap = None;
#endif
#ifdef UTMP_SUPPORT
- R->next_utmp_action = SAVE;
+ next_utmp_action = SAVE;
#endif
#ifndef NO_SETOWNER_TTYDEV
- R->next_tty_action = SAVE;
+ next_tty_action = SAVE;
#endif
- R->MEvent.time = CurrentTime;
- R->MEvent.button = AnyButton;
- R->Options = DEFAULT_OPTIONS;
- R->want_refresh = 1;
- R->cmd_pid = -1;
- R->cmd_fd = R->tty_fd = R->Xfd = -1;
- R->PrivateModes = R->SavedModes = PrivMode_Default;
- R->TermWin.focus = 1;
- R->TermWin.ncol = 80;
- R->TermWin.nrow = 24;
- R->TermWin.int_bwidth = INTERNALBORDERWIDTH;
- R->TermWin.ext_bwidth = EXTERNALBORDERWIDTH;
- R->TermWin.lineSpace = LINESPACE;
- R->TermWin.saveLines = SAVELINES;
- R->numPixColors = TOTAL_COLORS;
+ MEvent.time = CurrentTime;
+ MEvent.button = AnyButton;
+ Options = DEFAULT_OPTIONS;
+ want_refresh = 1;
+ cmd_pid = -1;
+ cmd_fd = tty_fd = Xfd = -1;
+ PrivateModes = SavedModes = PrivMode_Default;
+ TermWin.focus = 1;
+ TermWin.ncol = 80;
+ TermWin.nrow = 24;
+ TermWin.int_bwidth = INTERNALBORDERWIDTH;
+ TermWin.ext_bwidth = EXTERNALBORDERWIDTH;
+ TermWin.lineSpace = LINESPACE;
+ TermWin.saveLines = SAVELINES;
+ numPixColors = TOTAL_COLORS;
#ifndef NO_NEW_SELECTION
- R->selection_style = NEW_SELECT;
+ selection_style = NEW_SELECT;
#else
- R->selection_style = OLD_SELECT;
+ selection_style = OLD_SELECT;
#endif
#ifndef NO_BRIGHTCOLOR
- R->colorfgbg = DEFAULT_RSTYLE;
+ colorfgbg = DEFAULT_RSTYLE;
#endif
#if defined (HOTKEY_CTRL) || defined (HOTKEY_META)
- R->ks_bigfont = XK_greater;
- R->ks_smallfont = XK_less;
+ ks_bigfont = XK_greater;
+ ks_smallfont = XK_less;
#endif
#ifdef GREEK_SUPPORT
- R->ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;
+ ks_greekmodeswith = GREEK_KEYBOARD_MODESWITCH;
#endif
- R->refresh_limit = 1;
- R->refresh_type = SLOW_REFRESH;
- R->prev_nrow = R->prev_ncol = 0;
+ refresh_limit = 1;
+ refresh_type = SLOW_REFRESH;
+ prev_nrow = prev_ncol = 0;
#ifdef MULTICHAR_SET
# ifdef MULTICHAR_ENCODING
- R->encoding_method = MULTICHAR_ENCODING;
+ encoding_method = MULTICHAR_ENCODING;
# endif
- R->multichar_decode = rxvt_euc2jis;
+ multichar_decode = rxvt_euc2jis;
#endif
- R->oldcursor.row = R->oldcursor.col = -1;
+ oldcursor.row = oldcursor.col = -1;
#ifdef XPM_BACKGROUND
-/* R->bgPixmap.w = R->bgPixmap.h = 0; */
- R->bgPixmap.x = R->bgPixmap.y = 50;
- R->bgPixmap.pixmap = None;
+/* bgPixmap.w = bgPixmap.h = 0; */
+ bgPixmap.x = bgPixmap.y = 50;
+ bgPixmap.pixmap = None;
#endif
- R->last_bot = R->last_state = -1;
+ last_bot = last_state = -1;
#ifdef MENUBAR
- R->menu_readonly = 1;
+ menu_readonly = 1;
# if !(MENUBAR_MAX > 1)
- R->CurrentBar = &(R->BarList);
-# endif /* (MENUBAR_MAX > 1) */
+ CurrentBar = &(BarList);
+# endif /* (MENUBAR_MAX > 1) */
#endif
- return 0;
+
+ return true;
}
/* EXTPROTO */
#ifdef TTY_GID_SUPPORT
struct group *gr = getgrnam("tty");
- if (gr) { /* change group ownership of tty to "tty" */
- R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP;
- R->ttygid = gr->gr_gid;
+ if (gr) { /* change group ownership of tty to "tty" */
+ R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP;
+ R->ttygid = gr->gr_gid;
} else
-#endif /* TTY_GID_SUPPORT */
+#endif /* TTY_GID_SUPPORT */
{
- R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP | S_IWOTH;
- R->ttygid = getgid();
+ R->ttymode = S_IRUSR | S_IWUSR | S_IWGRP | S_IWOTH;
+ R->ttygid = getgid();
}
#if defined(HAVE_XSETLOCALE) || defined(HAVE_SETLOCALE)
R->locale = setlocale(LC_CTYPE, "");
* We don't want them, we don't need them.
*/
if ((i = open("/dev/null", O_RDONLY)) < 0) {
- /* TODO: BOO HISS */
- dup2(STDERR_FILENO, STDIN_FILENO);
+ /* TODO: BOO HISS */
+ dup2(STDERR_FILENO, STDIN_FILENO);
} else if (i > STDIN_FILENO) {
- dup2(i, STDIN_FILENO);
- close(i);
+ dup2(i, STDIN_FILENO);
+ close(i);
}
dup2(STDERR_FILENO, STDOUT_FILENO);
for (i = STDERR_FILENO + 1; i < R->num_fds; i++) {
-#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */
- if (i == 4 || i == 7)
- continue;
+#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */
+ if (i == 4 || i == 7)
+ continue;
#endif
- close(i);
+ close(i);
}
}
* Look for -exec option. Find => split and make cmd_argv[] of command args
*/
for (r_argc = 0; r_argc < argc; r_argc++)
- if (!STRCMP(argv[r_argc], "-e") || !STRCMP(argv[r_argc], "-exec"))
- break;
+ if (!STRCMP(argv[r_argc], "-e") || !STRCMP(argv[r_argc], "-exec"))
+ break;
r_argv = (const char **)rxvt_malloc(sizeof(char *) * (r_argc + 1));
for (i = 0; i < r_argc; i++)
- r_argv[i] = (const char *)argv[i];
+ r_argv[i] = (const char *)argv[i];
r_argv[i] = NULL;
if (r_argc == argc)
- cmd_argv = NULL;
+ cmd_argv = NULL;
else {
- cmd_argv = (const char **)rxvt_malloc(sizeof(char *) * (argc - r_argc));
+ cmd_argv = (const char **)rxvt_malloc(sizeof(char *) * (argc - r_argc));
- for (i = 0; i < argc - r_argc - 1; i++)
- cmd_argv[i] = (const char *)argv[i + r_argc + 1];
- cmd_argv[i] = NULL;
+ for (i = 0; i < argc - r_argc - 1; i++)
+ cmd_argv[i] = (const char *)argv[i + r_argc + 1];
+ cmd_argv[i] = NULL;
}
/* clear all resources */
rs = R->rs;
for (i = 0; i < NUM_RESOURCES;)
- rs[i++] = NULL;
+ rs[i++] = NULL;
rs[Rs_name] = rxvt_r_basename(argv[0]);
/*
* Open display, get options/resources and create the window
*/
if ((rs[Rs_display_name] = getenv("DISPLAY")) == NULL)
- rs[Rs_display_name] = ":0";
+ rs[Rs_display_name] = ":0";
rxvt_get_options(aR_ r_argc, r_argv);
free(r_argv);
#ifdef LOCAL_X_IS_UNIX
if (rs[Rs_display_name][0] == ':') {
- val = rxvt_malloc(5 + STRLEN(rs[Rs_display_name]));
- STRCPY(val, "unix");
- STRCAT(val, rs[Rs_display_name]);
- R->Xdisplay = XOpenDisplay(val);
- free(val);
+ val = rxvt_malloc(5 + STRLEN(rs[Rs_display_name]));
+ STRCPY(val, "unix");
+ STRCAT(val, rs[Rs_display_name]);
+ R->Xdisplay = XOpenDisplay(val);
+ free(val);
}
#endif
if (R->Xdisplay == NULL
- && (R->Xdisplay = XOpenDisplay(rs[Rs_display_name])) == NULL) {
- rxvt_print_error("can't open display %s", rs[Rs_display_name]);
- exit(EXIT_FAILURE);
+ && (R->Xdisplay = XOpenDisplay(rs[Rs_display_name])) == NULL) {
+ rxvt_print_error("can't open display %s", rs[Rs_display_name]);
+ exit(EXIT_FAILURE);
}
rxvt_extract_resources(aR_ R->Xdisplay, rs[Rs_name]);
* set any defaults not already set
*/
if (cmd_argv && cmd_argv[0]) {
- if (!rs[Rs_title])
- rs[Rs_title] = rxvt_r_basename(cmd_argv[0]);
- if (!rs[Rs_iconName])
- rs[Rs_iconName] = rs[Rs_title];
+ if (!rs[Rs_title])
+ rs[Rs_title] = rxvt_r_basename(cmd_argv[0]);
+ if (!rs[Rs_iconName])
+ rs[Rs_iconName] = rs[Rs_title];
} else {
- if (!rs[Rs_title])
- rs[Rs_title] = rs[Rs_name];
- if (!rs[Rs_iconName])
- rs[Rs_iconName] = rs[Rs_name];
+ if (!rs[Rs_title])
+ rs[Rs_title] = rs[Rs_name];
+ if (!rs[Rs_iconName])
+ rs[Rs_iconName] = rs[Rs_name];
}
if (rs[Rs_saveLines] && (i = atoi(rs[Rs_saveLines])) >= 0)
- R->TermWin.saveLines = BOUND_POSITIVE_INT16(i);
+ R->TermWin.saveLines = BOUND_POSITIVE_INT16(i);
#ifndef NO_FRILLS
if (rs[Rs_int_bwidth] && (i = atoi(rs[Rs_int_bwidth])) >= 0)
- R->TermWin.int_bwidth = min(i, 100); /* arbitrary limit */
+ R->TermWin.int_bwidth = min(i, 100); /* arbitrary limit */
if (rs[Rs_ext_bwidth] && (i = atoi(rs[Rs_ext_bwidth])) >= 0)
- R->TermWin.ext_bwidth = min(i, 100); /* arbitrary limit */
+ R->TermWin.ext_bwidth = min(i, 100); /* arbitrary limit */
#endif
#ifndef NO_LINESPACE
if (rs[Rs_lineSpace] && (i = atoi(rs[Rs_lineSpace])) >= 0)
- R->TermWin.lineSpace = min(i, 100); /* arbitrary limit */
+ R->TermWin.lineSpace = min(i, 100); /* arbitrary limit */
#endif
#ifdef POINTER_BLANK
if (rs[Rs_pointerBlankDelay] && (i = atoi(rs[Rs_pointerBlankDelay])) >= 0)
- R->pointerBlankDelay = i;
+ R->pointerBlankDelay = i;
else
- R->pointerBlankDelay = 2;
+ R->pointerBlankDelay = 2;
#endif
/* no point having a scrollbar without having any scrollback! */
if (!R->TermWin.saveLines)
- R->Options &= ~Opt_scrollBar;
+ R->Options &= ~Opt_scrollBar;
#ifdef PRINTPIPE
if (!rs[Rs_print_pipe])
- rs[Rs_print_pipe] = PRINTPIPE;
+ rs[Rs_print_pipe] = PRINTPIPE;
#endif
if (!rs[Rs_cutchars])
- rs[Rs_cutchars] = CUTCHARS;
+ rs[Rs_cutchars] = CUTCHARS;
#ifdef ACS_ASCII
if (!rs[Rs_acs_chars])
- rs[Rs_acs_chars] = ACS_CHARS;
+ rs[Rs_acs_chars] = ACS_CHARS;
if ((i = STRLEN(rs[Rs_acs_chars])) < 0x20) {
- val = rxvt_realloc((void *)rs[Rs_acs_chars], 0x20);
- for (; i < 0x20; )
- val[i] = ' ';
- rs[Rs_acs_chars] = val;
+ val = rxvt_realloc((void *)rs[Rs_acs_chars], 0x20);
+ for (; i < 0x20; )
+ val[i] = ' ';
+ rs[Rs_acs_chars] = val;
}
#endif
#ifndef NO_BACKSPACE_KEY
if (!rs[Rs_backspace_key])
# ifdef DEFAULT_BACKSPACE
- R->key_backspace = DEFAULT_BACKSPACE;
+ R->key_backspace = DEFAULT_BACKSPACE;
# else
- R->key_backspace = "DEC"; /* can toggle between \010 or \177 */
+ R->key_backspace = "DEC"; /* can toggle between \010 or \177 */
# endif
else {
- val = STRDUP(rs[Rs_backspace_key]);
- rxvt_Str_trim(val);
- rxvt_Str_escaped(val);
- R->key_backspace = val;
+ val = STRDUP(rs[Rs_backspace_key]);
+ rxvt_Str_trim(val);
+ rxvt_Str_escaped(val);
+ R->key_backspace = val;
}
#endif
#ifndef NO_DELETE_KEY
if (!rs[Rs_delete_key])
# ifdef DEFAULT_DELETE
- R->key_delete = DEFAULT_DELETE;
+ R->key_delete = DEFAULT_DELETE;
# else
- R->key_delete = "\033[3~";
+ R->key_delete = "\033[3~";
# endif
else {
- val = STRDUP(rs[Rs_delete_key]);
- rxvt_Str_trim(val);
- rxvt_Str_escaped(val);
- R->key_delete = val;
+ val = STRDUP(rs[Rs_delete_key]);
+ rxvt_Str_trim(val);
+ rxvt_Str_escaped(val);
+ R->key_delete = val;
}
#endif
if (rs[Rs_answerbackstring]) {
- rxvt_Str_trim((char *)rs[Rs_answerbackstring]);
- rxvt_Str_escaped((char *)rs[Rs_answerbackstring]);
+ rxvt_Str_trim((char *)rs[Rs_answerbackstring]);
+ rxvt_Str_escaped((char *)rs[Rs_answerbackstring]);
}
if (rs[Rs_selectstyle]) {
- if (STRNCASECMP(rs[Rs_selectstyle], "oldword", 7) == 0)
- R->selection_style = OLD_WORD_SELECT;
+ if (STRNCASECMP(rs[Rs_selectstyle], "oldword", 7) == 0)
+ R->selection_style = OLD_WORD_SELECT;
#ifndef NO_OLD_SELECTION
- else if (STRNCASECMP(rs[Rs_selectstyle], "old", 3) == 0)
- R->selection_style = OLD_SELECT;
+ else if (STRNCASECMP(rs[Rs_selectstyle], "old", 3) == 0)
+ R->selection_style = OLD_SELECT;
#endif
}
#ifdef HAVE_SCROLLBARS
rxvt_setup_scrollbar(aR_ rs[Rs_scrollBar_align], rs[Rs_scrollstyle],
- rs[Rs_scrollBar_thickness]);
+ rs[Rs_scrollBar_thickness]);
#endif
R->TermWin.fontset = new rxvt_fontset (aR);
#ifdef XTERM_REVERSE_VIDEO
/* this is how xterm implements reverseVideo */
if (R->Options & Opt_reverseVideo) {
- if (!rs[Rs_color + Color_fg])
- rs[Rs_color + Color_fg] = def_colorName[Color_bg];
- if (!rs[Rs_color + Color_bg])
- rs[Rs_color + Color_bg] = def_colorName[Color_fg];
+ if (!rs[Rs_color + Color_fg])
+ rs[Rs_color + Color_fg] = def_colorName[Color_bg];
+ if (!rs[Rs_color + Color_bg])
+ rs[Rs_color + Color_bg] = def_colorName[Color_fg];
}
#endif
for (i = 0; i < NRS_COLORS; i++)
- if (!rs[Rs_color + i])
- rs[Rs_color + i] = def_colorName[i];
+ if (!rs[Rs_color + i])
+ rs[Rs_color + i] = def_colorName[i];
#ifndef XTERM_REVERSE_VIDEO
/* this is how we implement reverseVideo */
if (R->Options & Opt_reverseVideo)
- SWAP_IT(rs[Rs_color + Color_fg], rs[Rs_color + Color_bg], const char *);
+ SWAP_IT(rs[Rs_color + Color_fg], rs[Rs_color + Color_bg], const char *);
#endif
/* convenient aliases for setting fg/bg to colors */
#ifndef NO_CURSORCOLOR
rxvt_color_aliases(aR_ Color_cursor);
rxvt_color_aliases(aR_ Color_cursor2);
-#endif /* NO_CURSORCOLOR */
+#endif /* NO_CURSORCOLOR */
rxvt_color_aliases(aR_ Color_pointer);
rxvt_color_aliases(aR_ Color_border);
#ifndef NO_BOLD_UNDERLINE_REVERSE
rxvt_color_aliases(aR_ Color_BD);
rxvt_color_aliases(aR_ Color_UL);
rxvt_color_aliases(aR_ Color_RV);
-#endif /* ! NO_BOLD_UNDERLINE_REVERSE */
+#endif /* ! NO_BOLD_UNDERLINE_REVERSE */
return cmd_argv;
}
val = rxvt_network_display(R->rs[Rs_display_name]);
R->rs[Rs_display_name] = (const char *)val;
if (val == NULL)
-#endif /* DISPLAY_IS_IP */
- val = XDisplayString(R->Xdisplay);
+#endif /* DISPLAY_IS_IP */
+ val = XDisplayString(R->Xdisplay);
if (R->rs[Rs_display_name] == NULL)
- R->rs[Rs_display_name] = val; /* use broken `:0' value */
+ R->rs[Rs_display_name] = val; /* use broken `:0' value */
i = STRLEN(val);
R->env_display = (char *)rxvt_malloc((i + 9) * sizeof(char));
R->env_windowid = (char *)rxvt_malloc((i + 10) * sizeof(char));
sprintf(R->env_windowid, "WINDOWID=%u",
- (unsigned int)R->TermWin.parent[0]);
+ (unsigned int)R->TermWin.parent[0]);
/* add entries to the environment:
* @ DISPLAY: in case we started with -display
* @ WINDOWID: X window id number of the window
* @ COLORTERM: terminal sub-name and also indicates its color
* @ TERM: terminal name
- * @ TERMINFO: path to terminfo directory
+ * @ TERMINFO: path to terminfo directory
*/
putenv(R->env_display);
putenv(R->env_windowid);
putenv("TERMINFO=" RXVT_TERMINFO);
#endif
if (XDEPTH <= 2)
- putenv("COLORTERM=" COLORTERMENV "-mono");
+ putenv("COLORTERM=" COLORTERMENV "-mono");
else
- putenv("COLORTERM=" COLORTERMENVFULL);
+ putenv("COLORTERM=" COLORTERMENVFULL);
if (R->rs[Rs_term_name] != NULL) {
- R->env_term = (char *)rxvt_malloc((STRLEN(R->rs[Rs_term_name]) + 6) * sizeof(char));
- sprintf(R->env_term, "TERM=%s", R->rs[Rs_term_name]);
- putenv(R->env_term);
+ R->env_term = (char *)rxvt_malloc((STRLEN(R->rs[Rs_term_name]) + 6) * sizeof(char));
+ sprintf(R->env_term, "TERM=%s", R->rs[Rs_term_name]);
+ putenv(R->env_term);
} else
- putenv("TERM=" TERMENV);
+ putenv("TERM=" TERMENV);
#ifdef HAVE_UNSETENV
/* avoid passing old settings and confusing term size */
unsetenv("LINES");
unsetenv("COLUMNS");
- unsetenv("TERMCAP"); /* terminfo should be okay */
-#endif /* HAVE_UNSETENV */
+ unsetenv("TERMCAP"); /* terminfo should be okay */
+#endif /* HAVE_UNSETENV */
}
/*----------------------------------------------------------------------*/
{
#ifdef USE_XIM
if (R->locale == NULL)
- rxvt_print_error("Setting locale failed.");
+ rxvt_print_error("Setting locale failed.");
else {
- Atom wmlocale;
-
- wmlocale = XInternAtom(R->Xdisplay, "WM_LOCALE_NAME", False);
- XChangeProperty(R->Xdisplay, R->TermWin.parent[0], wmlocale,
- XA_STRING, 8, PropModeReplace,
- (unsigned char *)R->locale, STRLEN(R->locale));
-
- if (XSupportsLocale() != True) {
- rxvt_print_error("The locale is not supported by Xlib");
- return;
- }
- rxvt_setTermFontSet(aR_ 0);
-
- /* see if we can connect yet */
- rxvt_IMInstantiateCallback(R->Xdisplay, NULL, NULL);
-
- /* To avoid Segmentation Fault in C locale: Solaris only? */
- if (STRCMP(R->locale, "C"))
- XRegisterIMInstantiateCallback(R->Xdisplay, NULL, NULL, NULL,
- rxvt_IMInstantiateCallback, NULL);
+ Atom wmlocale;
+
+ wmlocale = XInternAtom(R->Xdisplay, "WM_LOCALE_NAME", False);
+ XChangeProperty(R->Xdisplay, R->TermWin.parent[0], wmlocale,
+ XA_STRING, 8, PropModeReplace,
+ (unsigned char *)R->locale, STRLEN(R->locale));
+
+ if (XSupportsLocale() != True) {
+ rxvt_print_error("The locale is not supported by Xlib");
+ return;
+ }
+ rxvt_setTermFontSet(aR_ 0);
+
+ /* see if we can connect yet */
+ rxvt_IMInstantiateCallback(R->Xdisplay, NULL, NULL);
+
+ /* To avoid Segmentation Fault in C locale: Solaris only? */
+ if (STRCMP(R->locale, "C"))
+ XRegisterIMInstantiateCallback(R->Xdisplay, NULL, NULL, NULL,
+ rxvt_IMInstantiateCallback, NULL);
}
#endif
}
void
rxvt_init_command(pR_ const char *const *argv)
{
-/*
- * Initialize the command connection.
- * This should be called after the X server connection is established.
- */
- int i;
+ /*
+ * Initialize the command connection.
+ * This should be called after the X server connection is established.
+ */
+ int i;
- for (i = 0; i < NUM_XA; i++)
- R->xa[i] = XInternAtom(R->Xdisplay, xa_names[i], False);
+ for (i = 0; i < NUM_XA; i++)
+ R->xa[i] = XInternAtom(R->Xdisplay, xa_names[i], False);
/* Enable delete window protocol */
- XSetWMProtocols(R->Xdisplay, R->TermWin.parent[0],
- &(R->xa[XA_WMDELETEWINDOW]), 1);
+ XSetWMProtocols(R->Xdisplay, R->TermWin.parent[0],
+ &(R->xa[XA_WMDELETEWINDOW]), 1);
#ifdef USING_W11LIB
/* enable W11 callbacks */
- W11AddEventHandler(R->Xdisplay, rxvt_W11_process_x_event);
+ W11AddEventHandler(R->Xdisplay, rxvt_W11_process_x_event);
#endif
#ifdef META8_OPTION
- R->meta_char = (R->Options & Opt_meta8 ? 0x80 : C0_ESC);
+ R->meta_char = (R->Options & Opt_meta8 ? 0x80 : C0_ESC);
#endif
- rxvt_get_ourmods(aR);
- if (!(R->Options & Opt_scrollTtyOutput))
- R->PrivateModes |= PrivMode_TtyOutputInh;
- if (R->Options & Opt_scrollTtyKeypress)
- R->PrivateModes |= PrivMode_Keypress;
- if (!(R->Options & Opt_jumpScroll))
- R->PrivateModes |= PrivMode_smoothScroll;
+
+ rxvt_get_ourmods(aR);
+
+ if (!(R->Options & Opt_scrollTtyOutput))
+ R->PrivateModes |= PrivMode_TtyOutputInh;
+ if (R->Options & Opt_scrollTtyKeypress)
+ R->PrivateModes |= PrivMode_Keypress;
+ if (!(R->Options & Opt_jumpScroll))
+ R->PrivateModes |= PrivMode_smoothScroll;
#ifndef NO_BACKSPACE_KEY
- if (STRCMP(R->key_backspace, "DEC") == 0)
- R->PrivateModes |= PrivMode_HaveBackSpace;
+ if (STRCMP(R->key_backspace, "DEC") == 0)
+ R->PrivateModes |= PrivMode_HaveBackSpace;
#endif
/* add value for scrollBar */
- if (scrollbar_visible(R)) {
- R->PrivateModes |= PrivMode_scrollBar;
- R->SavedModes |= PrivMode_scrollBar;
+ if (scrollbar_visible(R))
+ {
+ R->PrivateModes |= PrivMode_scrollBar;
+ R->SavedModes |= PrivMode_scrollBar;
}
- if (menubar_visible(R)) {
- R->PrivateModes |= PrivMode_menuBar;
- R->SavedModes |= PrivMode_menuBar;
+ if (menubar_visible(R))
+ {
+ R->PrivateModes |= PrivMode_menuBar;
+ R->SavedModes |= PrivMode_menuBar;
}
#ifdef GREEK_SUPPORT
- greek_init();
+ greek_init();
#endif
- R->Xfd = XConnectionNumber(R->Xdisplay);
+ R->Xfd = XConnectionNumber (R->Xdisplay);
#ifdef CURSOR_BLINK
- if (R->Options & Opt_cursorBlink)
- (void)gettimeofday(&R->lastcursorchange, NULL);
+ if (R->Options & Opt_cursorBlink)
+ (void)gettimeofday(&R->lastcursorchange, NULL);
#endif
- if ((R->cmd_fd = rxvt_run_command(aR_ argv)) < 0) {
- rxvt_print_error("aborting");
- exit(EXIT_FAILURE);
+ if ((R->cmd_fd = rxvt_run_command (aR_ argv)) < 0)
+ {
+ rxvt_print_error ("aborting");
+ exit (EXIT_FAILURE);
}
}
int i;
for (i = 0; i < (XDEPTH <= 2 ? 2 : NRS_COLORS); i++) {
- rxvt_color xcol;
+ rxvt_color xcol;
- if (!R->rs[Rs_color + i])
- continue;
+ if (!R->rs[Rs_color + i])
+ continue;
- if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) {
+ if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) {
#ifndef XTERM_REVERSE_VIDEO
- if (i < 2 && (R->Options & Opt_reverseVideo)) {
- R->rs[Rs_color + i] = def_colorName[!i];
- } else
+ if (i < 2 && (R->Options & Opt_reverseVideo)) {
+ R->rs[Rs_color + i] = def_colorName[!i];
+ } else
#endif
- R->rs[Rs_color + i] = def_colorName[i];
- if (!R->rs[Rs_color + i])
- continue;
- if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) {
- switch (i) {
- case Color_fg:
- case Color_bg:
- /* fatal: need bg/fg color */
- rxvt_print_error("aborting");
- exit(EXIT_FAILURE);
- /* NOTREACHED */
- break;
+ R->rs[Rs_color + i] = def_colorName[i];
+ if (!R->rs[Rs_color + i])
+ continue;
+ if (!rxvt_rXParseAllocColor(aR_ &xcol, R->rs[Rs_color + i])) {
+ switch (i) {
+ case Color_fg:
+ case Color_bg:
+ /* fatal: need bg/fg color */
+ rxvt_print_error("aborting");
+ exit(EXIT_FAILURE);
+ /* NOTREACHED */
+ break;
#ifndef NO_CURSORCOLOR
- case Color_cursor2:
- xcol = R->PixColors[Color_fg];
- break;
-#endif /* ! NO_CURSORCOLOR */
- case Color_pointer:
- xcol = R->PixColors[Color_fg];
- break;
- default:
- xcol = R->PixColors[Color_bg]; /* None */
- break;
- }
- }
- }
- R->PixColors[i] = xcol;
- SET_PIXCOLOR(R, i);
+ case Color_cursor2:
+ xcol = R->PixColors[Color_fg];
+ break;
+#endif /* ! NO_CURSORCOLOR */
+ case Color_pointer:
+ xcol = R->PixColors[Color_fg];
+ break;
+ default:
+ xcol = R->PixColors[Color_bg]; /* None */
+ break;
+ }
+ }
+ }
+ R->PixColors[i] = xcol;
+ SET_PIXCOLOR(R, i);
}
if (XDEPTH <= 2 || !R->rs[Rs_color + Color_pointer])
- R->PixColors[Color_pointer] = R->PixColors[Color_fg];
+ R->PixColors[Color_pointer] = R->PixColors[Color_fg];
if (XDEPTH <= 2 || !R->rs[Rs_color + Color_border])
- R->PixColors[Color_border] = R->PixColors[Color_fg];
+ R->PixColors[Color_border] = R->PixColors[Color_fg];
/*
* get scrollBar/menuBar shadow colors
* from the fvwm window manager.
*/
#ifdef KEEP_SCROLLCOLOR
- if (XDEPTH <= 2) { /* Monochrome */
- R->PixColors[Color_scroll] = R->PixColors[Color_fg];
- R->PixColors[Color_topShadow] = R->PixColors[Color_bg];
- R->PixColors[Color_bottomShadow] = R->PixColors[Color_bg];
+ if (XDEPTH <= 2) { /* Monochrome */
+ R->PixColors[Color_scroll] = R->PixColors[Color_fg];
+ R->PixColors[Color_topShadow] = R->PixColors[Color_bg];
+ R->PixColors[Color_bottomShadow] = R->PixColors[Color_bg];
} else {
- rxvt_color xcol[3];
- /* xcol[0] == white
- * xcol[1] == top shadow
- * xcol[2] == bot shadow */
+ rxvt_color xcol[3];
+ /* xcol[0] == white
+ * xcol[1] == top shadow
+ * xcol[2] == bot shadow */
- xcol[1] = R->PixColors[Color_scroll];
+ xcol[1] = R->PixColors[Color_scroll];
# ifdef PREFER_24BIT
xcol[0].set (r, -1, -1, -1);
/* XFreeColors(R->Xdisplay, XCMAP, &(xcol[0].pixel), 1, ~0); */
xcol[0].get (r, R0, G0, B0);
xcol[1].get (r, R1, G1, B1);
- /* bottomShadowColor */
+ /* bottomShadowColor */
if (!xcol[2].set (aR_ R1 / 2, G1 / 2, B1 / 2))
- xcol[2] = R->PixColors[Color_Black];
+ xcol[2] = R->PixColors[Color_Black];
- R->PixColors[Color_bottomShadow] = xcol[2];
+ R->PixColors[Color_bottomShadow] = xcol[2];
- /* topShadowColor */
+ /* topShadowColor */
if (!xcol[1].set (aR_
min (R0, max (R0 / 5, R1) * 7 / 5),
min (G0, max (G0 / 5, G1) * 7 / 5),
min (B0, max (B0 / 5, B1) * 7 / 5)))
- xcol[1] = R->PixColors[Color_White];
+ xcol[1] = R->PixColors[Color_White];
- R->PixColors[Color_topShadow] = xcol[1];
+ R->PixColors[Color_topShadow] = xcol[1];
}
-#endif /* KEEP_SCROLLCOLOR */
+#endif /* KEEP_SCROLLCOLOR */
}
/*----------------------------------------------------------------------*/
rxvt_color_aliases(pR_ int idx)
{
if (R->rs[Rs_color + idx] && isdigit(*(R->rs[Rs_color + idx]))) {
- int i = atoi(R->rs[Rs_color + idx]);
+ int i = atoi(R->rs[Rs_color + idx]);
- if (i >= 8 && i <= 15) { /* bright colors */
- i -= 8;
+ if (i >= 8 && i <= 15) { /* bright colors */
+ i -= 8;
#ifndef NO_BRIGHTCOLOR
- R->rs[Rs_color + idx] = R->rs[Rs_color + minBrightCOLOR + i];
- return;
+ R->rs[Rs_color + idx] = R->rs[Rs_color + minBrightCOLOR + i];
+ return;
#endif
- }
- if (i >= 0 && i <= 7) /* normal colors */
- R->rs[Rs_color + idx] = R->rs[Rs_color + minCOLOR + i];
+ }
+ if (i >= 0 && i <= 7) /* normal colors */
+ R->rs[Rs_color + idx] = R->rs[Rs_color + minCOLOR + i];
}
}
XModifierKeymap *map;
KeyCode *kc;
const unsigned int modmasks[] =
- { Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask };
+ { Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask };
requestedmeta = realmeta = realalt = 0;
rsmod = R->rs[Rs_modifier];
if (rsmod
- && STRCASECMP(rsmod, "mod1") >= 0 && STRCASECMP(rsmod, "mod5") <= 0)
- requestedmeta = rsmod[3] - '0';
+ && STRCASECMP(rsmod, "mod1") >= 0 && STRCASECMP(rsmod, "mod5") <= 0)
+ requestedmeta = rsmod[3] - '0';
map = XGetModifierMapping(R->Xdisplay);
kc = map->modifiermap;
for (i = 1; i < 6; i++) {
- k = (i + 2) * map->max_keypermod; /* skip shift/lock/control */
- for (j = map->max_keypermod; j--; k++) {
- if (kc[k] == 0)
- break;
- switch (XKeycodeToKeysym(R->Xdisplay, kc[k], 0)) {
- case XK_Num_Lock:
- R->ModNumLockMask = modmasks[i - 1];
- /* FALLTHROUGH */
- default:
- continue; /* for(;;) */
- case XK_Meta_L:
- case XK_Meta_R:
- cm = "meta";
- realmeta = i;
- break;
- case XK_Alt_L:
- case XK_Alt_R:
- cm = "alt";
- realalt = i;
- break;
- case XK_Super_L:
- case XK_Super_R:
- cm = "super";
- break;
- case XK_Hyper_L:
- case XK_Hyper_R:
- cm = "hyper";
- break;
- }
- if (rsmod && STRNCASECMP(rsmod, cm, STRLEN(cm)) == 0)
- requestedmeta = i;
- }
+ k = (i + 2) * map->max_keypermod; /* skip shift/lock/control */
+ for (j = map->max_keypermod; j--; k++) {
+ if (kc[k] == 0)
+ break;
+ switch (XKeycodeToKeysym(R->Xdisplay, kc[k], 0)) {
+ case XK_Num_Lock:
+ R->ModNumLockMask = modmasks[i - 1];
+ /* FALLTHROUGH */
+ default:
+ continue; /* for(;;) */
+ case XK_Meta_L:
+ case XK_Meta_R:
+ cm = "meta";
+ realmeta = i;
+ break;
+ case XK_Alt_L:
+ case XK_Alt_R:
+ cm = "alt";
+ realalt = i;
+ break;
+ case XK_Super_L:
+ case XK_Super_R:
+ cm = "super";
+ break;
+ case XK_Hyper_L:
+ case XK_Hyper_R:
+ cm = "hyper";
+ break;
+ }
+ if (rsmod && STRNCASECMP(rsmod, cm, STRLEN(cm)) == 0)
+ requestedmeta = i;
+ }
}
XFreeModifiermap(map);
i = (requestedmeta ? requestedmeta
- : (realmeta ? realmeta
- : (realalt ? realalt : 0)));
+ : (realmeta ? realmeta
+ : (realalt ? realalt : 0)));
if (i)
- R->ModMetaMask = modmasks[i - 1];
+ R->ModMetaMask = modmasks[i - 1];
}
/*----------------------------------------------------------------------*/
blackcolour.set (r, 0, 0, 0);
#endif
if (R->Options & Opt_transparent) {
- XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen),
- &gattr);
- XDEPTH = gattr.depth;
+ XGetWindowAttributes(R->Xdisplay, RootWindow(R->Xdisplay, Xscreen),
+ &gattr);
+ XDEPTH = gattr.depth;
} else {
- XDEPTH = DefaultDepth(R->Xdisplay, Xscreen);
+ XDEPTH = DefaultDepth(R->Xdisplay, Xscreen);
/*
* If depth is not 24, look for a 24bit visual.
*/
- if (XDEPTH != 24) {
- XVisualInfo vinfo;
-
- if (XMatchVisualInfo(R->Xdisplay, Xscreen, 24, TrueColor, &vinfo)) {
- XDEPTH = 24;
- XVISUAL = vinfo.visual;
- XCMAP = XCreateColormap(R->Xdisplay,
- RootWindow(R->Xdisplay, Xscreen),
- XVISUAL, AllocNone);
- }
- }
+ if (XDEPTH != 24) {
+ XVisualInfo vinfo;
+
+ if (XMatchVisualInfo(R->Xdisplay, Xscreen, 24, TrueColor, &vinfo)) {
+ XDEPTH = 24;
+ XVISUAL = vinfo.visual;
+ XCMAP = XCreateColormap(R->Xdisplay,
+ RootWindow(R->Xdisplay, Xscreen),
+ XVISUAL, AllocNone);
+ }
+ }
}
#endif
attributes.border_pixel = R->PixColors[Color_border];
attributes.colormap = XCMAP;
R->TermWin.parent[0] = XCreateWindow(R->Xdisplay, Xroot,
- R->szHint.x, R->szHint.y,
- R->szHint.width, R->szHint.height,
- R->TermWin.ext_bwidth,
- XDEPTH, InputOutput,
- XVISUAL,
- CWBackPixel | CWBorderPixel
- | CWColormap, &attributes);
+ R->szHint.x, R->szHint.y,
+ R->szHint.width, R->szHint.height,
+ R->TermWin.ext_bwidth,
+ XDEPTH, InputOutput,
+ XVISUAL,
+ CWBackPixel | CWBorderPixel
+ | CWColormap, &attributes);
#else
R->TermWin.parent[0] = XCreateSimpleWindow(R->Xdisplay, Xroot,
- R->szHint.x, R->szHint.y,
- R->szHint.width,
- R->szHint.height,
- R->TermWin.ext_bwidth,
- R->PixColors[Color_border],
- R->PixColors[Color_fg]);
+ R->szHint.x, R->szHint.y,
+ R->szHint.width,
+ R->szHint.height,
+ R->TermWin.ext_bwidth,
+ R->PixColors[Color_border],
+ R->PixColors[Color_fg]);
#endif
rxvt_xterm_seq(aR_ XTerm_title, R->rs[Rs_title], CHAR_ST);
rxvt_xterm_seq(aR_ XTerm_iconName, R->rs[Rs_iconName], CHAR_ST);
wmHint.flags = (InputHint | StateHint | WindowGroupHint);
wmHint.input = True;
wmHint.initial_state = (R->Options & Opt_iconic ? IconicState
- : NormalState);
+ : NormalState);
wmHint.window_group = R->TermWin.parent[0];
XSetWMProperties(R->Xdisplay, R->TermWin.parent[0], NULL, NULL,
- (char **)argv, argc, &R->szHint, &wmHint, &classHint);
+ (char **)argv, argc, &R->szHint, &wmHint, &classHint);
XSelectInput(R->Xdisplay, R->TermWin.parent[0],
- (KeyPressMask
+ (KeyPressMask
#if defined(MOUSE_WHEEL) && defined(MOUSE_SLIP_WHEELING)
- | KeyReleaseMask
+ | KeyReleaseMask
#endif
- | FocusChangeMask | VisibilityChangeMask
- | StructureNotifyMask));
+ | FocusChangeMask | VisibilityChangeMask
+ | StructureNotifyMask));
/* vt cursor: Black-on-White is standard, but this is more popular */
R->TermWin_cursor = XCreateFontCursor(R->Xdisplay, XC_xterm);
#ifdef POINTER_BLANK
R->pointer_blank = XCreateGlyphCursor(R->Xdisplay, R->TermWin.font->fid,
- R->TermWin.font->fid, ' ', ' ',
- &blackcolour, &blackcolour);
+ R->TermWin.font->fid, ' ', ' ',
+ &blackcolour, &blackcolour);
#endif
/* the vt window */
R->TermWin.vt = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0],
- R->window_vt_x, R->window_vt_y,
- TermWin_TotalWidth(),
- TermWin_TotalHeight(),
- 0,
- R->PixColors[Color_fg],
- R->PixColors[Color_bg]);
+ R->window_vt_x, R->window_vt_y,
+ TermWin_TotalWidth(),
+ TermWin_TotalHeight(),
+ 0,
+ R->PixColors[Color_fg],
+ R->PixColors[Color_bg]);
#ifdef DEBUG_X
XStoreName(R->Xdisplay, R->TermWin.vt, "vt window");
#endif
rxvt_pointer_unblank(aR);
vt_emask = (ExposureMask | ButtonPressMask | ButtonReleaseMask
- | PropertyChangeMask);
+ | PropertyChangeMask);
#ifdef POINTER_BLANK
if ((R->Options & Opt_pointerBlank))
- vt_emask |= PointerMotionMask;
+ vt_emask |= PointerMotionMask;
else
#endif
- vt_emask |= (Button1MotionMask | Button3MotionMask);
+ vt_emask |= (Button1MotionMask | Button3MotionMask);
XSelectInput(R->Xdisplay, R->TermWin.vt, vt_emask);
#if defined(MENUBAR) && (MENUBAR_MAX > 1)
if (menuBar_height()) {
- R->menuBar.win = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0],
- R->window_vt_x, 0,
- TermWin_TotalWidth(),
- menuBar_TotalHeight(),
- 0,
- R->PixColors[Color_fg],
- R->PixColors[Color_scroll]);
+ R->menuBar.win = XCreateSimpleWindow(R->Xdisplay, R->TermWin.parent[0],
+ R->window_vt_x, 0,
+ TermWin_TotalWidth(),
+ menuBar_TotalHeight(),
+ 0,
+ R->PixColors[Color_fg],
+ R->PixColors[Color_scroll]);
#ifdef DEBUG_X
XStoreName(R->Xdisplay, R->menuBar.win, "menubar");
#endif
- XDefineCursor(R->Xdisplay, R->menuBar.win, R->pointer_leftptr);
- XSelectInput(R->Xdisplay, R->menuBar.win,
- (ExposureMask | ButtonPressMask | ButtonReleaseMask
- | Button1MotionMask));
+ XDefineCursor(R->Xdisplay, R->menuBar.win, R->pointer_leftptr);
+ XSelectInput(R->Xdisplay, R->menuBar.win,
+ (ExposureMask | ButtonPressMask | ButtonReleaseMask
+ | Button1MotionMask));
}
#endif
#ifdef XPM_BACKGROUND
if (R->rs[Rs_backgroundPixmap] != NULL
- && !(R->Options & Opt_transparent)) {
- const char *p = R->rs[Rs_backgroundPixmap];
-
- if ((p = STRCHR(p, ';')) != NULL) {
- p++;
- rxvt_scale_pixmap(aR_ p);
- }
- rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]);
- rxvt_scr_touch(aR_ True);
+ && !(R->Options & Opt_transparent)) {
+ const char *p = R->rs[Rs_backgroundPixmap];
+
+ if ((p = STRCHR(p, ';')) != NULL) {
+ p++;
+ rxvt_scale_pixmap(aR_ p);
+ }
+ rxvt_set_bgPixmap(aR_ R->rs[Rs_backgroundPixmap]);
+ rxvt_scr_touch(aR_ True);
}
#endif
gcvalue.background = R->PixColors[Color_bg];
gcvalue.graphics_exposures = 1;
R->TermWin.gc = XCreateGC(R->Xdisplay, R->TermWin.vt,
- GCForeground | GCBackground
- | GCGraphicsExposures, &gcvalue);
+ GCForeground | GCBackground
+ | GCGraphicsExposures, &gcvalue);
#if defined(MENUBAR) || defined(RXVT_SCROLLBAR)
gcvalue.foreground = R->PixColors[Color_topShadow];
R->topShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
- GCForeground, &gcvalue);
+ GCForeground, &gcvalue);
gcvalue.foreground = R->PixColors[Color_bottomShadow];
R->botShadowGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
- GCForeground, &gcvalue);
+ GCForeground, &gcvalue);
gcvalue.foreground = R->PixColors[(XDEPTH <= 2 ? Color_fg
- : Color_scroll)];
+ : Color_scroll)];
R->scrollbarGC = XCreateGC(R->Xdisplay, R->TermWin.vt,
- GCForeground, &gcvalue);
+ GCForeground, &gcvalue);
#endif
}
/* get master (pty) */
if ((cfd = rxvt_get_pty(&(R->tty_fd), &(R->ttydev))) < 0) {
- rxvt_print_error("can't open pseudo-tty");
- return -1;
+ rxvt_print_error("can't open pseudo-tty");
+ return -1;
}
#ifdef FD_SETSIZE
if (R->Xfd > FD_SETSIZE || cfd > FD_SETSIZE) {
- rxvt_print_error("fd too high: %d max", FD_SETSIZE);
- rxvt_clean_exit();
- exit(EXIT_FAILURE);
+ rxvt_print_error("fd too high: %d max", FD_SETSIZE);
+ rxvt_clean_exit();
+ exit(EXIT_FAILURE);
}
#endif
- fcntl(cfd, F_SETFL, O_NDELAY);
+ fcntl (cfd, F_SETFL, O_NONBLOCK);
/* get slave (tty) */
if (R->tty_fd < 0) {
#ifndef NO_SETOWNER_TTYDEV
- rxvt_privileged_ttydev(aR_ SAVE);
+ rxvt_privileged_ttydev(aR_ SAVE);
#endif
- if ((R->tty_fd = rxvt_get_tty(R->ttydev)) < 0) {
- close(cfd);
- rxvt_print_error("can't open slave tty %s", R->ttydev);
- return -1;
- }
+ if ((R->tty_fd = rxvt_get_tty(R->ttydev)) < 0) {
+ close(cfd);
+ rxvt_print_error("can't open slave tty %s", R->ttydev);
+ return -1;
+ }
}
#ifndef NO_BACKSPACE_KEY
if (R->key_backspace[0] && !R->key_backspace[1])
- er = R->key_backspace[0];
+ er = R->key_backspace[0];
else if (STRCMP(R->key_backspace, "DEC") == 0)
- er = '\177'; /* the initial state anyway */
+ er = '\177'; /* the initial state anyway */
else
#endif
- er = -1;
+ er = -1;
rxvt_get_ttymode(&(R->tio), er);
/* install exit handler for cleanup */
atexit(rxvt_clean_exit);
#else
# ifdef HAVE_ON_EXIT
- on_exit(rxvt_clean_exit, NULL); /* non-ANSI exit handler */
+ on_exit(rxvt_clean_exit, NULL); /* non-ANSI exit handler */
# endif
#endif
/* spin off the command interpreter */
switch (R->cmd_pid = fork()) {
case -1:
- rxvt_print_error("can't fork");
- return -1;
+ rxvt_print_error("can't fork");
+ return -1;
case 0:
- close(cfd); /* only keep R->tty_fd and STDERR open */
- close(R->Xfd);
- if (rxvt_control_tty(R->tty_fd, R->ttydev) < 0)
- rxvt_print_error("could not obtain control of tty");
- else {
- /* Reopen stdin, stdout and stderr over the tty file descriptor */
- dup2(R->tty_fd, STDIN_FILENO);
- dup2(R->tty_fd, STDOUT_FILENO);
- dup2(R->tty_fd, STDERR_FILENO);
- if (R->tty_fd > 2)
- close(R->tty_fd);
- rxvt_run_child(aR_ argv);
- }
- exit(EXIT_FAILURE);
- /* NOTREACHED */
+ close(cfd); /* only keep R->tty_fd and STDERR open */
+ close(R->Xfd);
+ if (rxvt_control_tty(R->tty_fd, R->ttydev) < 0)
+ rxvt_print_error("could not obtain control of tty");
+ else {
+ /* Reopen stdin, stdout and stderr over the tty file descriptor */
+ dup2(R->tty_fd, STDIN_FILENO);
+ dup2(R->tty_fd, STDOUT_FILENO);
+ dup2(R->tty_fd, STDERR_FILENO);
+ if (R->tty_fd > 2)
+ close(R->tty_fd);
+ rxvt_run_child(aR_ argv);
+ }
+ exit(EXIT_FAILURE);
+ /* NOTREACHED */
default:
- {
+ {
#if defined(HAVE_STRUCT_UTMP) && defined(HAVE_TTYSLOT)
- int fdstdin;
+ int fdstdin;
- fdstdin = dup(STDIN_FILENO);
- dup2(R->tty_fd, STDIN_FILENO);
+ fdstdin = dup(STDIN_FILENO);
+ dup2(R->tty_fd, STDIN_FILENO);
#endif
- rxvt_privileged_utmp(aR_ SAVE);
+ rxvt_privileged_utmp(aR_ SAVE);
#if defined(HAVE_STRUCT_UTMP) && defined(HAVE_TTYSLOT)
- dup2(fdstdin, STDIN_FILENO);
- close(fdstdin);
+ dup2(fdstdin, STDIN_FILENO);
+ close(fdstdin);
#endif
- }
- close(R->tty_fd); /* keep STDERR_FILENO, R->cmd_fd, R->Xfd open */
- break;
+ }
+ close(R->tty_fd); /* keep STDERR_FILENO, R->cmd_fd, R->Xfd open */
+ break;
}
-#else /* __QNX__ uses qnxspawn() */
+#else /* __QNX__ uses qnxspawn() */
fchmod(R->tty_fd, 0622);
fcntl(R->tty_fd, F_SETFD, FD_CLOEXEC);
fcntl(cfd, F_SETFD, FD_CLOEXEC);
if (rxvt_run_child(aR_ argv) == -1)
- exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
#endif
/*
* Reduce R->num_fds to what we use, so select() is more efficient
*/
R->num_fds = max(STDERR_FILENO, cfd);
MAX_IT(R->num_fds, R->Xfd);
-#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */
+#ifdef __sgi /* Alex Coventry says we need 4 & 7 too */
MAX_IT(R->num_fds, 7);
#endif
- R->num_fds++; /* counts from 0 */
+ R->num_fds++; /* counts from 0 */
return cfd;
}
{
char *login;
- SET_TTYMODE(STDIN_FILENO, &(R->tio)); /* init terminal attributes */
+ SET_TTYMODE(STDIN_FILENO, &(R->tio)); /* init terminal attributes */
- if (R->Options & Opt_console) { /* be virtual console, fail silently */
+ if (R->Options & Opt_console) { /* be virtual console, fail silently */
#ifdef TIOCCONS
- unsigned int on = 1;
+ unsigned int on = 1;
- ioctl(STDIN_FILENO, TIOCCONS, &on);
+ ioctl(STDIN_FILENO, TIOCCONS, &on);
#elif defined (SRIOCSREDIR)
- int fd;
-
- fd = open(CONSOLE, O_WRONLY, 0);
- if (fd >= 0) {
- if (ioctl(fd, SRIOCSREDIR, NULL) < 0)
- close(fd);
- }
-#endif /* SRIOCSREDIR */
+ int fd;
+
+ fd = open(CONSOLE, O_WRONLY, 0);
+ if (fd >= 0) {
+ if (ioctl(fd, SRIOCSREDIR, NULL) < 0)
+ close(fd);
+ }
+#endif /* SRIOCSREDIR */
}
/* reset signals and spin off the command interpreter */
signal(SIGTSTP, SIG_IGN);
signal(SIGTTIN, SIG_IGN);
signal(SIGTTOU, SIG_IGN);
-#endif /* SIGTSTP */
+#endif /* SIGTSTP */
/* set window size */
rxvt_tt_winsize(STDIN_FILENO, R->TermWin.ncol, R->TermWin.nrow, 0);
/* command interpreter path */
if (argv != NULL) {
# ifdef DEBUG_CMD
- int i;
+ int i;
- for (i = 0; argv[i]; i++)
- fprintf(stderr, "argv [%d] = \"%s\"\n", i, argv[i]);
+ for (i = 0; argv[i]; i++)
+ fprintf(stderr, "argv [%d] = \"%s\"\n", i, argv[i]);
# endif
- execvp(argv[0], (char *const *)argv);
- /* no error message: STDERR is closed! */
+ execvp(argv[0], (char *const *)argv);
+ /* no error message: STDERR is closed! */
} else {
- const char *argv0, *shell;
+ const char *argv0, *shell;
- if ((shell = getenv("SHELL")) == NULL || *shell == '\0')
- shell = "/bin/sh";
+ if ((shell = getenv("SHELL")) == NULL || *shell == '\0')
+ shell = "/bin/sh";
- argv0 = (const char *)rxvt_r_basename(shell);
- if (R->Options & Opt_loginShell) {
- login = (char *)rxvt_malloc((STRLEN(argv0) + 2) * sizeof(char));
+ argv0 = (const char *)rxvt_r_basename(shell);
+ if (R->Options & Opt_loginShell) {
+ login = (char *)rxvt_malloc((STRLEN(argv0) + 2) * sizeof(char));
- login[0] = '-';
- STRCPY(&login[1], argv0);
- argv0 = login;
- }
- execlp(shell, argv0, NULL);
- /* no error message: STDERR is closed! */
+ login[0] = '-';
+ STRCPY(&login[1], argv0);
+ argv0 = login;
+ }
+ execlp(shell, argv0, NULL);
+ /* no error message: STDERR is closed! */
}
-#else /* __QNX__ uses qnxspawn() */
+#else /* __QNX__ uses qnxspawn() */
{
- char iov_a[10] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
- char *command = NULL, fullcommand[_MAX_PATH];
- char **arg_v, *arg_a[2] = { NULL, NULL };
-
- if (argv != NULL) {
- if (access(argv[0], X_OK) == -1) {
- if (STRCHR(argv[0], '/') == NULL) {
- searchenv(argv[0], "PATH", fullcommand);
- if (fullcommand[0] != '\0')
- command = fullcommand;
- }
- if (access(command, X_OK) == -1)
- return -1;
- } else
- command = argv[0];
- arg_v = argv;
- } else {
- if ((command = getenv("SHELL")) == NULL || *command == '\0')
- command = "/bin/sh";
-
- arg_a[0] = my_basename(command);
- if (R->Options & Opt_loginShell) {
- login = rxvt_malloc((STRLEN(arg_a[0]) + 2) * sizeof(char));
-
- login[0] = '-';
- STRCPY(&login[1], arg_a[0]);
- arg_a[0] = login;
- }
- arg_v = arg_a;
- }
- iov_a[0] = iov_a[1] = iov_a[2] = R->tty_fd;
- R->cmd_pid = qnx_spawn(0, 0, 0, -1, -1,
- _SPAWN_SETSID | _SPAWN_TCSETPGRP,
- command, arg_v, environ, iov_a, 0);
- if (login)
- free(login);
- close(R->tty_fd);
- return R->cmd_fd;
+ char iov_a[10] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
+ char *command = NULL, fullcommand[_MAX_PATH];
+ char **arg_v, *arg_a[2] = { NULL, NULL };
+
+ if (argv != NULL) {
+ if (access(argv[0], X_OK) == -1) {
+ if (STRCHR(argv[0], '/') == NULL) {
+ searchenv(argv[0], "PATH", fullcommand);
+ if (fullcommand[0] != '\0')
+ command = fullcommand;
+ }
+ if (access(command, X_OK) == -1)
+ return -1;
+ } else
+ command = argv[0];
+ arg_v = argv;
+ } else {
+ if ((command = getenv("SHELL")) == NULL || *command == '\0')
+ command = "/bin/sh";
+
+ arg_a[0] = my_basename(command);
+ if (R->Options & Opt_loginShell) {
+ login = rxvt_malloc((STRLEN(arg_a[0]) + 2) * sizeof(char));
+
+ login[0] = '-';
+ STRCPY(&login[1], arg_a[0]);
+ arg_a[0] = login;
+ }
+ arg_v = arg_a;
+ }
+ iov_a[0] = iov_a[1] = iov_a[2] = R->tty_fd;
+ R->cmd_pid = qnx_spawn(0, 0, 0, -1, -1,
+ _SPAWN_SETSID | _SPAWN_TCSETPGRP,
+ command, arg_v, environ, iov_a, 0);
+ if (login)
+ free(login);
+ close(R->tty_fd);
+ return R->cmd_fd;
}
#endif
return -1;
* standard System V termios interface
*/
if (GET_TERMIOS(STDIN_FILENO, tio) < 0) {
- /* return error - use system defaults */
- tio->c_cc[VINTR] = CINTR;
- tio->c_cc[VQUIT] = CQUIT;
- tio->c_cc[VERASE] = CERASE;
- tio->c_cc[VKILL] = CKILL;
- tio->c_cc[VSTART] = CSTART;
- tio->c_cc[VSTOP] = CSTOP;
- tio->c_cc[VSUSP] = CSUSP;
+ /* return error - use system defaults */
+ tio->c_cc[VINTR] = CINTR;
+ tio->c_cc[VQUIT] = CQUIT;
+ tio->c_cc[VERASE] = CERASE;
+ tio->c_cc[VKILL] = CKILL;
+ tio->c_cc[VSTART] = CSTART;
+ tio->c_cc[VSTOP] = CSTOP;
+ tio->c_cc[VSUSP] = CSUSP;
# ifdef VDSUSP
- tio->c_cc[VDSUSP] = CDSUSP;
+ tio->c_cc[VDSUSP] = CDSUSP;
# endif
# ifdef VREPRINT
- tio->c_cc[VREPRINT] = CRPRNT;
+ tio->c_cc[VREPRINT] = CRPRNT;
# endif
# ifdef VDISCRD
- tio->c_cc[VDISCRD] = CFLUSH;
+ tio->c_cc[VDISCRD] = CFLUSH;
# endif
# ifdef VWERSE
- tio->c_cc[VWERSE] = CWERASE;
+ tio->c_cc[VWERSE] = CWERASE;
# endif
# ifdef VLNEXT
- tio->c_cc[VLNEXT] = CLNEXT;
+ tio->c_cc[VLNEXT] = CLNEXT;
# endif
}
tio->c_cc[VEOF] = CEOF;
tio->c_cc[VTIME] = 0;
# endif
if (erase != -1)
- tio->c_cc[VERASE] = (char)erase;
+ tio->c_cc[VERASE] = (char)erase;
/* input modes */
tio->c_iflag = (BRKINT | IGNPAR | ICRNL
# ifdef IMAXBEL
- | IMAXBEL
+ | IMAXBEL
# endif
- | IXON);
+ | IXON);
/* output modes */
tio->c_oflag = (OPOST | ONLCR);
/* line discipline modes */
tio->c_lflag = (ISIG | ICANON | IEXTEN | ECHO
# if defined (ECHOCTL) && defined (ECHOKE)
- | ECHOCTL | ECHOKE
+ | ECHOCTL | ECHOKE
# endif
- | ECHOE | ECHOK);
-# else /* HAVE_TERMIOS_H */
+ | ECHOE | ECHOK);
+# else /* HAVE_TERMIOS_H */
/*
* sgtty interface
/* get parameters -- gtty */
if (ioctl(STDIN_FILENO, TIOCGETP, &(tio->sg)) < 0) {
- tio->sg.sg_erase = CERASE; /* ^H */
- tio->sg.sg_kill = CKILL; /* ^U */
+ tio->sg.sg_erase = CERASE; /* ^H */
+ tio->sg.sg_kill = CKILL; /* ^U */
}
if (erase != -1)
- tio->sg.sg_erase = (char)erase;
+ tio->sg.sg_erase = (char)erase;
tio->sg.sg_flags = (CRMOD | ECHO | EVENP | ODDP);
/* get special characters */
if (ioctl(STDIN_FILENO, TIOCGETC, &(tio->tc)) < 0) {
- tio->tc.t_intrc = CINTR; /* ^C */
- tio->tc.t_quitc = CQUIT; /* ^\ */
- tio->tc.t_startc = CSTART; /* ^Q */
- tio->tc.t_stopc = CSTOP; /* ^S */
- tio->tc.t_eofc = CEOF; /* ^D */
- tio->tc.t_brkc = -1;
+ tio->tc.t_intrc = CINTR; /* ^C */
+ tio->tc.t_quitc = CQUIT; /* ^\ */
+ tio->tc.t_startc = CSTART; /* ^Q */
+ tio->tc.t_stopc = CSTOP; /* ^S */
+ tio->tc.t_eofc = CEOF; /* ^D */
+ tio->tc.t_brkc = -1;
}
/* get local special chars */
if (ioctl(STDIN_FILENO, TIOCGLTC, &(tio->lc)) < 0) {
- tio->lc.t_suspc = CSUSP; /* ^Z */
- tio->lc.t_dsuspc = CDSUSP; /* ^Y */
- tio->lc.t_rprntc = CRPRNT; /* ^R */
- tio->lc.t_flushc = CFLUSH; /* ^O */
- tio->lc.t_werasc = CWERASE; /* ^W */
- tio->lc.t_lnextc = CLNEXT; /* ^V */
+ tio->lc.t_suspc = CSUSP; /* ^Z */
+ tio->lc.t_dsuspc = CDSUSP; /* ^Y */
+ tio->lc.t_rprntc = CRPRNT; /* ^R */
+ tio->lc.t_flushc = CFLUSH; /* ^O */
+ tio->lc.t_werasc = CWERASE; /* ^W */
+ tio->lc.t_lnextc = CLNEXT; /* ^V */
}
/* get line discipline */
ioctl(STDIN_FILENO, TIOCGETD, &(tio->line));
# ifdef NTTYDISC
tio->line = NTTYDISC;
-# endif /* NTTYDISC */
+# endif /* NTTYDISC */
tio->local = (LCRTBS | LCRTERA | LCTLECH | LPASS8 | LCRTKIL);
-#endif /* HAVE_TERMIOS_H */
+#endif /* HAVE_TERMIOS_H */
/*
* Debugging
fprintf(stderr, "Input flags\n");
/* cpp token stringize doesn't work on all machines <sigh> */
-# define FOO(flag,name) \
- if ((tio->c_iflag) & flag) \
- fprintf (stderr, "%s ", name)
+# define FOO(flag,name) \
+ if ((tio->c_iflag) & flag) \
+ fprintf (stderr, "%s ", name)
/* c_iflag bits */
FOO(IGNBRK, "IGNBRK");
fprintf(stderr, "\n");
# undef FOO
-# define FOO(entry, name) \
+# define FOO(entry, name) \
fprintf(stderr, "%-8s = %#04o\n", name, tio->c_cc [entry])
FOO(VINTR, "VINTR");
# endif
fprintf(stderr, "\n");
# undef FOO
-# endif /* HAVE_TERMIOS_H */
-#endif /* DEBUG_TTYMODE */
+# endif /* HAVE_TERMIOS_H */
+#endif /* DEBUG_TTYMODE */
}
/*----------------------- end-of-file (C source) -----------------------*/
/*--------------------------------*-C-*--------------------------------------*
- * File: screen.c
+ * File: screen.c
*---------------------------------------------------------------------------*
- * $Id: screen.C,v 1.3 2003-11-25 11:52:42 pcg Exp $
+ * $Id: screen.C,v 1.4 2003-11-25 15:25:17 pcg Exp $
*
* Copyright (c) 1997-2001 Geoff Wing <gcw@pobox.com>
*
* We handle _all_ screen updates and selections
*/
-#include "../config.h" /* NECESSARY */
+#include "../config.h" /* NECESSARY */
#define INTERN_SCREEN
-#include "rxvt.h" /* NECESSARY */
-#include "screen.intpro" /* PROTOS for internal routines */
+#include "rxvt.h" /* NECESSARY */
+#include "screen.intpro" /* PROTOS for internal routines */
-#include <X11/Xmd.h> /* get the typedef for CARD32 */
+#include <X11/Xmd.h> /* get the typedef for CARD32 */
#include <stdint.h>
#include <wchar.h>
*start++ = value;
}
-#define RESET_CHSTAT(H) \
- if ((H)->chstat == WBYTE) \
- (H)->chstat = SBYTE, (H)->lost_multi = 1
+#define RESET_CHSTAT(H) \
+ if ((H)->chstat == WBYTE) \
+ (H)->chstat = SBYTE, (H)->lost_multi = 1
/* ------------------------------------------------------------------------- */
-#define PROP_SIZE 16384
-#define TABSIZE 8 /* default tab size */
+#define PROP_SIZE 16384
+#define TABSIZE 8 /* default tab size */
/* ------------------------------------------------------------------------- *
* GENERAL SCREEN AND SELECTION UPDATE ROUTINES *
* ------------------------------------------------------------------------- */
-#define ZERO_SCROLLBACK(R) \
- if (((R)->Options & Opt_scrollTtyOutput) == Opt_scrollTtyOutput) \
- (R)->TermWin.view_start = 0
-#define CLEAR_SELECTION(R) \
- (R)->selection.beg.row = (R)->selection.beg.col \
- = (R)->selection.end.row = (R)->selection.end.col = 0
-#define CLEAR_ALL_SELECTION(R) \
- (R)->selection.beg.row = (R)->selection.beg.col \
- = (R)->selection.mark.row = (R)->selection.mark.col \
- = (R)->selection.end.row = (R)->selection.end.col = 0
-
-#define ROW_AND_COL_IS_AFTER(A, B, C, D) \
+#define ZERO_SCROLLBACK(R) \
+ if (((R)->Options & Opt_scrollTtyOutput) == Opt_scrollTtyOutput) \
+ (R)->TermWin.view_start = 0
+#define CLEAR_SELECTION(R) \
+ (R)->selection.beg.row = (R)->selection.beg.col \
+ = (R)->selection.end.row = (R)->selection.end.col = 0
+#define CLEAR_ALL_SELECTION(R) \
+ (R)->selection.beg.row = (R)->selection.beg.col \
+ = (R)->selection.mark.row = (R)->selection.mark.col \
+ = (R)->selection.end.row = (R)->selection.end.col = 0
+
+#define ROW_AND_COL_IS_AFTER(A, B, C, D) \
(((A) > (C)) || (((A) == (C)) && ((B) > (D))))
-#define ROW_AND_COL_IS_BEFORE(A, B, C, D) \
+#define ROW_AND_COL_IS_BEFORE(A, B, C, D) \
(((A) < (C)) || (((A) == (C)) && ((B) < (D))))
-#define ROW_AND_COL_IN_ROW_AFTER(A, B, C, D) \
+#define ROW_AND_COL_IN_ROW_AFTER(A, B, C, D) \
(((A) == (C)) && ((B) > (D)))
-#define ROW_AND_COL_IN_ROW_AT_OR_AFTER(A, B, C, D) \
+#define ROW_AND_COL_IN_ROW_AT_OR_AFTER(A, B, C, D) \
(((A) == (C)) && ((B) >= (D)))
-#define ROW_AND_COL_IN_ROW_BEFORE(A, B, C, D) \
+#define ROW_AND_COL_IN_ROW_BEFORE(A, B, C, D) \
(((A) == (C)) && ((B) < (D)))
-#define ROW_AND_COL_IN_ROW_AT_OR_BEFORE(A, B, C, D) \
+#define ROW_AND_COL_IN_ROW_AT_OR_BEFORE(A, B, C, D) \
(((A) == (C)) && ((B) <= (D)))
/* these must be row_col_t */
-#define ROWCOL_IS_AFTER(X, Y) \
+#define ROWCOL_IS_AFTER(X, Y) \
ROW_AND_COL_IS_AFTER((X).row, (X).col, (Y).row, (Y).col)
-#define ROWCOL_IS_BEFORE(X, Y) \
+#define ROWCOL_IS_BEFORE(X, Y) \
ROW_AND_COL_IS_BEFORE((X).row, (X).col, (Y).row, (Y).col)
-#define ROWCOL_IN_ROW_AFTER(X, Y) \
+#define ROWCOL_IN_ROW_AFTER(X, Y) \
ROW_AND_COL_IN_ROW_AFTER((X).row, (X).col, (Y).row, (Y).col)
-#define ROWCOL_IN_ROW_BEFORE(X, Y) \
+#define ROWCOL_IN_ROW_BEFORE(X, Y) \
ROW_AND_COL_IN_ROW_BEFORE((X).row, (X).col, (Y).row, (Y).col)
-#define ROWCOL_IN_ROW_AT_OR_AFTER(X, Y) \
+#define ROWCOL_IN_ROW_AT_OR_AFTER(X, Y) \
ROW_AND_COL_IN_ROW_AT_OR_AFTER((X).row, (X).col, (Y).row, (Y).col)
-#define ROWCOL_IN_ROW_AT_OR_BEFORE(X, Y) \
+#define ROWCOL_IN_ROW_AT_OR_BEFORE(X, Y) \
ROW_AND_COL_IN_ROW_AT_OR_BEFORE((X).row, (X).col, (Y).row, (Y).col)
/*
* CLEAR_CHARS: clear <num> chars starting from pixel position <x,y>
* ERASE_ROWS : set <num> rows starting from row <row> to the foreground colour
*/
-#define drawBuffer (R->TermWin.vt)
+#define drawBuffer (R->TermWin.vt)
-#define CLEAR_ROWS(row, num) \
- if (R->TermWin.mapped) \
- XClearArea(R->Xdisplay, drawBuffer, R->TermWin.int_bwidth, \
- Row2Pixel(row), (unsigned int)R->TermWin.width, \
- (unsigned int)Height2Pixel(num), False)
+#define CLEAR_ROWS(row, num) \
+ if (R->TermWin.mapped) \
+ XClearArea(R->Xdisplay, drawBuffer, R->TermWin.int_bwidth, \
+ Row2Pixel(row), (unsigned int)R->TermWin.width, \
+ (unsigned int)Height2Pixel(num), False)
-#define CLEAR_CHARS(x, y, num) \
- if (R->TermWin.mapped) \
- XClearArea(R->Xdisplay, drawBuffer, x, y, \
- (unsigned int)Width2Pixel(num), \
- (unsigned int)Height2Pixel(1), False)
+#define CLEAR_CHARS(x, y, num) \
+ if (R->TermWin.mapped) \
+ XClearArea(R->Xdisplay, drawBuffer, x, y, \
+ (unsigned int)Width2Pixel(num), \
+ (unsigned int)Height2Pixel(1), False)
-#define ERASE_ROWS(row, num) \
- XFillRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc, \
- R->TermWin.int_bwidth, Row2Pixel(row), \
- (unsigned int)R->TermWin.width, \
- (unsigned int)Height2Pixel(num))
+#define ERASE_ROWS(row, num) \
+ XFillRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc, \
+ R->TermWin.int_bwidth, Row2Pixel(row), \
+ (unsigned int)R->TermWin.width, \
+ (unsigned int)Height2Pixel(num))
/* ------------------------------------------------------------------------- *
* SCREEN `COMMON' ROUTINES *
while (width--)
{
*et++ = ' ';
- *er++ = efs;
+ *er++ = efs;
}
}
assert((tp[row] && rp[row]) || (tp[row] == NULL && rp[row] == NULL));
#endif
if (tp[row] == NULL) {
- tp[row] = (text_t *)rxvt_malloc(sizeof(text_t) * width);
- rp[row] = (rend_t *)rxvt_malloc(sizeof(rend_t) * width);
+ tp[row] = (text_t *)rxvt_malloc(sizeof(text_t) * width);
+ rp[row] = (rend_t *)rxvt_malloc(sizeof(rend_t) * width);
}
rxvt_blank_line (aR_ tp[row], rp[row], width, efs);
}
rxvt_scr_reset(pR)
{
unsigned int ncol, nrow, prev_ncol, prev_nrow,
- total_rows, prev_total_rows;
+ total_rows, prev_total_rows;
unsigned int p, q;
int k;
rend_t setrstyle;
prev_ncol = R->prev_ncol;
prev_nrow = R->prev_nrow;
if (R->TermWin.ncol == 0)
- R->TermWin.ncol = 80;
+ R->TermWin.ncol = 80;
if (R->TermWin.nrow == 0)
- R->TermWin.nrow = 24;
+ R->TermWin.nrow = 24;
ncol = R->TermWin.ncol;
nrow = R->TermWin.nrow;
if (ncol == prev_ncol && nrow == prev_nrow)
- return;
+ return;
R->want_refresh = 1;
* A: first time called so just malloc everything : don't rely on realloc
* Note: this is still needed so that all the scrollback lines are NULL
*/
- R->screen.text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *));
- R->buf_text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *));
- R->drawn_text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *));
- R->swap.text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *));
-
- R->screen.tlen = (int16_t *)rxvt_calloc(total_rows, sizeof(int16_t));
- R->swap.tlen = (int16_t *)rxvt_calloc(nrow, sizeof(int16_t));
-
- R->screen.rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *));
- R->buf_rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *));
- R->drawn_rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *));
- R->swap.rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *));
-
- for (p = 0; p < nrow; p++) {
- q = p + R->TermWin.saveLines;
- rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
- q, DEFAULT_RSTYLE);
- rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend,
- p, DEFAULT_RSTYLE);
- R->screen.tlen[q] = R->swap.tlen[p] = 0;
- rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend,
- p, DEFAULT_RSTYLE);
- }
- MEMSET(R->charsets, 'B', sizeof(R->charsets));
- R->TermWin.nscrolled = 0; /* no saved lines */
- R->rstyle = DEFAULT_RSTYLE;
- R->screen.flags = Screen_DefaultFlags;
- R->screen.cur.row = R->screen.cur.col = 0;
- R->screen.charset = 0;
- R->current_screen = PRIMARY;
- rxvt_scr_cursor(aR_ SAVE);
+ R->screen.text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *));
+ R->buf_text = (text_t **)rxvt_calloc(total_rows, sizeof(text_t *));
+ R->drawn_text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *));
+ R->swap.text = (text_t **)rxvt_calloc(nrow, sizeof(text_t *));
+
+ R->screen.tlen = (int16_t *)rxvt_calloc(total_rows, sizeof(int16_t));
+ R->swap.tlen = (int16_t *)rxvt_calloc(nrow, sizeof(int16_t));
+
+ R->screen.rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *));
+ R->buf_rend = (rend_t **)rxvt_calloc(total_rows, sizeof(rend_t *));
+ R->drawn_rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *));
+ R->swap.rend = (rend_t **)rxvt_calloc(nrow, sizeof(rend_t *));
+
+ for (p = 0; p < nrow; p++) {
+ q = p + R->TermWin.saveLines;
+ rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
+ q, DEFAULT_RSTYLE);
+ rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend,
+ p, DEFAULT_RSTYLE);
+ R->screen.tlen[q] = R->swap.tlen[p] = 0;
+ rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend,
+ p, DEFAULT_RSTYLE);
+ }
+ MEMSET(R->charsets, 'B', sizeof(R->charsets));
+ R->TermWin.nscrolled = 0; /* no saved lines */
+ R->rstyle = DEFAULT_RSTYLE;
+ R->screen.flags = Screen_DefaultFlags;
+ R->screen.cur.row = R->screen.cur.col = 0;
+ R->screen.charset = 0;
+ R->current_screen = PRIMARY;
+ rxvt_scr_cursor(aR_ SAVE);
#if NSCREENS
- R->swap.flags = Screen_DefaultFlags;
- R->swap.cur.row = R->swap.cur.col = 0;
- R->swap.charset = 0;
- R->current_screen = SECONDARY;
- rxvt_scr_cursor(aR_ SAVE);
- R->current_screen = PRIMARY;
-#endif
- R->selection.text = NULL;
- R->selection.len = 0;
- R->selection.op = SELECTION_CLEAR;
- R->selection.screen = PRIMARY;
- R->selection.clicks = 0;
- CLEAR_ALL_SELECTION(R);
- R->rvideo = 0;
+ R->swap.flags = Screen_DefaultFlags;
+ R->swap.cur.row = R->swap.cur.col = 0;
+ R->swap.charset = 0;
+ R->current_screen = SECONDARY;
+ rxvt_scr_cursor(aR_ SAVE);
+ R->current_screen = PRIMARY;
+#endif
+ R->selection.text = NULL;
+ R->selection.len = 0;
+ R->selection.op = SELECTION_CLEAR;
+ R->selection.screen = PRIMARY;
+ R->selection.clicks = 0;
+ CLEAR_ALL_SELECTION(R);
+ R->rvideo = 0;
} else {
/*
* B1: add or delete rows as appropriate
*/
- setrstyle = DEFAULT_RSTYLE;
+ setrstyle = DEFAULT_RSTYLE;
- if (nrow < prev_nrow) {
- /* delete rows */
- k = min(R->TermWin.nscrolled, prev_nrow - nrow);
- rxvt_scroll_text(aR_ 0, (int)prev_nrow - 1, k, 1);
- for (p = nrow; p < prev_nrow; p++) {
- q = p + R->TermWin.saveLines;
- if (R->screen.text[q]) {
+ if (nrow < prev_nrow) {
+ /* delete rows */
+ k = min(R->TermWin.nscrolled, prev_nrow - nrow);
+ rxvt_scroll_text(aR_ 0, (int)prev_nrow - 1, k, 1);
+ for (p = nrow; p < prev_nrow; p++) {
+ q = p + R->TermWin.saveLines;
+ if (R->screen.text[q]) {
#ifdef DEBUG_STRICT
- assert(R->screen.rend[q]);
+ assert(R->screen.rend[q]);
#endif
- free(R->screen.text[q]);
- free(R->screen.rend[q]);
- }
- if (R->swap.text[p]) {
+ free(R->screen.text[q]);
+ free(R->screen.rend[q]);
+ }
+ if (R->swap.text[p]) {
#ifdef DEBUG_STRICT
- assert(R->swap.rend[p]);
+ assert(R->swap.rend[p]);
#endif
- free(R->swap.text[p]);
- free(R->swap.rend[p]);
- }
+ free(R->swap.text[p]);
+ free(R->swap.rend[p]);
+ }
#ifdef DEBUG_STRICT
- assert(R->drawn_text[p] && R->drawn_rend[p]);
-#endif
- free(R->drawn_text[p]);
- free(R->drawn_rend[p]);
- }
- /* we have fewer rows so fix up cursor position */
- MIN_IT(R->screen.cur.row, (int32_t)nrow - 1);
- MIN_IT(R->swap.cur.row, (int32_t)nrow - 1);
-
- rxvt_scr_reset_realloc(aR); /* realloc _last_ */
-
- } else if (nrow > prev_nrow) {
- /* add rows */
- rxvt_scr_reset_realloc(aR); /* realloc _first_ */
-
- k = min(R->TermWin.nscrolled, nrow - prev_nrow);
- for (p = prev_total_rows; p < total_rows; p++) {
- R->screen.tlen[p] = 0;
- R->screen.text[p] = NULL;
- R->screen.rend[p] = NULL;
- }
- for (p = prev_total_rows; p < total_rows - k; p++)
- rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
- p, setrstyle);
- for (p = prev_nrow; p < nrow; p++) {
- R->swap.tlen[p] = 0;
- R->swap.text[p] = NULL;
- R->swap.rend[p] = NULL;
- R->drawn_text[p] = NULL;
- R->drawn_rend[p] = NULL;
- rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend,
- p, setrstyle);
- rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend,
- p, setrstyle);
- }
- if (k > 0) {
- rxvt_scroll_text(aR_ 0, (int)nrow - 1, -k, 1);
- R->screen.cur.row += k;
- R->screen.s_cur.row += k;
- R->TermWin.nscrolled -= k;
- }
+ assert(R->drawn_text[p] && R->drawn_rend[p]);
+#endif
+ free(R->drawn_text[p]);
+ free(R->drawn_rend[p]);
+ }
+ /* we have fewer rows so fix up cursor position */
+ MIN_IT(R->screen.cur.row, (int32_t)nrow - 1);
+ MIN_IT(R->swap.cur.row, (int32_t)nrow - 1);
+
+ rxvt_scr_reset_realloc(aR); /* realloc _last_ */
+
+ } else if (nrow > prev_nrow) {
+ /* add rows */
+ rxvt_scr_reset_realloc(aR); /* realloc _first_ */
+
+ k = min(R->TermWin.nscrolled, nrow - prev_nrow);
+ for (p = prev_total_rows; p < total_rows; p++) {
+ R->screen.tlen[p] = 0;
+ R->screen.text[p] = NULL;
+ R->screen.rend[p] = NULL;
+ }
+ for (p = prev_total_rows; p < total_rows - k; p++)
+ rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
+ p, setrstyle);
+ for (p = prev_nrow; p < nrow; p++) {
+ R->swap.tlen[p] = 0;
+ R->swap.text[p] = NULL;
+ R->swap.rend[p] = NULL;
+ R->drawn_text[p] = NULL;
+ R->drawn_rend[p] = NULL;
+ rxvt_blank_screen_mem(aR_ R->swap.text, R->swap.rend,
+ p, setrstyle);
+ rxvt_blank_screen_mem(aR_ R->drawn_text, R->drawn_rend,
+ p, setrstyle);
+ }
+ if (k > 0) {
+ rxvt_scroll_text(aR_ 0, (int)nrow - 1, -k, 1);
+ R->screen.cur.row += k;
+ R->screen.s_cur.row += k;
+ R->TermWin.nscrolled -= k;
+ }
#ifdef DEBUG_STRICT
- assert(R->screen.cur.row < R->TermWin.nrow);
- assert(R->swap.cur.row < R->TermWin.nrow);
-#else /* drive with your eyes closed */
- MIN_IT(R->screen.cur.row, nrow - 1);
- MIN_IT(R->swap.cur.row, nrow - 1);
+ assert(R->screen.cur.row < R->TermWin.nrow);
+ assert(R->swap.cur.row < R->TermWin.nrow);
+#else /* drive with your eyes closed */
+ MIN_IT(R->screen.cur.row, nrow - 1);
+ MIN_IT(R->swap.cur.row, nrow - 1);
#endif
- }
+ }
/* B2: resize columns */
- if (ncol != prev_ncol) {
- for (p = 0; p < total_rows; p++) {
- if (R->screen.text[p]) {
- R->screen.text[p] = (text_t *)rxvt_realloc(R->screen.text[p], ncol * sizeof(text_t));
- R->screen.rend[p] = (rend_t *)rxvt_realloc(R->screen.rend[p], ncol * sizeof(rend_t));
- MIN_IT(R->screen.tlen[p], (int16_t)ncol);
- if (ncol > prev_ncol)
- rxvt_blank_line(aR_
+ if (ncol != prev_ncol) {
+ for (p = 0; p < total_rows; p++) {
+ if (R->screen.text[p]) {
+ R->screen.text[p] = (text_t *)rxvt_realloc(R->screen.text[p], ncol * sizeof(text_t));
+ R->screen.rend[p] = (rend_t *)rxvt_realloc(R->screen.rend[p], ncol * sizeof(rend_t));
+ MIN_IT(R->screen.tlen[p], (int16_t)ncol);
+ if (ncol > prev_ncol)
+ rxvt_blank_line(aR_
&(R->screen.text[p][prev_ncol]),
- &(R->screen.rend[p][prev_ncol]),
- ncol - prev_ncol,
- setrstyle);
- }
- }
- for (p = 0; p < nrow; p++) {
- R->drawn_text[p] = (text_t *)rxvt_realloc(R->drawn_text[p], ncol * sizeof(text_t));
- R->drawn_rend[p] = (rend_t *)rxvt_realloc(R->drawn_rend[p], ncol * sizeof(rend_t));
- if (R->swap.text[p]) {
- R->swap.text[p] = (text_t *)rxvt_realloc(R->swap.text[p], ncol * sizeof(text_t));
- R->swap.rend[p] = (rend_t *)rxvt_realloc(R->swap.rend[p], ncol * sizeof(rend_t));
- MIN_IT(R->swap.tlen[p], (int16_t)ncol);
- if (ncol > prev_ncol)
- rxvt_blank_line(aR_
+ &(R->screen.rend[p][prev_ncol]),
+ ncol - prev_ncol,
+ setrstyle);
+ }
+ }
+ for (p = 0; p < nrow; p++) {
+ R->drawn_text[p] = (text_t *)rxvt_realloc(R->drawn_text[p], ncol * sizeof(text_t));
+ R->drawn_rend[p] = (rend_t *)rxvt_realloc(R->drawn_rend[p], ncol * sizeof(rend_t));
+ if (R->swap.text[p]) {
+ R->swap.text[p] = (text_t *)rxvt_realloc(R->swap.text[p], ncol * sizeof(text_t));
+ R->swap.rend[p] = (rend_t *)rxvt_realloc(R->swap.rend[p], ncol * sizeof(rend_t));
+ MIN_IT(R->swap.tlen[p], (int16_t)ncol);
+ if (ncol > prev_ncol)
+ rxvt_blank_line(aR_
&(R->swap.text[p][prev_ncol]),
- &(R->swap.rend[p][prev_ncol]),
- ncol - prev_ncol, setrstyle);
- }
- if (ncol > prev_ncol)
- rxvt_blank_line(aR_
+ &(R->swap.rend[p][prev_ncol]),
+ ncol - prev_ncol, setrstyle);
+ }
+ if (ncol > prev_ncol)
+ rxvt_blank_line(aR_
&(R->drawn_text[p][prev_ncol]),
- &(R->drawn_rend[p][prev_ncol]),
- ncol - prev_ncol, setrstyle);
- }
- MIN_IT(R->screen.cur.col, (int16_t)ncol - 1);
- MIN_IT(R->swap.cur.col, (int16_t)ncol - 1);
- }
- if (R->tabs)
- free(R->tabs);
+ &(R->drawn_rend[p][prev_ncol]),
+ ncol - prev_ncol, setrstyle);
+ }
+ MIN_IT(R->screen.cur.col, (int16_t)ncol - 1);
+ MIN_IT(R->swap.cur.col, (int16_t)ncol - 1);
+ }
+ if (R->tabs)
+ free(R->tabs);
}
R->tabs = (char *)rxvt_malloc(ncol * sizeof(char));
for (p = 0; p < ncol; p++)
- R->tabs[p] = (p % TABSIZE == 0) ? 1 : 0;
+ R->tabs[p] = (p % TABSIZE == 0) ? 1 : 0;
R->prev_nrow = nrow;
R->prev_ncol = ncol;
total_rows = R->TermWin.nrow + R->TermWin.saveLines;
for (i = 0; i < total_rows; i++) {
- if (R->screen.text[i]) { /* then so is R->screen.rend[i] */
- free(R->screen.text[i]);
+ if (R->screen.text[i]) { /* then so is R->screen.rend[i] */
+ free(R->screen.text[i]);
#ifdef DEBUG_STRICT
- assert(R->screen.rend[i]);
+ assert(R->screen.rend[i]);
#endif
- free(R->screen.rend[i]);
- }
+ free(R->screen.rend[i]);
+ }
}
for (i = 0; i < R->TermWin.nrow; i++) {
- free(R->drawn_text[i]);
- free(R->drawn_rend[i]);
- free(R->swap.text[i]);
- free(R->swap.rend[i]);
+ free(R->drawn_text[i]);
+ free(R->drawn_rend[i]);
+ free(R->swap.text[i]);
+ free(R->swap.rend[i]);
}
free(R->screen.text);
free(R->screen.tlen);
#if NSCREENS && !defined(NO_SECONDARY_SCREEN_CURSOR)
if (R->current_screen == SECONDARY)
- s = &(R->swap);
+ s = &(R->swap);
else
#endif
- s = &(R->screen);
+ s = &(R->screen);
switch (mode) {
case SAVE:
- s->s_cur.row = s->cur.row;
- s->s_cur.col = s->cur.col;
- s->s_rstyle = R->rstyle;
- s->s_charset = s->charset;
- s->s_charset_char = R->charsets[s->charset];
- break;
+ s->s_cur.row = s->cur.row;
+ s->s_cur.col = s->cur.col;
+ s->s_rstyle = R->rstyle;
+ s->s_charset = s->charset;
+ s->s_charset_char = R->charsets[s->charset];
+ break;
case RESTORE:
- R->want_refresh = 1;
- s->cur.row = s->s_cur.row;
- s->cur.col = s->s_cur.col;
- s->flags &= ~Screen_WrapNext;
- R->rstyle = s->s_rstyle;
- s->charset = s->s_charset;
- R->charsets[s->charset] = s->s_charset_char;
- rxvt_set_font_style(aR);
- break;
+ R->want_refresh = 1;
+ s->cur.row = s->s_cur.row;
+ s->cur.col = s->s_cur.col;
+ s->flags &= ~Screen_WrapNext;
+ R->rstyle = s->s_rstyle;
+ s->charset = s->s_charset;
+ R->charsets[s->charset] = s->s_charset_char;
+ rxvt_set_font_style(aR);
+ break;
}
/* boundary check in case screen size changed between SAVE and RESTORE */
MIN_IT(s->cur.row, R->TermWin.nrow - 1);
#ifdef DEBUG_STRICT
assert(s->cur.row >= 0);
assert(s->cur.col >= 0);
-#else /* drive with your eyes closed */
+#else /* drive with your eyes closed */
MAX_IT(s->cur.row, 0);
MAX_IT(s->cur.col, 0);
#endif
RESET_CHSTAT(R);
if (R->current_screen == scrn)
- return R->current_screen;
+ return R->current_screen;
- rxvt_selection_check(aR_ 2); /* check for boundary cross */
+ rxvt_selection_check(aR_ 2); /* check for boundary cross */
SWAP_IT(R->current_screen, scrn, int);
#if NSCREENS
R->num_scr = 0;
offset = R->TermWin.saveLines;
for (i = R->prev_nrow; i--;) {
- SWAP_IT(R->screen.text[i + offset], R->swap.text[i], text_t *);
- SWAP_IT(R->screen.tlen[i + offset], R->swap.tlen[i], int16_t);
- SWAP_IT(R->screen.rend[i + offset], R->swap.rend[i], rend_t *);
+ SWAP_IT(R->screen.text[i + offset], R->swap.text[i], text_t *);
+ SWAP_IT(R->screen.tlen[i + offset], R->swap.tlen[i], int16_t);
+ SWAP_IT(R->screen.rend[i + offset], R->swap.rend[i], rend_t *);
}
SWAP_IT(R->screen.cur.row, R->swap.cur.row, int16_t);
SWAP_IT(R->screen.cur.col, R->swap.cur.col, int16_t);
# ifdef DEBUG_STRICT
assert((R->screen.cur.row >= 0) && (R->screen.cur.row < R->prev_nrow));
assert((R->screen.cur.col >= 0) && (R->screen.cur.col < R->prev_ncol));
-# else /* drive with your eyes closed */
+# else /* drive with your eyes closed */
MAX_IT(R->screen.cur.row, 0);
MIN_IT(R->screen.cur.row, (int32_t)R->prev_nrow - 1);
MAX_IT(R->screen.cur.col, 0);
# ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR)) {
- rxvt_Gr_scroll(aR_ 0);
- rxvt_Gr_ChangeScreen(aR);
+ rxvt_Gr_scroll(aR_ 0);
+ rxvt_Gr_ChangeScreen(aR);
}
# endif
#else
# ifdef SCROLL_ON_NO_SECONDARY
# ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_ClearScreen(aR);
+ rxvt_Gr_ClearScreen(aR);
# endif
if (R->current_screen == PRIMARY
# ifdef RXVT_GRAPHICS
&& !rxvt_Gr_Displayed(aR)
# endif
)
- rxvt_scroll_text(aR_ 0, (R->prev_nrow - 1), R->prev_nrow, 0);
+ rxvt_scroll_text(aR_ 0, (R->prev_nrow - 1), R->prev_nrow, 0);
# endif
#endif
return scrn;
{
color &= RS_fgMask;
if (fgbg == Color_fg)
- R->rstyle = SET_FGCOLOR(R->rstyle, color);
+ R->rstyle = SET_FGCOLOR(R->rstyle, color);
else
- R->rstyle = SET_BGCOLOR(R->rstyle, color);
+ R->rstyle = SET_BGCOLOR(R->rstyle, color);
}
/* ------------------------------------------------------------------------- */
rxvt_scr_rendition(pR_ int set, int style)
{
if (set)
- R->rstyle |= style;
+ R->rstyle |= style;
else if (style == ~RS_None)
- R->rstyle = DEFAULT_RSTYLE;
+ R->rstyle = DEFAULT_RSTYLE;
else
- R->rstyle &= ~style;
+ R->rstyle &= ~style;
}
/* ------------------------------------------------------------------------- */
long nscrolled;
if (count == 0 || (row1 > row2))
- return 0;
+ return 0;
R->want_refresh = 1;
D_SCREEN((stderr, "rxvt_scroll_text(%d,%d,%d,%d): %s", row1, row2, count, spec, (R->current_screen == PRIMARY) ? "Primary" : "Secondary"));
if ((count > 0) && (row1 == 0) && (R->current_screen == PRIMARY)) {
- nscrolled = (long)R->TermWin.nscrolled + (long)count;;
- if (nscrolled > (long)R->TermWin.saveLines)
- R->TermWin.nscrolled = R->TermWin.saveLines;
- else
- R->TermWin.nscrolled = (uint16_t)nscrolled;
- if ((R->Options & Opt_scrollWithBuffer)
- && R->TermWin.view_start != 0
- && R->TermWin.view_start != R->TermWin.saveLines)
- rxvt_scr_page(aR_ UP, count);
+ nscrolled = (long)R->TermWin.nscrolled + (long)count;;
+ if (nscrolled > (long)R->TermWin.saveLines)
+ R->TermWin.nscrolled = R->TermWin.saveLines;
+ else
+ R->TermWin.nscrolled = (uint16_t)nscrolled;
+ if ((R->Options & Opt_scrollWithBuffer)
+ && R->TermWin.view_start != 0
+ && R->TermWin.view_start != R->TermWin.saveLines)
+ rxvt_scr_page(aR_ UP, count);
} else if (!spec)
- row1 += R->TermWin.saveLines;
+ row1 += R->TermWin.saveLines;
row2 += R->TermWin.saveLines;
if (R->selection.op && R->current_screen == R->selection.screen) {
- i = R->selection.beg.row + R->TermWin.saveLines;
- j = R->selection.end.row + R->TermWin.saveLines;
- if ((i < row1 && j > row1)
- || (i < row2 && j > row2)
- || (i - count < row1 && i >= row1)
- || (i - count > row2 && i <= row2)
- || (j - count < row1 && j >= row1)
- || (j - count > row2 && j <= row2)) {
- CLEAR_ALL_SELECTION(R);
- R->selection.op = SELECTION_CLEAR; /* XXX: too aggressive? */
- } else if (j >= row1 && j <= row2) {
- /* move selected region too */
- R->selection.beg.row -= count;
- R->selection.end.row -= count;
- R->selection.mark.row -= count;
- }
+ i = R->selection.beg.row + R->TermWin.saveLines;
+ j = R->selection.end.row + R->TermWin.saveLines;
+ if ((i < row1 && j > row1)
+ || (i < row2 && j > row2)
+ || (i - count < row1 && i >= row1)
+ || (i - count > row2 && i <= row2)
+ || (j - count < row1 && j >= row1)
+ || (j - count > row2 && j <= row2)) {
+ CLEAR_ALL_SELECTION(R);
+ R->selection.op = SELECTION_CLEAR; /* XXX: too aggressive? */
+ } else if (j >= row1 && j <= row2) {
+ /* move selected region too */
+ R->selection.beg.row -= count;
+ R->selection.end.row -= count;
+ R->selection.mark.row -= count;
+ }
}
- rxvt_selection_check(aR_ 0); /* _after_ R->TermWin.nscrolled update */
+ rxvt_selection_check(aR_ 0); /* _after_ R->TermWin.nscrolled update */
R->num_scr += count;
j = count;
if (count < 0)
- count = -count;
+ count = -count;
i = row2 - row1 + 1;
MIN_IT(count, i);
/* A: scroll up */
/* A1: Copy lines that will get clobbered by the rotation */
- for (i = 0, j = row1; i < count; i++, j++) {
- R->buf_text[i] = R->screen.text[j];
- R->buf_rend[i] = R->screen.rend[j];
- }
+ for (i = 0, j = row1; i < count; i++, j++) {
+ R->buf_text[i] = R->screen.text[j];
+ R->buf_rend[i] = R->screen.rend[j];
+ }
/* A2: Rotate lines */
- for (j = row1, i = j + count; i <= row2; i++, j++) {
- R->screen.tlen[j] = R->screen.tlen[i];
- R->screen.text[j] = R->screen.text[i];
- R->screen.rend[j] = R->screen.rend[i];
- }
- j = row2 - count + 1, i = count;
+ for (j = row1, i = j + count; i <= row2; i++, j++) {
+ R->screen.tlen[j] = R->screen.tlen[i];
+ R->screen.text[j] = R->screen.text[i];
+ R->screen.rend[j] = R->screen.rend[i];
+ }
+ j = row2 - count + 1, i = count;
} else /* if (j < 0) */ {
/* B: scroll down */
/* B1: Copy lines that will get clobbered by the rotation */
- for (i = 0, j = row2; i < count; i++, j--) {
- R->buf_text[i] = R->screen.text[j];
- R->buf_rend[i] = R->screen.rend[j];
- }
+ for (i = 0, j = row2; i < count; i++, j--) {
+ R->buf_text[i] = R->screen.text[j];
+ R->buf_rend[i] = R->screen.rend[j];
+ }
/* B2: Rotate lines */
- for (j = row2, i = j - count; i >= row1; i--, j--) {
- R->screen.tlen[j] = R->screen.tlen[i];
- R->screen.text[j] = R->screen.text[i];
- R->screen.rend[j] = R->screen.rend[i];
- }
- j = row1, i = count;
- count = -count;
+ for (j = row2, i = j - count; i >= row1; i--, j--) {
+ R->screen.tlen[j] = R->screen.tlen[i];
+ R->screen.text[j] = R->screen.text[i];
+ R->screen.rend[j] = R->screen.rend[i];
+ }
+ j = row1, i = count;
+ count = -count;
}
/* C: Resurrect lines */
for (; i--; j++) {
- R->screen.tlen[j] = 0;
- R->screen.text[j] = R->buf_text[i];
- R->screen.rend[j] = R->buf_rend[i];
- if (!spec) /* line length may not equal TermWin.ncol */
- rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
- (unsigned int)j, R->rstyle);
+ R->screen.tlen[j] = 0;
+ R->screen.text[j] = R->buf_text[i];
+ R->screen.rend[j] = R->buf_rend[i];
+ if (!spec) /* line length may not equal TermWin.ncol */
+ rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
+ (unsigned int)j, R->rstyle);
}
#ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ count);
+ rxvt_Gr_scroll(aR_ count);
#endif
return count;
}
text_t *stp;
rend_t *srp;
- if (len <= 0) /* sanity */
- return;
+ if (len <= 0) /* sanity */
+ return;
R->want_refresh = 1;
last_col = R->TermWin.ncol;
D_SCREEN((stderr, "rxvt_scr_add_lines(%d,%d)", nlines, len));
ZERO_SCROLLBACK(R);
if (nlines > 0) {
- nlines += (R->screen.cur.row - R->screen.bscroll);
- if ((nlines > 0)
- && (R->screen.tscroll == 0)
- && (R->screen.bscroll == (R->TermWin.nrow - 1))) {
- /* _at least_ this many lines need to be scrolled */
- rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, nlines,
- 0);
- R->screen.cur.row -= nlines;
- }
+ nlines += (R->screen.cur.row - R->screen.bscroll);
+ if ((nlines > 0)
+ && (R->screen.tscroll == 0)
+ && (R->screen.bscroll == (R->TermWin.nrow - 1))) {
+ /* _at least_ this many lines need to be scrolled */
+ rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, nlines,
+ 0);
+ R->screen.cur.row -= nlines;
+ }
}
#ifdef DEBUG_STRICT
assert(R->screen.cur.col < last_col);
assert((R->screen.cur.row < R->TermWin.nrow)
- && (R->screen.cur.row >= -(int32_t)R->TermWin.nscrolled));
-#else /* drive with your eyes closed */
+ && (R->screen.cur.row >= -(int32_t)R->TermWin.nscrolled));
+#else /* drive with your eyes closed */
MIN_IT(R->screen.cur.col, last_col - 1);
MIN_IT(R->screen.cur.row, (int32_t)R->TermWin.nrow - 1);
MAX_IT(R->screen.cur.row, -(int32_t)R->TermWin.nscrolled);
row = R->screen.cur.row + R->TermWin.saveLines;
checksel = (R->selection.op
- && R->current_screen == R->selection.screen) ? 1 : 0;
+ && R->current_screen == R->selection.screen) ? 1 : 0;
clearsel = 0;
stp = R->screen.text[row];
srp = R->screen.rend[row];
for (i = 0; i < len;) {
- c = str[i++];
- switch (c) {
- case '\t':
- rxvt_scr_tab(aR_ 1);
- continue;
- case '\n':
- if (R->screen.tlen[row] != -1) /* XXX: think about this */
- MAX_IT(R->screen.tlen[row], R->screen.cur.col);
- R->screen.flags &= ~Screen_WrapNext;
- if (R->screen.cur.row == R->screen.bscroll)
- rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0);
- else if (R->screen.cur.row < (R->TermWin.nrow - 1))
- row = (++R->screen.cur.row) + R->TermWin.saveLines;
- stp = R->screen.text[row]; /* _must_ refresh */
- srp = R->screen.rend[row]; /* _must_ refresh */
- RESET_CHSTAT(R);
- continue;
- case '\r':
- if (R->screen.tlen[row] != -1) /* XXX: think about this */
- MAX_IT(R->screen.tlen[row], R->screen.cur.col);
- R->screen.flags &= ~Screen_WrapNext;
- R->screen.cur.col = 0;
- RESET_CHSTAT(R);
- continue;
- default:
- if (c == 127)
- continue; /* yummmm..... */
- break;
- }
-
- if (checksel /* see if we're writing within selection */
- && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg)
- && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end)) {
- checksel = 0;
- clearsel = 1;
- }
- if (R->screen.flags & Screen_WrapNext) {
- R->screen.tlen[row] = -1;
- if (R->screen.cur.row == R->screen.bscroll)
- rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0);
- else if (R->screen.cur.row < (R->TermWin.nrow - 1))
- row = (++R->screen.cur.row) + R->TermWin.saveLines;
- stp = R->screen.text[row]; /* _must_ refresh */
- srp = R->screen.rend[row]; /* _must_ refresh */
- R->screen.cur.col = 0;
- R->screen.flags &= ~Screen_WrapNext;
- }
- if (R->screen.flags & Screen_Insert)
- rxvt_scr_insdel_chars(aR_ 1, INSERT);
+ c = str[i++];
+ switch (c) {
+ case '\t':
+ rxvt_scr_tab(aR_ 1);
+ continue;
+ case '\n':
+ if (R->screen.tlen[row] != -1) /* XXX: think about this */
+ MAX_IT(R->screen.tlen[row], R->screen.cur.col);
+ R->screen.flags &= ~Screen_WrapNext;
+ if (R->screen.cur.row == R->screen.bscroll)
+ rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0);
+ else if (R->screen.cur.row < (R->TermWin.nrow - 1))
+ row = (++R->screen.cur.row) + R->TermWin.saveLines;
+ stp = R->screen.text[row]; /* _must_ refresh */
+ srp = R->screen.rend[row]; /* _must_ refresh */
+ RESET_CHSTAT(R);
+ continue;
+ case '\r':
+ if (R->screen.tlen[row] != -1) /* XXX: think about this */
+ MAX_IT(R->screen.tlen[row], R->screen.cur.col);
+ R->screen.flags &= ~Screen_WrapNext;
+ R->screen.cur.col = 0;
+ RESET_CHSTAT(R);
+ continue;
+ default:
+ if (c == 127)
+ continue; /* yummmm..... */
+ break;
+ }
+
+ if (checksel /* see if we're writing within selection */
+ && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg)
+ && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end)) {
+ checksel = 0;
+ clearsel = 1;
+ }
+ if (R->screen.flags & Screen_WrapNext) {
+ R->screen.tlen[row] = -1;
+ if (R->screen.cur.row == R->screen.bscroll)
+ rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, 1, 0);
+ else if (R->screen.cur.row < (R->TermWin.nrow - 1))
+ row = (++R->screen.cur.row) + R->TermWin.saveLines;
+ stp = R->screen.text[row]; /* _must_ refresh */
+ srp = R->screen.rend[row]; /* _must_ refresh */
+ R->screen.cur.col = 0;
+ R->screen.flags &= ~Screen_WrapNext;
+ }
+ if (R->screen.flags & Screen_Insert)
+ rxvt_scr_insdel_chars(aR_ 1, INSERT);
if (R->charsets[R->screen.charset] == '0') // DEC SPECIAL
switch (c)
rend_t rend = SET_FONT (R->rstyle, R->TermWin.fontset->find_font (c));
- stp[R->screen.cur.col] = c;
- srp[R->screen.cur.col] = rend;
+ stp[R->screen.cur.col] = c;
+ srp[R->screen.cur.col] = rend;
if (c > 255)
{
}
}
- if (R->screen.cur.col < last_col - 1)
- R->screen.cur.col++;
- else {
- R->screen.tlen[row] = last_col;
- if (R->screen.flags & Screen_Autowrap)
- R->screen.flags |= Screen_WrapNext;
- }
+ if (R->screen.cur.col < last_col - 1)
+ R->screen.cur.col++;
+ else {
+ R->screen.tlen[row] = last_col;
+ if (R->screen.flags & Screen_Autowrap)
+ R->screen.flags |= Screen_WrapNext;
+ }
}
- if (R->screen.tlen[row] != -1) /* XXX: think about this */
- MAX_IT(R->screen.tlen[row], R->screen.cur.col);
+ if (R->screen.tlen[row] != -1) /* XXX: think about this */
+ MAX_IT(R->screen.tlen[row], R->screen.cur.col);
/*
* If we wrote anywhere in the selected area, kill the selection
* should be a similar check.
*/
if (clearsel)
- CLEAR_SELECTION(R);
+ CLEAR_SELECTION(R);
#ifdef DEBUG_STRICT
assert(R->screen.cur.row >= 0);
-#else /* drive with your eyes closed */
+#else /* drive with your eyes closed */
MAX_IT(R->screen.cur.row, 0);
#endif
}
RESET_CHSTAT(R);
R->want_refresh = 1;
if (R->screen.cur.col == 0) {
- if (R->screen.cur.row > 0) {
+ if (R->screen.cur.row > 0) {
#ifdef TERMCAP_HAS_BW
- R->screen.cur.col = R->TermWin.ncol - 1;
- R->screen.cur.row--;
- return;
+ R->screen.cur.col = R->TermWin.ncol - 1;
+ R->screen.cur.row--;
+ return;
#endif
- }
+ }
} else if ((R->screen.flags & Screen_WrapNext) == 0)
- rxvt_scr_gotorc(aR_ 0, -1, RELATIVE);
+ rxvt_scr_gotorc(aR_ 0, -1, RELATIVE);
R->screen.flags &= ~Screen_WrapNext;
}
RESET_CHSTAT(R);
i = x = R->screen.cur.col;
if (count == 0)
- return;
+ return;
else if (count > 0) {
- for (; ++i < R->TermWin.ncol; )
- if (R->tabs[i]) {
- x = i;
- if (!--count)
- break;
- }
- if (count)
- x = R->TermWin.ncol - 1;
+ for (; ++i < R->TermWin.ncol; )
+ if (R->tabs[i]) {
+ x = i;
+ if (!--count)
+ break;
+ }
+ if (count)
+ x = R->TermWin.ncol - 1;
} else /* if (count < 0) */ {
- for (; --i >= 0; )
- if (R->tabs[i]) {
- x = i;
- if (!++count)
- break;
- }
- if (count)
- x = 0;
+ for (; --i >= 0; )
+ if (R->tabs[i]) {
+ x = i;
+ if (!++count)
+ break;
+ }
+ if (count)
+ x = 0;
}
if (x != R->screen.cur.col)
- rxvt_scr_gotorc(aR_ 0, x, R_RELATIVE);
+ rxvt_scr_gotorc(aR_ 0, x, R_RELATIVE);
}
/* ------------------------------------------------------------------------- */
rxvt_scr_backindex(pR)
{
if (R->screen.cur.col > 0)
- rxvt_scr_gotorc(aR_ 0, -1, R_RELATIVE | C_RELATIVE);
+ rxvt_scr_gotorc(aR_ 0, -1, R_RELATIVE | C_RELATIVE);
else {
- if (R->screen.tlen[R->screen.cur.row + R->TermWin.saveLines] == 0)
- return; /* um, yeah? */
- rxvt_scr_insdel_chars(aR_ 1, INSERT);
+ if (R->screen.tlen[R->screen.cur.row + R->TermWin.saveLines] == 0)
+ return; /* um, yeah? */
+ rxvt_scr_insdel_chars(aR_ 1, INSERT);
}
}
#endif
int row;
if (R->screen.cur.col < R->TermWin.ncol - 1)
- rxvt_scr_gotorc(aR_ 0, 1, R_RELATIVE | C_RELATIVE);
+ rxvt_scr_gotorc(aR_ 0, 1, R_RELATIVE | C_RELATIVE);
else {
- row = R->screen.cur.row + R->TermWin.saveLines;
- if (R->screen.tlen[row] == 0)
- return; /* um, yeah? */
- else if (R->screen.tlen[row] == -1)
- R->screen.tlen[row] = R->TermWin.ncol;
- rxvt_scr_gotorc(aR_ 0, 0, R_RELATIVE);
- rxvt_scr_insdel_chars(aR_ 1, DELETE);
- rxvt_scr_gotorc(aR_ 0, R->TermWin.ncol - 1, R_RELATIVE);
+ row = R->screen.cur.row + R->TermWin.saveLines;
+ if (R->screen.tlen[row] == 0)
+ return; /* um, yeah? */
+ else if (R->screen.tlen[row] == -1)
+ R->screen.tlen[row] = R->TermWin.ncol;
+ rxvt_scr_gotorc(aR_ 0, 0, R_RELATIVE);
+ rxvt_scr_insdel_chars(aR_ 1, DELETE);
+ rxvt_scr_gotorc(aR_ 0, R->TermWin.ncol - 1, R_RELATIVE);
}
}
#endif
RESET_CHSTAT(R);
#ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ 0);
+ rxvt_Gr_scroll(aR_ 0);
#endif
D_SCREEN((stderr, "rxvt_scr_gotorc(r:%s%d,c:%s%d): from (r:%d,c:%d)", (relative & R_RELATIVE ? "+" : ""), row, (relative & C_RELATIVE ? "+" : ""), col, R->screen.cur.row, R->screen.cur.col));
R->screen.cur.col = ((relative & C_RELATIVE) ? (R->screen.cur.col + col)
- : col);
+ : col);
MAX_IT(R->screen.cur.col, 0);
MIN_IT(R->screen.cur.col, (int32_t)R->TermWin.ncol - 1);
R->screen.flags &= ~Screen_WrapNext;
if (relative & R_RELATIVE) {
- if (row > 0) {
- if (R->screen.cur.row <= R->screen.bscroll
- && (R->screen.cur.row + row) > R->screen.bscroll)
- R->screen.cur.row = R->screen.bscroll;
- else
- R->screen.cur.row += row;
- } else if (row < 0) {
- if (R->screen.cur.row >= R->screen.tscroll
- && (R->screen.cur.row + row) < R->screen.tscroll)
- R->screen.cur.row = R->screen.tscroll;
- else
- R->screen.cur.row += row;
- }
+ if (row > 0) {
+ if (R->screen.cur.row <= R->screen.bscroll
+ && (R->screen.cur.row + row) > R->screen.bscroll)
+ R->screen.cur.row = R->screen.bscroll;
+ else
+ R->screen.cur.row += row;
+ } else if (row < 0) {
+ if (R->screen.cur.row >= R->screen.tscroll
+ && (R->screen.cur.row + row) < R->screen.tscroll)
+ R->screen.cur.row = R->screen.tscroll;
+ else
+ R->screen.cur.row += row;
+ }
} else {
- if (R->screen.flags & Screen_Relative) { /* relative origin mode */
- R->screen.cur.row = row + R->screen.tscroll;
- MIN_IT(R->screen.cur.row, R->screen.bscroll);
- } else
- R->screen.cur.row = row;
+ if (R->screen.flags & Screen_Relative) { /* relative origin mode */
+ R->screen.cur.row = row + R->screen.tscroll;
+ MIN_IT(R->screen.cur.row, R->screen.bscroll);
+ } else
+ R->screen.cur.row = row;
}
MAX_IT(R->screen.cur.row, 0);
MIN_IT(R->screen.cur.row, (int32_t)R->TermWin.nrow - 1);
#ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ 0);
+ rxvt_Gr_scroll(aR_ 0);
#endif
R->screen.flags &= ~Screen_WrapNext;
if ((R->screen.cur.row == R->screen.bscroll && direction == UP)
- || (R->screen.cur.row == R->screen.tscroll && direction == DN))
- rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, dirn, 0);
+ || (R->screen.cur.row == R->screen.tscroll && direction == DN))
+ rxvt_scroll_text(aR_ R->screen.tscroll, R->screen.bscroll, dirn, 0);
else
- R->screen.cur.row += dirn;
+ R->screen.cur.row += dirn;
MAX_IT(R->screen.cur.row, 0);
MIN_IT(R->screen.cur.row, (int32_t)R->TermWin.nrow - 1);
rxvt_selection_check(aR_ 0);
#ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ 0);
+ rxvt_Gr_scroll(aR_ 0);
#endif
rxvt_selection_check(aR_ 1);
row = R->TermWin.saveLines + R->screen.cur.row;
switch (mode) {
- case 0: /* erase to end of line */
- col = R->screen.cur.col;
- num = R->TermWin.ncol - col;
- MIN_IT(R->screen.tlen[row], (int16_t)col);
- if (ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)
- || ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.end, R->screen.cur))
- CLEAR_SELECTION(R);
- break;
- case 1: /* erase to beginning of line */
- col = 0;
- num = R->screen.cur.col + 1;
- if (ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.beg, R->screen.cur)
- || ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.end, R->screen.cur))
- CLEAR_SELECTION(R);
- break;
- case 2: /* erase whole line */
- col = 0;
- num = R->TermWin.ncol;
- R->screen.tlen[row] = 0;
- if (R->selection.beg.row <= R->screen.cur.row
- && R->selection.end.row >= R->screen.cur.row)
- CLEAR_SELECTION(R);
- break;
+ case 0: /* erase to end of line */
+ col = R->screen.cur.col;
+ num = R->TermWin.ncol - col;
+ MIN_IT(R->screen.tlen[row], (int16_t)col);
+ if (ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)
+ || ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.end, R->screen.cur))
+ CLEAR_SELECTION(R);
+ break;
+ case 1: /* erase to beginning of line */
+ col = 0;
+ num = R->screen.cur.col + 1;
+ if (ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.beg, R->screen.cur)
+ || ROWCOL_IN_ROW_AT_OR_BEFORE(R->selection.end, R->screen.cur))
+ CLEAR_SELECTION(R);
+ break;
+ case 2: /* erase whole line */
+ col = 0;
+ num = R->TermWin.ncol;
+ R->screen.tlen[row] = 0;
+ if (R->selection.beg.row <= R->screen.cur.row
+ && R->selection.end.row >= R->screen.cur.row)
+ CLEAR_SELECTION(R);
+ break;
default:
- return;
+ return;
}
if (R->screen.text[row])
- rxvt_blank_line(aR_
+ rxvt_blank_line(aR_
&(R->screen.text[row][col]),
- &(R->screen.rend[row][col]), num, R->rstyle);
+ &(R->screen.rend[row][col]), num, R->rstyle);
else
- rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, row,
- R->rstyle);
+ rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend, row,
+ R->rstyle);
}
/* ------------------------------------------------------------------------- */
row_offset = (int32_t)R->TermWin.saveLines;
switch (mode) {
- case 0: /* erase to end of screen */
- rxvt_selection_check(aR_ 1);
- rxvt_scr_erase_line(aR_ 0);
- row = R->screen.cur.row + 1; /* possible OOB */
- num = R->TermWin.nrow - row;
- break;
- case 1: /* erase to beginning of screen */
- rxvt_selection_check(aR_ 3);
- rxvt_scr_erase_line(aR_ 1);
- row = 0;
- num = R->screen.cur.row;
- break;
- case 2: /* erase whole screen */
- rxvt_selection_check(aR_ 3);
+ case 0: /* erase to end of screen */
+ rxvt_selection_check(aR_ 1);
+ rxvt_scr_erase_line(aR_ 0);
+ row = R->screen.cur.row + 1; /* possible OOB */
+ num = R->TermWin.nrow - row;
+ break;
+ case 1: /* erase to beginning of screen */
+ rxvt_selection_check(aR_ 3);
+ rxvt_scr_erase_line(aR_ 1);
+ row = 0;
+ num = R->screen.cur.row;
+ break;
+ case 2: /* erase whole screen */
+ rxvt_selection_check(aR_ 3);
#ifdef RXVT_GRAPHICS
- rxvt_Gr_ClearScreen(aR);
+ rxvt_Gr_ClearScreen(aR);
#endif
- row = 0;
- num = R->TermWin.nrow;
- break;
+ row = 0;
+ num = R->TermWin.nrow;
+ break;
default:
- return;
+ return;
}
R->refresh_type |= REFRESH_BOUNDS;
if (R->selection.op && R->current_screen == R->selection.screen
- && ((R->selection.beg.row >= row && R->selection.beg.row <= row + num)
- || (R->selection.end.row >= row
- && R->selection.end.row <= row + num)))
- CLEAR_SELECTION(R);
- if (row >= R->TermWin.nrow) /* Out Of Bounds */
- return;
+ && ((R->selection.beg.row >= row && R->selection.beg.row <= row + num)
+ || (R->selection.end.row >= row
+ && R->selection.end.row <= row + num)))
+ CLEAR_SELECTION(R);
+ if (row >= R->TermWin.nrow) /* Out Of Bounds */
+ return;
MIN_IT(num, (R->TermWin.nrow - row));
if (R->rstyle & (RS_RVid | RS_Uline))
- ren = (rend_t) ~RS_None;
+ ren = (rend_t) ~RS_None;
else if (GET_BASEBG(R->rstyle) == Color_bg) {
- ren = DEFAULT_RSTYLE;
- CLEAR_ROWS(row, num);
+ ren = DEFAULT_RSTYLE;
+ CLEAR_ROWS(row, num);
} else {
- ren = (R->rstyle & (RS_fgMask | RS_bgMask));
- gcvalue.foreground = R->PixColors[GET_BGCOLOR(R->rstyle)];
- XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue);
- ERASE_ROWS(row, num);
- gcvalue.foreground = R->PixColors[Color_fg];
- XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue);
+ ren = (R->rstyle & (RS_fgMask | RS_bgMask));
+ gcvalue.foreground = R->PixColors[GET_BGCOLOR(R->rstyle)];
+ XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue);
+ ERASE_ROWS(row, num);
+ gcvalue.foreground = R->PixColors[Color_fg];
+ XChangeGC(R->Xdisplay, R->TermWin.gc, GCForeground, &gcvalue);
}
for (; num--; row++) {
- rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
- (unsigned int)(row + row_offset), R->rstyle);
- R->screen.tlen[row + row_offset] = 0;
- rxvt_blank_line(aR_
+ rxvt_blank_screen_mem(aR_ R->screen.text, R->screen.rend,
+ (unsigned int)(row + row_offset), R->rstyle);
+ R->screen.tlen[row + row_offset] = 0;
+ rxvt_blank_line(aR_
R->drawn_text[row], R->drawn_rend[row],
- (unsigned int)R->TermWin.ncol, ren);
+ (unsigned int)R->TermWin.ncol, ren);
}
}
fs = SET_FONT (R->rstyle, R->TermWin.fontset->find_font ('E'));
for (k = R->TermWin.saveLines, i = R->TermWin.nrow; i--; k++) {
- R->screen.tlen[k] = R->TermWin.ncol; /* make the `E's selectable */
- fill_text (R->screen.text[k], 'E', R->TermWin.ncol);
- for (r1 = R->screen.rend[k], j = R->TermWin.ncol; j--; )
- *r1++ = fs;
+ R->screen.tlen[k] = R->TermWin.ncol; /* make the `E's selectable */
+ fill_text (R->screen.text[k], 'E', R->TermWin.ncol);
+ for (r1 = R->screen.rend[k], j = R->TermWin.ncol; j--; )
+ *r1++ = fs;
}
}
#ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ 0);
+ rxvt_Gr_scroll(aR_ 0);
#endif
rxvt_selection_check(aR_ 1);
if (R->screen.cur.row > R->screen.bscroll)
- return;
+ return;
end = R->screen.bscroll - R->screen.cur.row + 1;
if (count > end) {
- if (insdel == DELETE)
- return;
- else if (insdel == INSERT)
- count = end;
+ if (insdel == DELETE)
+ return;
+ else if (insdel == INSERT)
+ count = end;
}
R->screen.flags &= ~Screen_WrapNext;
rxvt_scroll_text(aR_ R->screen.cur.row, R->screen.bscroll, insdel * count,
- 0);
+ 0);
}
/* ------------------------------------------------------------------------- */
#ifdef RXVT_GRAPHICS
if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ 0);
+ rxvt_Gr_scroll(aR_ 0);
#endif
if (count <= 0)
- return;
+ return;
rxvt_selection_check(aR_ 1);
MIN_IT(count, (R->TermWin.ncol - R->screen.cur.col));
slp = &(R->screen.tlen[row]);
switch (insdel) {
case INSERT:
- for (col = R->TermWin.ncol - 1; (col - count) >= R->screen.cur.col;
- col--) {
- stp[col] = stp[col - count];
- srp[col] = srp[col - count];
- }
- if (*slp != -1) {
- *slp += count;
- MIN_IT(*slp, R->TermWin.ncol);
- }
- if (R->selection.op && R->current_screen == R->selection.screen
- && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) {
- if (R->selection.end.row != R->screen.cur.row
- || (R->selection.end.col + count >= R->TermWin.ncol))
- CLEAR_SELECTION(R);
- else { /* shift selection */
- R->selection.beg.col += count;
- R->selection.mark.col += count; /* XXX: yes? */
- R->selection.end.col += count;
- }
- }
- rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]),
- (unsigned int)count, R->rstyle);
- break;
+ for (col = R->TermWin.ncol - 1; (col - count) >= R->screen.cur.col;
+ col--) {
+ stp[col] = stp[col - count];
+ srp[col] = srp[col - count];
+ }
+ if (*slp != -1) {
+ *slp += count;
+ MIN_IT(*slp, R->TermWin.ncol);
+ }
+ if (R->selection.op && R->current_screen == R->selection.screen
+ && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) {
+ if (R->selection.end.row != R->screen.cur.row
+ || (R->selection.end.col + count >= R->TermWin.ncol))
+ CLEAR_SELECTION(R);
+ else { /* shift selection */
+ R->selection.beg.col += count;
+ R->selection.mark.col += count; /* XXX: yes? */
+ R->selection.end.col += count;
+ }
+ }
+ rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]),
+ (unsigned int)count, R->rstyle);
+ break;
case ERASE:
- R->screen.cur.col += count; /* don't worry if > R->TermWin.ncol */
- rxvt_selection_check(aR_ 1);
- R->screen.cur.col -= count;
- rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]),
- (unsigned int)count, R->rstyle);
- break;
+ R->screen.cur.col += count; /* don't worry if > R->TermWin.ncol */
+ rxvt_selection_check(aR_ 1);
+ R->screen.cur.col -= count;
+ rxvt_blank_line(aR_ &(stp[R->screen.cur.col]), &(srp[R->screen.cur.col]),
+ (unsigned int)count, R->rstyle);
+ break;
case DELETE:
- tr = srp[R->TermWin.ncol - 1]
- & (RS_fgMask | RS_bgMask | RS_baseattrMask);
- for (col = R->screen.cur.col; (col + count) < R->TermWin.ncol; col++) {
- stp[col] = stp[col + count];
- srp[col] = srp[col + count];
- }
- rxvt_blank_line(aR_
+ tr = srp[R->TermWin.ncol - 1]
+ & (RS_fgMask | RS_bgMask | RS_baseattrMask);
+ for (col = R->screen.cur.col; (col + count) < R->TermWin.ncol; col++) {
+ stp[col] = stp[col + count];
+ srp[col] = srp[col + count];
+ }
+ rxvt_blank_line(aR_
&(stp[R->TermWin.ncol - count]),
- &(srp[R->TermWin.ncol - count]),
- (unsigned int)count, tr);
- if (*slp == -1) /* break line continuation */
- *slp = R->TermWin.ncol;
- *slp -= count;
- MAX_IT(*slp, 0);
- if (R->selection.op && R->current_screen == R->selection.screen
- && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) {
- if (R->selection.end.row != R->screen.cur.row
- || (R->screen.cur.col >= R->selection.beg.col - count)
- || R->selection.end.col >= R->TermWin.ncol)
- CLEAR_SELECTION(R);
- else {
- /* shift selection */
- R->selection.beg.col -= count;
- R->selection.mark.col -= count; /* XXX: yes? */
- R->selection.end.col -= count;
- }
- }
- break;
+ &(srp[R->TermWin.ncol - count]),
+ (unsigned int)count, tr);
+ if (*slp == -1) /* break line continuation */
+ *slp = R->TermWin.ncol;
+ *slp -= count;
+ MAX_IT(*slp, 0);
+ if (R->selection.op && R->current_screen == R->selection.screen
+ && ROWCOL_IN_ROW_AT_OR_AFTER(R->selection.beg, R->screen.cur)) {
+ if (R->selection.end.row != R->screen.cur.row
+ || (R->screen.cur.col >= R->selection.beg.col - count)
+ || R->selection.end.col >= R->TermWin.ncol)
+ CLEAR_SELECTION(R);
+ else {
+ /* shift selection */
+ R->selection.beg.col -= count;
+ R->selection.mark.col -= count; /* XXX: yes? */
+ R->selection.end.col -= count;
+ }
+ }
+ break;
}
}
MAX_IT(top, 0);
MIN_IT(bot, (int)R->TermWin.nrow - 1);
if (top > bot)
- return;
+ return;
R->screen.tscroll = top;
R->screen.bscroll = bot;
rxvt_scr_gotorc(aR_ 0, 0, 0);
{
R->want_refresh = 1;
if (mode)
- R->screen.flags |= Screen_VisibleCursor;
+ R->screen.flags |= Screen_VisibleCursor;
else
- R->screen.flags &= ~Screen_VisibleCursor;
+ R->screen.flags &= ~Screen_VisibleCursor;
}
/* ------------------------------------------------------------------------- */
rxvt_scr_autowrap(pR_ int mode)
{
if (mode)
- R->screen.flags |= Screen_Autowrap;
+ R->screen.flags |= Screen_Autowrap;
else
- R->screen.flags &= ~(Screen_Autowrap | Screen_WrapNext);
+ R->screen.flags &= ~(Screen_Autowrap | Screen_WrapNext);
}
/* ------------------------------------------------------------------------- */
rxvt_scr_relative_origin(pR_ int mode)
{
if (mode)
- R->screen.flags |= Screen_Relative;
+ R->screen.flags |= Screen_Relative;
else
- R->screen.flags &= ~Screen_Relative;
+ R->screen.flags &= ~Screen_Relative;
rxvt_scr_gotorc(aR_ 0, 0, 0);
}
rxvt_scr_insert_mode(pR_ int mode)
{
if (mode)
- R->screen.flags |= Screen_Insert;
+ R->screen.flags |= Screen_Insert;
else
- R->screen.flags &= ~Screen_Insert;
+ R->screen.flags &= ~Screen_Insert;
}
/* ------------------------------------------------------------------------- */
rxvt_scr_set_tab(pR_ int mode)
{
if (mode < 0)
- MEMSET(R->tabs, 0, R->TermWin.ncol * sizeof(char));
+ MEMSET(R->tabs, 0, R->TermWin.ncol * sizeof(char));
else if (R->screen.cur.col < R->TermWin.ncol)
- R->tabs[R->screen.cur.col] = (mode ? 1 : 0);
+ R->tabs[R->screen.cur.col] = (mode ? 1 : 0);
}
/* ------------------------------------------------------------------------- */
XGCValues gcvalue;
if (R->rvideo != mode) {
- R->rvideo = mode;
- SWAP_IT(R->PixColors[Color_fg], R->PixColors[Color_bg], rxvt_color);
+ R->rvideo = mode;
+ SWAP_IT(R->PixColors[Color_fg], R->PixColors[Color_bg], rxvt_color);
#if defined(XPM_BACKGROUND)
- if (R->bgPixmap.pixmap == None)
+ if (R->bgPixmap.pixmap == None)
#endif
#if defined(TRANSPARENT)
- if (!(R->Options & Opt_transparent) || R->am_transparent == 0)
+ if (!(R->Options & Opt_transparent) || R->am_transparent == 0)
#endif
- XSetWindowBackground(R->Xdisplay, R->TermWin.vt,
- R->PixColors[Color_bg]);
+ XSetWindowBackground(R->Xdisplay, R->TermWin.vt,
+ R->PixColors[Color_bg]);
- gcvalue.foreground = R->PixColors[Color_fg];
- gcvalue.background = R->PixColors[Color_bg];
- XChangeGC(R->Xdisplay, R->TermWin.gc, GCBackground | GCForeground,
- &gcvalue);
- rxvt_scr_clear(aR);
- rxvt_scr_touch(aR_ True);
+ gcvalue.foreground = R->PixColors[Color_fg];
+ gcvalue.background = R->PixColors[Color_bg];
+ XChangeGC(R->Xdisplay, R->TermWin.gc, GCBackground | GCForeground,
+ &gcvalue);
+ rxvt_scr_clear(aR);
+ rxvt_scr_touch(aR_ True);
}
}
rxvt_scr_report_position(pR)
{
rxvt_tt_printf(aR_ "\033[%d;%dR", R->screen.cur.row + 1,
- R->screen.cur.col + 1);
+ R->screen.cur.col + 1);
}
\f
/* ------------------------------------------------------------------------- *
rxvt_set_font_style(pR)
{
switch (R->charsets[R->screen.charset]) {
- case '0': /* DEC Special Character & Line Drawing Set */
- break;
- case 'A': /* United Kingdom (UK) */
- break;
- case 'B': /* United States (USASCII) */
- break;
- case '<': /* Multinational character set */
- break;
- case '5': /* Finnish character set */
- break;
- case 'C': /* Finnish character set */
- break;
- case 'K': /* German character set */
- break;
+ case '0': /* DEC Special Character & Line Drawing Set */
+ break;
+ case 'A': /* United Kingdom (UK) */
+ break;
+ case 'B': /* United States (USASCII) */
+ break;
+ case '<': /* Multinational character set */
+ break;
+ case '5': /* Finnish character set */
+ break;
+ case 'C': /* Finnish character set */
+ break;
+ case 'K': /* German character set */
+ break;
}
}
int i;
row_col_t rc[RC_COUNT];
- if (R->drawn_text == NULL) /* sanity check */
- return;
+ if (R->drawn_text == NULL) /* sanity check */
+ return;
#ifdef DEBUG_STRICT
x = max(x, (int)R->TermWin.int_bwidth);
/* sanity checks */
for (i = PART_BEG; i < RC_COUNT; i++) {
- MIN_IT(rc[i].col, R->TermWin.ncol - 1);
- MIN_IT(rc[i].row, R->TermWin.nrow - 1);
+ MIN_IT(rc[i].col, R->TermWin.ncol - 1);
+ MIN_IT(rc[i].row, R->TermWin.nrow - 1);
}
D_SCREEN((stderr, "rxvt_scr_expose(x:%d, y:%d, w:%d, h:%d) area (c:%d,r:%d)-(c:%d,r:%d)", x, y, width, height, rc[PART_BEG].col, rc[PART_BEG].row, rc[PART_END].col, rc[PART_END].row));
for (i = rc[PART_BEG].row; i <= rc[PART_END].row; i++)
- fill_text (&(R->drawn_text[i][rc[PART_BEG].col]), 0,
- (rc[PART_END].col - rc[PART_BEG].col + 1));
+ fill_text (&(R->drawn_text[i][rc[PART_BEG].col]), 0,
+ (rc[PART_END].col - rc[PART_BEG].col + 1));
if (refresh)
- rxvt_scr_refresh(aR_ SLOW_REFRESH | REFRESH_BOUNDS);
+ rxvt_scr_refresh(aR_ SLOW_REFRESH | REFRESH_BOUNDS);
}
/* ------------------------------------------------------------------------- */
oldviewstart = R->TermWin.view_start;
if (y < len) {
- p = (R->TermWin.nrow + R->TermWin.nscrolled) * (len - y) / len;
- p -= (long)(R->TermWin.nrow - 1);
- p = max(p, 0);
+ p = (R->TermWin.nrow + R->TermWin.nscrolled) * (len - y) / len;
+ p -= (long)(R->TermWin.nrow - 1);
+ p = max(p, 0);
}
R->TermWin.view_start = (uint16_t)min(p, R->TermWin.nscrolled);
D_SCREEN((stderr, "rxvt_scr_move_to(%d, %d) view_start:%d", y, len, R->TermWin.view_start));
#endif
oldviewstart = R->TermWin.view_start;
if (direction == UP) {
- n = R->TermWin.view_start + nlines;
- R->TermWin.view_start = min(n, R->TermWin.nscrolled);
+ n = R->TermWin.view_start + nlines;
+ R->TermWin.view_start = min(n, R->TermWin.nscrolled);
} else {
- n = R->TermWin.view_start - nlines;
- R->TermWin.view_start = max(n, 0);
+ n = R->TermWin.view_start - nlines;
+ R->TermWin.view_start = max(n, 0);
}
return rxvt_scr_changeview(aR_ oldviewstart);
}
rxvt_scr_changeview(pR_ uint16_t oldviewstart)
{
if (R->TermWin.view_start != oldviewstart) {
- R->want_refresh = 1;
+ R->want_refresh = 1;
#ifdef RXVT_GRAPHICS
- if (rxvt_Gr_Displayed(aR))
- rxvt_Gr_scroll(aR_ 0);
+ if (rxvt_Gr_Displayed(aR))
+ rxvt_Gr_scroll(aR_ 0);
#endif
- R->num_scr -= (R->TermWin.view_start - oldviewstart);
+ R->num_scr -= (R->TermWin.view_start - oldviewstart);
}
return (int)(R->TermWin.view_start - oldviewstart);
}
# ifdef MAPALERT_OPTION
if (R->Options & Opt_mapAlert)
# endif
- XMapWindow(R->Xdisplay, R->TermWin.parent[0]);
+ XMapWindow(R->Xdisplay, R->TermWin.parent[0]);
# endif
if (R->Options & Opt_visualBell) {
- rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */
- rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */
+ rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */
+ rxvt_scr_rvideo_mode(aR_ !R->rvideo); /* refresh also done */
} else
- XBell(R->Xdisplay, 0);
+ XBell(R->Xdisplay, 0);
#endif
}
FILE *fd;
if ((fd = rxvt_popen_printer(aR)) == NULL)
- return;
+ return;
nrows = R->TermWin.nrow;
row_offset = R->TermWin.saveLines;
if (!fullhist)
- row_offset -= R->TermWin.view_start;
+ row_offset -= R->TermWin.view_start;
else {
- nrows += R->TermWin.nscrolled;
- row_offset -= R->TermWin.nscrolled;
+ nrows += R->TermWin.nscrolled;
+ row_offset -= R->TermWin.nscrolled;
}
for (r1 = 0; r1 < nrows; r1++) {
- t = R->screen.text[r1 + row_offset];
- for (i = R->TermWin.ncol - 1; i >= 0; i--)
- if (!isspace(t[i]))
- break;
- fprintf(fd, "%.*s\n", (i + 1), t);
+ t = R->screen.text[r1 + row_offset];
+ for (i = R->TermWin.ncol - 1; i >= 0; i--)
+ if (!isspace(t[i]))
+ break;
+ fprintf(fd, "%.*s\n", (i + 1), t);
}
rxvt_pclose_printer(fd);
#endif
*/
#if defined (NO_BRIGHTCOLOR) || defined (VERYBOLD)
-# define MONO_BOLD(x) ((x) & (RS_Bold|RS_Blink))
-# define MONO_BOLD_FG(x, fg) MONO_BOLD(x)
+# define MONO_BOLD(x) ((x) & (RS_Bold|RS_Blink))
+# define MONO_BOLD_FG(x, fg) MONO_BOLD(x)
#else
-# define MONO_BOLD(x) \
+# define MONO_BOLD(x) \
(((x) & (RS_Bold | RS_fgMask)) == (RS_Bold | Color_fg))
-# define MONO_BOLD_FG(x, fg) (((x) & RS_Bold) && (fg) == Color_fg)
+# define MONO_BOLD_FG(x, fg) (((x) & RS_Bold) && (fg) == Color_fg)
#endif
-#define FONT_WIDTH(X, Y) \
+#define FONT_WIDTH(X, Y) \
(X)->per_char[(Y) - (X)->min_char_or_byte2].width
-#define FONT_RBEAR(X, Y) \
+#define FONT_RBEAR(X, Y) \
(X)->per_char[(Y) - (X)->min_char_or_byte2].rbearing
-#define FONT_LBEAR(X, Y) \
+#define FONT_LBEAR(X, Y) \
(X)->per_char[(Y) - (X)->min_char_or_byte2].lbearing
-#define IS_FONT_CHAR(X, Y) \
+#define IS_FONT_CHAR(X, Y) \
((Y) >= (X)->min_char_or_byte2 && (Y) <= (X)->max_char_or_byte2)
/* EXTPROTO */
void
rxvt_scr_refresh(pR_ unsigned char refresh_type)
{
- unsigned char clearfirst, /* first character writes before cell */
- clearlast, /* last character writes beyond cell */
- must_clear, /* use draw_string not draw_image_string */
+ unsigned char clearfirst, /* first character writes before cell */
+ clearlast, /* last character writes beyond cell */
+ must_clear, /* use draw_string not draw_image_string */
#ifndef NO_BOLDFONT
- bfont, /* we've changed font to bold font */
-#endif
- rvid, /* reverse video this position */
- wbyte, /* we're in multibyte */
- showcursor; /* show the cursor */
- int fore, back; /* desired foreground/background */
- int16_t col, row, /* column/row we're processing */
- ocrow; /* old cursor row */
+ bfont, /* we've changed font to bold font */
+#endif
+ rvid, /* reverse video this position */
+ wbyte, /* we're in multibyte */
+ showcursor; /* show the cursor */
+ int fore, back; /* desired foreground/background */
+ int16_t col, row, /* column/row we're processing */
+ ocrow; /* old cursor row */
int cursorwidth;
- int i, /* tmp */
- row_offset; /* basic offset in screen structure */
+ int i, /* tmp */
+ row_offset; /* basic offset in screen structure */
#ifndef NO_CURSORCOLOR
- rend_t cc1; /* store colours at cursor position(s) */
- rend_t cc2; /* store colours at cursor position(s) */
+ rend_t cc1; /* store colours at cursor position(s) */
+ rend_t cc2; /* store colours at cursor position(s) */
#endif
- rend_t *drp, *srp; /* drawn-rend-pointer, screen-rend-pointer */
- text_t *dtp, *stp; /* drawn-text-pointer, screen-text-pointer */
- char *buffer; /* local copy of R->buffer */
+ rend_t *drp, *srp; /* drawn-rend-pointer, screen-rend-pointer */
+ text_t *dtp, *stp; /* drawn-text-pointer, screen-text-pointer */
+ char *buffer; /* local copy of R->buffer */
if (refresh_type == NO_REFRESH || !R->TermWin.mapped)
- return;
+ return;
-/*
- * A: set up vars
- */
+ /*
+ * A: set up vars
+ */
clearfirst = clearlast = must_clear = wbyte = 0;
#ifndef NO_BOLDFONT
bfont = 0;
#endif
- if (R->currmaxcol < R->TermWin.ncol) {
- R->currmaxcol = R->TermWin.ncol;
- R->buffer = (char *)rxvt_realloc (R->buffer,
+ if (R->currmaxcol < R->TermWin.ncol)
+ {
+ R->currmaxcol = R->TermWin.ncol;
+ R->buffer = (char *)rxvt_realloc (R->buffer,
sizeof(char) * (R->currmaxcol + 1) * MB_CUR_MAX);
- }
+ }
+
buffer = R->buffer;
R->refresh_count = 0;
row_offset = R->TermWin.saveLines - R->TermWin.view_start;
- if ((refresh_type & REFRESH_BOUNDS)) {
- clearfirst = clearlast = 1;
- R->refresh_type &= ~REFRESH_BOUNDS;
- }
+ if ((refresh_type & REFRESH_BOUNDS))
+ {
+ clearfirst = clearlast = 1;
+ R->refresh_type &= ~REFRESH_BOUNDS;
+ }
+
#if defined(XPM_BACKGROUND)
must_clear |= (R->bgPixmap.pixmap != None);
#endif
* C: set the cursor character(s)
*/
{
- unsigned char setoldcursor;
- rend_t ccol1, /* Cursor colour */
- ccol2; /* Cursor colour2 */
+ unsigned char setoldcursor;
+ rend_t ccol1, /* Cursor colour */
+ ccol2; /* Cursor colour2 */
- showcursor = (R->screen.flags & Screen_VisibleCursor);
- cursorwidth = 0;
+ showcursor = (R->screen.flags & Screen_VisibleCursor);
+ cursorwidth = 0;
#ifdef CURSOR_BLINK
- if (R->hidden_cursor)
- showcursor = 0;
+ if (R->hidden_cursor)
+ showcursor = 0;
#endif
- cursorwidth = 0;
+ cursorwidth = 0;
- if (showcursor)
- {
- cursorwidth++;
+ if (showcursor)
+ {
+ cursorwidth++;
- srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines]
- [R->screen.cur.col]);
+ srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines]
+ [R->screen.cur.col]);
- if (showcursor && R->TermWin.focus)
- {
- *srp ^= RS_RVid;
+ if (showcursor && R->TermWin.focus)
+ {
+ *srp ^= RS_RVid;
#ifndef NO_CURSORCOLOR
- cc1 = *srp & (RS_fgMask | RS_bgMask);
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor))
- ccol1 = Color_cursor;
- else
+ cc1 = *srp & (RS_fgMask | RS_bgMask);
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor))
+ ccol1 = Color_cursor;
+ else
#ifdef CURSOR_COLOR_IS_RENDITION_COLOR
- ccol1 = GET_FGCOLOR(R->rstyle);
+ ccol1 = GET_FGCOLOR(R->rstyle);
#else
- ccol1 = Color_fg;
+ ccol1 = Color_fg;
#endif
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor2))
- ccol2 = Color_cursor2;
- else
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor2))
+ ccol2 = Color_cursor2;
+ else
#ifdef CURSOR_COLOR_IS_RENDITION_COLOR
- ccol2 = GET_BGCOLOR(R->rstyle);
+ ccol2 = GET_BGCOLOR(R->rstyle);
#else
- ccol2 = Color_bg;
+ ccol2 = Color_bg;
#endif
- *srp = SET_FGCOLOR(*srp, ccol1);
- *srp = SET_BGCOLOR(*srp, ccol2);
+ *srp = SET_FGCOLOR(*srp, ccol1);
+ *srp = SET_BGCOLOR(*srp, ccol2);
#endif
- }
+ }
- while (IS_WIDE (*srp))
- cursorwidth++, srp++;
+ while (IS_WIDE (*srp))
+ cursorwidth++, srp++;
+ }
+
+ /* make sure no outline cursor is left around */
+ setoldcursor = 0;
+ if (ocrow != -1) {
+ if (R->screen.cur.row + R->TermWin.view_start != ocrow
+ || R->screen.cur.col != R->oldcursor.col) {
+ if (ocrow < R->TermWin.nrow
+ && R->oldcursor.col < R->TermWin.ncol) {
+ R->drawn_rend[ocrow][R->oldcursor.col] ^= (RS_RVid | RS_Uline);
+ }
+ if (R->TermWin.focus || !showcursor)
+ R->oldcursor.row = -1;
+ else
+ setoldcursor = 1;
}
-
- /* make sure no outline cursor is left around */
- setoldcursor = 0;
- if (ocrow != -1) {
- if (R->screen.cur.row + R->TermWin.view_start != ocrow
- || R->screen.cur.col != R->oldcursor.col) {
- if (ocrow < R->TermWin.nrow
- && R->oldcursor.col < R->TermWin.ncol) {
- R->drawn_rend[ocrow][R->oldcursor.col] ^= (RS_RVid | RS_Uline);
- }
- if (R->TermWin.focus || !showcursor)
- R->oldcursor.row = -1;
- else
- setoldcursor = 1;
- }
- } else if (!R->TermWin.focus)
- setoldcursor = 1;
- if (setoldcursor) {
- if (R->screen.cur.row + R->TermWin.view_start >= R->TermWin.nrow)
- R->oldcursor.row = -1;
- else {
- R->oldcursor.row = R->screen.cur.row + R->TermWin.view_start;
- R->oldcursor.col = R->screen.cur.col;
- }
- }
+ } else if (!R->TermWin.focus)
+ setoldcursor = 1;
+ if (setoldcursor) {
+ if (R->screen.cur.row + R->TermWin.view_start >= R->TermWin.nrow)
+ R->oldcursor.row = -1;
+ else {
+ R->oldcursor.row = R->screen.cur.row + R->TermWin.view_start;
+ R->oldcursor.col = R->screen.cur.col;
+ }
+ }
}
#ifndef NO_SLOW_LINK_SUPPORT
*/
i = R->num_scr;
if (refresh_type == FAST_REFRESH && R->num_scr_allow && i
- && abs(i) < R->TermWin.nrow && !must_clear) {
- int16_t nits;
- int j;
- rend_t *drp2;
- text_t *dtp2;
+ && abs(i) < R->TermWin.nrow && !must_clear)
+ {
+ int16_t nits;
+ int j;
+ rend_t *drp2;
+ text_t *dtp2;
int len, wlen;
- j = R->TermWin.nrow;
- wlen = len = -1;
- row = i > 0 ? 0 : j - 1;
- for (; j-- >= 0; row += (i > 0 ? 1 : -1)) {
- if (row + i >= 0 && row + i < R->TermWin.nrow && row + i != ocrow) {
- stp = R->screen.text[row + row_offset];
- srp = R->screen.rend[row + row_offset];
- dtp = R->drawn_text[row];
- dtp2 = R->drawn_text[row + i];
- drp = R->drawn_rend[row];
- drp2 = R->drawn_rend[row + i];
- for (nits = 0, col = R->TermWin.ncol; col--; )
- if (stp[col] != dtp2[col] || srp[col] != drp2[col])
- nits--;
- else if (stp[col] != dtp[col] || srp[col] != drp[col])
- nits++;
- if (nits > 8) { /* XXX: arbitrary choice */
- for (col = R->TermWin.ncol; col--; ) {
- *dtp++ = *dtp2++;
- *drp++ = *drp2++;
- }
- if (len == -1)
- len = row;
- wlen = row;
- continue;
- }
- }
- if (len != -1) {
- /* also comes here at end if needed because of >= above */
- if (wlen < len)
- SWAP_IT(wlen, len, int);
- D_SCREEN((stderr, "rxvt_scr_refresh(): XCopyArea: %d -> %d (height: %d)", len + i, len, wlen - len + 1));
- XCopyArea(R->Xdisplay, R->TermWin.vt, R->TermWin.vt,
- R->TermWin.gc, 0, Row2Pixel(len + i),
- (unsigned int)TermWin_TotalWidth(),
- (unsigned int)Height2Pixel(wlen - len + 1),
- 0, Row2Pixel(len));
- len = -1;
- }
- }
+ j = R->TermWin.nrow;
+ wlen = len = -1;
+ row = i > 0 ? 0 : j - 1;
+ for (; j-- >= 0; row += (i > 0 ? 1 : -1))
+ {
+ if (row + i >= 0 && row + i < R->TermWin.nrow && row + i != ocrow)
+ {
+ stp = R->screen.text[row + row_offset];
+ srp = R->screen.rend[row + row_offset];
+ dtp = R->drawn_text[row];
+ dtp2 = R->drawn_text[row + i];
+ drp = R->drawn_rend[row];
+ drp2 = R->drawn_rend[row + i];
+
+ for (nits = 0, col = R->TermWin.ncol; col--; )
+ if (stp[col] != dtp2[col] || srp[col] != drp2[col])
+ nits--;
+ else if (stp[col] != dtp[col] || srp[col] != drp[col])
+ nits++;
+
+ if (nits > 8) /* XXX: arbitrary choice */
+ {
+ for (col = R->TermWin.ncol; col--; )
+ {
+ *dtp++ = *dtp2++;
+ *drp++ = *drp2++;
+ }
+
+ if (len == -1)
+ len = row;
+
+ wlen = row;
+ continue;
+ }
+ }
+
+ if (len != -1)
+ {
+ /* also comes here at end if needed because of >= above */
+ if (wlen < len)
+ SWAP_IT(wlen, len, int);
+ D_SCREEN((stderr, "rxvt_scr_refresh(): XCopyArea: %d -> %d (height: %d)", len + i, len, wlen - len + 1));
+ XCopyArea(R->Xdisplay, R->TermWin.vt, R->TermWin.vt,
+ R->TermWin.gc, 0, Row2Pixel(len + i),
+ (unsigned int)TermWin_TotalWidth(),
+ (unsigned int)Height2Pixel(wlen - len + 1),
+ 0, Row2Pixel(len));
+ len = -1;
+ }
+ }
}
#endif
/*
* E2: OK, now the real pass
*/
- int ypixel = (int)Row2Pixel(row);
+ int ypixel = (int)Row2Pixel(row);
- for (col = 0; col < R->TermWin.ncol; col++) {
- /* compare new text with old - if exactly the same then continue */
- rend_t rend = srp[col]; /* screen rendition (target rendtion) */
+ for (col = 0; col < R->TermWin.ncol; col++)
+ {
+ /* compare new text with old - if exactly the same then continue */
+ rend_t rend = srp[col]; /* screen rendition (target rendtion) */
- if (stp[col] == dtp[col] /* Must match characters to skip. */
- && (rend == drp[col] /* Either rendition the same or */
- || (stp[col] == ' ' /* space w/ no background change */
- && GET_BGATTR(rend) == GET_BGATTR(drp[col]))))
- continue;
+ if (stp[col] == dtp[col] /* Must match characters to skip. */
+ && (rend == drp[col] /* Either rendition the same or */
+ || (stp[col] == ' ' /* space w/ no background change */
+ && GET_BGATTR(rend) == GET_BGATTR(drp[col]))))
+ continue;
text_t *text = stp + col;
int count = 1;
- /* redraw one or more characters */
+ /* redraw one or more characters */
dtp[col] = stp[col];
- drp[col] = rend;
+ drp[col] = rend;
if (*text == NOCHAR) // never start redrawing at invisible characters. */
continue;
- int xpixel = Col2Pixel(col);
+ int xpixel = Col2Pixel(col);
// this loop looks very messy, it can probably be optimized
// and cleaned a bit by you?
break;
}
- col--; /* went one too far. move back */
- count -= i; /* dump any matching trailing chars */
+ col--; /* went one too far. move back */
+ count -= i; /* dump any matching trailing chars */
/*
* Determine the attributes for the string
*/
int fid = GET_FONT(rend);
- fore = GET_FGCOLOR(rend);
- back = GET_BGCOLOR(rend);
- rend = GET_ATTR(rend);
+ fore = GET_FGCOLOR(rend);
+ back = GET_BGCOLOR(rend);
+ rend = GET_ATTR(rend);
- rvid = (rend & RS_RVid) ? 1 : 0;
+ rvid = (rend & RS_RVid) ? 1 : 0;
#ifdef OPTION_HC
- if (!rvid && (rend & RS_Blink))
+ if (!rvid && (rend & RS_Blink))
{
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_HC))
- back = Color_HC;
- else
- rvid = !rvid; /* fall back */
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_HC))
+ back = Color_HC;
+ else
+ rvid = !rvid; /* fall back */
}
#endif
- if (rvid)
+ if (rvid)
{
- SWAP_IT(fore, back, int);
+ SWAP_IT(fore, back, int);
#ifndef NO_BOLD_UNDERLINE_REVERSE
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_RV)
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_RV)
# ifndef NO_CURSORCOLOR
- && !ISSET_PIXCOLOR(R, Color_cursor)
+ && !ISSET_PIXCOLOR(R, Color_cursor)
# endif
)
- back = Color_RV;
+ back = Color_RV;
#endif
- }
+ }
#ifndef NO_BOLD_UNDERLINE_REVERSE
- else if (rend & RS_Bold)
+ else if (rend & RS_Bold)
{
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_BD))
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_BD))
{
- fore = Color_BD;
+ fore = Color_BD;
# ifndef VERYBOLD
- rend &= ~RS_Bold; /* we've taken care of it */
+ rend &= ~RS_Bold; /* we've taken care of it */
# endif
}
- }
+ }
else if (rend & RS_Uline)
{
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_UL))
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_UL))
{
- fore = Color_UL;
- rend &= ~RS_Uline; /* we've taken care of it */
+ fore = Color_UL;
+ rend &= ~RS_Uline; /* we've taken care of it */
}
- }
+ }
#endif
/*
if (back == Color_bg)
{
- if (must_clear)
+ if (must_clear)
{
- for (i = 0; i < count; i++) /* don't draw empty strings */
- if (text[i] != ' ') {
- font->draw (xpixel, ypixel, text, count, fore, -1);
- goto nodraw;
+ for (i = 0; i < count; i++) /* don't draw empty strings */
+ if (text[i] != ' ')
+ {
+ font->draw (xpixel, ypixel, text, count, fore, -1);
+ goto nodraw;
}
+
CLEAR_CHARS(xpixel, ypixel, count);
nodraw: ;
}
else
font->draw (xpixel, ypixel, text, count, fore, Color_bg);
- } else
- font->draw (xpixel, ypixel, text, count, fore, back);
+ }
+ else
+ font->draw (xpixel, ypixel, text, count, fore, back);
- if ((rend & RS_Uline) && (font->descent > 1))
- XDrawLine(R->Xdisplay, drawBuffer, R->TermWin.gc,
- xpixel, ypixel + font->ascent + 1,
- xpixel + Width2Pixel(count) - 1, ypixel + font->ascent + 1);
- } /* for (col....) */
- } /* for (row....) */
+ if ((rend & RS_Uline) && (font->descent > 1))
+ XDrawLine(R->Xdisplay, drawBuffer, R->TermWin.gc,
+ xpixel, ypixel + font->ascent + 1,
+ xpixel + Width2Pixel(count) - 1, ypixel + font->ascent + 1);
+ } /* for (col....) */
+ } /* for (row....) */
/*
* G: cleanup cursor and display outline cursor if necessary
*/
if (showcursor) {
- if (R->TermWin.focus) {
- srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines]
- [R->screen.cur.col]);
- *srp ^= RS_RVid;
+ if (R->TermWin.focus) {
+ srp = &(R->screen.rend[R->screen.cur.row + R->TermWin.saveLines]
+ [R->screen.cur.col]);
+ *srp ^= RS_RVid;
#ifndef NO_CURSORCOLOR
- *srp = (*srp & ~(RS_fgMask | RS_bgMask)) | cc1;
+ *srp = (*srp & ~(RS_fgMask | RS_bgMask)) | cc1;
#endif
- } else if (R->oldcursor.row >= 0) {
+ } else if (R->oldcursor.row >= 0) {
#ifndef NO_CURSORCOLOR
- unsigned long gcmask; /* Graphics Context mask */
+ unsigned long gcmask; /* Graphics Context mask */
- if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor)) {
+ if (XDEPTH > 2 && ISSET_PIXCOLOR(R, Color_cursor)) {
XSetForeground (R->Xdisplay, R->TermWin.gc, R->PixColors[Color_cursor]);
- }
-#endif
- XDrawRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc,
- Col2Pixel(R->oldcursor.col),
- Row2Pixel(R->oldcursor.row),
- (unsigned int)(Width2Pixel(cursorwidth) - 1),
- (unsigned int)(Height2Pixel(1) - R->TermWin.lineSpace - 1));
- }
+ }
+#endif
+ XDrawRectangle(R->Xdisplay, drawBuffer, R->TermWin.gc,
+ Col2Pixel(R->oldcursor.col),
+ Row2Pixel(R->oldcursor.row),
+ (unsigned int)(Width2Pixel(cursorwidth) - 1),
+ (unsigned int)(Height2Pixel(1) - R->TermWin.lineSpace - 1));
+ }
}
/*
* H: cleanup selection
* I: other general cleanup
*/
if (clearfirst && R->TermWin.int_bwidth)
- /*
- * clear the whole screen height, note that width == 0 is treated
- * specially by XClearArea
- */
- XClearArea(R->Xdisplay, R->TermWin.vt, 0, 0,
- (unsigned int)R->TermWin.int_bwidth,
- (unsigned int)TermWin_TotalHeight(), False);
+ /*
+ * clear the whole screen height, note that width == 0 is treated
+ * specially by XClearArea
+ */
+ XClearArea(R->Xdisplay, R->TermWin.vt, 0, 0,
+ (unsigned int)R->TermWin.int_bwidth,
+ (unsigned int)TermWin_TotalHeight(), False);
if (clearlast && R->TermWin.int_bwidth)
- /*
- * clear the whole screen height, note that width == 0 is treated
- * specially by XClearArea
- */
- XClearArea(R->Xdisplay, R->TermWin.vt,
- R->TermWin.width + R->TermWin.int_bwidth, 0,
- (unsigned int)R->TermWin.int_bwidth,
- (unsigned int)TermWin_TotalHeight(), False);
+ /*
+ * clear the whole screen height, note that width == 0 is treated
+ * specially by XClearArea
+ */
+ XClearArea(R->Xdisplay, R->TermWin.vt,
+ R->TermWin.width + R->TermWin.int_bwidth, 0,
+ (unsigned int)R->TermWin.int_bwidth,
+ (unsigned int)TermWin_TotalHeight(), False);
if (refresh_type & SMOOTH_REFRESH)
- XSync(R->Xdisplay, False);
+ XSync(R->Xdisplay, False);
R->num_scr = 0;
R->num_scr_allow = 1;
- R->want_refresh = 0; /* screen is current */
+ R->want_refresh = 0; /* screen is current */
}
/* ------------------------------------------------------------------------- */
rxvt_scr_clear(pR)
{
if (!R->TermWin.mapped)
- return;
+ return;
R->num_scr_allow = 0;
R->want_refresh = 1;
#ifdef TRANSPARENT
if ((R->Options & Opt_transparent) && (R->am_pixmap_trans == 0)) {
- int i;
-
- if (!(R->Options & Opt_transparent_all))
- i = 0;
- else
- i = (int)(sizeof(R->TermWin.parent) / sizeof(Window));
- for (; i--;)
- if (R->TermWin.parent[i] != None)
- XClearWindow(R->Xdisplay, R->TermWin.parent[i]);
+ int i;
+
+ if (!(R->Options & Opt_transparent_all))
+ i = 0;
+ else
+ i = (int)(sizeof(R->TermWin.parent) / sizeof(Window));
+ for (; i--;)
+ if (R->TermWin.parent[i] != None)
+ XClearWindow(R->Xdisplay, R->TermWin.parent[i]);
}
#endif
XClearWindow(R->Xdisplay, R->TermWin.vt);
rend_t *srp;
if (R->selection.op && R->current_screen == R->selection.screen) {
- end_row = R->TermWin.saveLines - R->TermWin.view_start;
- i = R->selection.beg.row + R->TermWin.saveLines;
- row = R->selection.end.row + R->TermWin.saveLines;
- if (i >= end_row)
- col = R->selection.beg.col;
- else {
- col = 0;
- i = end_row;
- }
- end_row += R->TermWin.nrow;
- for (; i < row && i < end_row; i++, col = 0)
- for (srp = R->screen.rend[i]; col < R->TermWin.ncol; col++)
+ end_row = R->TermWin.saveLines - R->TermWin.view_start;
+ i = R->selection.beg.row + R->TermWin.saveLines;
+ row = R->selection.end.row + R->TermWin.saveLines;
+ if (i >= end_row)
+ col = R->selection.beg.col;
+ else {
+ col = 0;
+ i = end_row;
+ }
+ end_row += R->TermWin.nrow;
+ for (; i < row && i < end_row; i++, col = 0)
+ for (srp = R->screen.rend[i]; col < R->TermWin.ncol; col++)
#ifndef OPTION_HC
- srp[col] ^= RS_RVid;
+ srp[col] ^= RS_RVid;
#else
- srp[col] ^= RS_Blink;
+ srp[col] ^= RS_Blink;
#endif
- if (i == row && i < end_row)
- for (srp = R->screen.rend[i]; col < R->selection.end.col; col++)
+ if (i == row && i < end_row)
+ for (srp = R->screen.rend[i]; col < R->selection.end.col; col++)
#ifndef OPTION_HC
- srp[col] ^= RS_RVid;
+ srp[col] ^= RS_RVid;
#else
- srp[col] ^= RS_Blink;
+ srp[col] ^= RS_Blink;
#endif
}
}
char r1[] = "\n";
for (row = R->TermWin.saveLines - R->TermWin.nscrolled;
- row < R->TermWin.saveLines + R->TermWin.nrow - 1; row++) {
- width = R->screen.tlen[row] >= 0 ? R->screen.tlen[row]
- : R->TermWin.ncol;
- for (towrite = width; towrite; towrite -= wrote) {
- wrote = write(fd, &(R->screen.text[row][width - towrite]),
- towrite);
- if (wrote < 0)
- return; /* XXX: death, no report */
- }
- if (R->screen.tlen[row] >= 0)
- if (write(fd, r1, 1) <= 0)
- return; /* XXX: death, no report */
+ row < R->TermWin.saveLines + R->TermWin.nrow - 1; row++) {
+ width = R->screen.tlen[row] >= 0 ? R->screen.tlen[row]
+ : R->TermWin.ncol;
+ for (towrite = width; towrite; towrite -= wrote) {
+ wrote = write(fd, &(R->screen.text[row][width - towrite]),
+ towrite);
+ if (wrote < 0)
+ return; /* XXX: death, no report */
+ }
+ if (R->screen.tlen[row] >= 0)
+ if (write(fd, r1, 1) <= 0)
+ return; /* XXX: death, no report */
}
}
#endif
row_col_t pos;
if (!R->selection.op)
- return;
+ return;
pos.row = pos.col = 0;
if ((R->selection.beg.row < -(int32_t)R->TermWin.nscrolled)
- || (R->selection.beg.row >= R->TermWin.nrow)
- || (R->selection.mark.row < -(int32_t)R->TermWin.nscrolled)
- || (R->selection.mark.row >= R->TermWin.nrow)
- || (R->selection.end.row < -(int32_t)R->TermWin.nscrolled)
- || (R->selection.end.row >= R->TermWin.nrow)
+ || (R->selection.beg.row >= R->TermWin.nrow)
+ || (R->selection.mark.row < -(int32_t)R->TermWin.nscrolled)
+ || (R->selection.mark.row >= R->TermWin.nrow)
+ || (R->selection.end.row < -(int32_t)R->TermWin.nscrolled)
+ || (R->selection.end.row >= R->TermWin.nrow)
|| (check_more == 1
- && R->current_screen == R->selection.screen
- && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg)
- && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end))
- || (check_more == 2
- && ROWCOL_IS_BEFORE(R->selection.beg, pos)
- && ROWCOL_IS_AFTER(R->selection.end, pos))
- || (check_more == 3
- && ROWCOL_IS_AFTER(R->selection.end, pos))
- || (check_more == 4 /* screen width change */
- && (R->selection.beg.row != R->selection.end.row
- || R->selection.end.col > R->TermWin.ncol)))
- CLEAR_SELECTION(R);
+ && R->current_screen == R->selection.screen
+ && !ROWCOL_IS_BEFORE(R->screen.cur, R->selection.beg)
+ && ROWCOL_IS_BEFORE(R->screen.cur, R->selection.end))
+ || (check_more == 2
+ && ROWCOL_IS_BEFORE(R->selection.beg, pos)
+ && ROWCOL_IS_AFTER(R->selection.end, pos))
+ || (check_more == 3
+ && ROWCOL_IS_AFTER(R->selection.end, pos))
+ || (check_more == 4 /* screen width change */
+ && (R->selection.beg.row != R->selection.end.row
+ || R->selection.end.col > R->TermWin.ncol)))
+ CLEAR_SELECTION(R);
}
/* ------------------------------------------------------------------------- */
/* convert normal newline chars into common keyboard Return key sequence */
for (i = 0; i < nitems; i += PROP_SIZE) {
- n = min(nitems - i, PROP_SIZE);
- MEMCPY(ds, data + i, n);
- for (j = 0; j < n; j++)
- if (ds[j] == '\n')
- ds[j] = '\r';
- rxvt_tt_write(aR_ ds, (int)n);
+ n = min(nitems - i, PROP_SIZE);
+ MEMCPY(ds, data + i, n);
+ for (j = 0; j < n; j++)
+ if (ds[j] == '\n')
+ ds[j] = '\r';
+ rxvt_tt_write(aR_ ds, (int)n);
}
free(ds);
}
D_SELECT((stderr, "rxvt_selection_paste(%08lx, %lu, %d), wait=%2x", win, (unsigned long)prop, (int)delete_prop, R->selection_wait));
- if (prop == None) { /* check for failed XConvertSelection */
+ if (prop == None) { /* check for failed XConvertSelection */
#ifdef MULTICHAR_SET
- if ((R->selection_type & Sel_CompoundText)) {
- int selnum = R->selection_type & Sel_whereMask;
+ if ((R->selection_type & Sel_CompoundText)) {
+ int selnum = R->selection_type & Sel_whereMask;
- R->selection_type = 0;
- if (selnum != Sel_direct)
- rxvt_selection_request_other(aR_ XA_STRING, selnum);
- }
+ R->selection_type = 0;
+ if (selnum != Sel_direct)
+ rxvt_selection_request_other(aR_ XA_STRING, selnum);
+ }
#endif
- return 0;
+ return 0;
}
for (;;) {
- if (XGetWindowProperty(R->Xdisplay, win, prop, (long)(nread / 4),
- (long)(PROP_SIZE / 4), delete_prop,
- AnyPropertyType, &ct.encoding, &ct.format,
- &ct.nitems, &bytes_after,
- &ct.value) != Success)
- break;
- if (ct.encoding == 0) {
- D_SELECT((stderr, "rxvt_selection_paste: property didn't exist!"));
- break;
- }
- if (ct.value == NULL) {
- D_SELECT((stderr, "rxvt_selection_paste: property shooting blanks!"));
- continue;
- }
- if (ct.nitems == 0) {
- D_SELECT((stderr, "rxvt_selection_paste: property empty - also INCR end"));
- if (R->selection_wait == Sel_normal && nread == 0) {
- /*
- * pass through again trying CUT_BUFFER0 if we've come from
- * XConvertSelection() but nothing was presented
- */
- D_SELECT((stderr, "rxvt_selection_request: pasting CUT_BUFFER0"));
- rxvt_selection_paste(aR_ Xroot, XA_CUT_BUFFER0, False);
- }
- nread = -1; /* discount any previous stuff */
- break;
- }
- nread += ct.nitems;
+ if (XGetWindowProperty(R->Xdisplay, win, prop, (long)(nread / 4),
+ (long)(PROP_SIZE / 4), delete_prop,
+ AnyPropertyType, &ct.encoding, &ct.format,
+ &ct.nitems, &bytes_after,
+ &ct.value) != Success)
+ break;
+ if (ct.encoding == 0) {
+ D_SELECT((stderr, "rxvt_selection_paste: property didn't exist!"));
+ break;
+ }
+ if (ct.value == NULL) {
+ D_SELECT((stderr, "rxvt_selection_paste: property shooting blanks!"));
+ continue;
+ }
+ if (ct.nitems == 0) {
+ D_SELECT((stderr, "rxvt_selection_paste: property empty - also INCR end"));
+ if (R->selection_wait == Sel_normal && nread == 0) {
+ /*
+ * pass through again trying CUT_BUFFER0 if we've come from
+ * XConvertSelection() but nothing was presented
+ */
+ D_SELECT((stderr, "rxvt_selection_request: pasting CUT_BUFFER0"));
+ rxvt_selection_paste(aR_ Xroot, XA_CUT_BUFFER0, False);
+ }
+ nread = -1; /* discount any previous stuff */
+ break;
+ }
+ nread += ct.nitems;
#ifdef MULTICHAR_SET
- if (XmbTextPropertyToTextList(R->Xdisplay, &ct, &cl,
- &dummy_count) == Success && cl) {
- rxvt_PasteIt(aR_ cl[0], STRLEN(cl[0]));
- XFreeStringList(cl);
- } else
-#endif
- rxvt_PasteIt(aR_ ct.value, (unsigned int)ct.nitems);
- if (bytes_after == 0)
- break;
- XFree(ct.value);
+ if (XmbTextPropertyToTextList(R->Xdisplay, &ct, &cl,
+ &dummy_count) == Success && cl) {
+ rxvt_PasteIt(aR_ cl[0], STRLEN(cl[0]));
+ XFreeStringList(cl);
+ } else
+#endif
+ rxvt_PasteIt(aR_ ct.value, (unsigned int)ct.nitems);
+ if (bytes_after == 0)
+ break;
+ XFree(ct.value);
}
if (ct.value)
- XFree(ct.value);
+ XFree(ct.value);
if (R->selection_wait == Sel_normal)
- R->selection_wait = Sel_none;
+ R->selection_wait = Sel_none;
D_SELECT((stderr, "rxvt_selection_paste: bytes written: %ld", nread));
return (int)nread;
}
int reget_time = 0;
if (prop == None)
- return;
+ return;
D_SELECT((stderr, "rxvt_selection_property(%08lx, %lu)", win, (unsigned long)prop));
if (R->selection_wait == Sel_normal) {
- int a, afmt;
- Atom atype;
- unsigned long bytes_after, nitems;
- unsigned char *s = NULL;
-
- a = XGetWindowProperty(R->Xdisplay, win, prop, 0L, 1L, False,
- R->xa[XA_INCR], &atype, &afmt, &nitems,
- &bytes_after, &s);
- if (s)
- XFree(s);
- if (a != Success)
- return;
+ int a, afmt;
+ Atom atype;
+ unsigned long bytes_after, nitems;
+ unsigned char *s = NULL;
+
+ a = XGetWindowProperty(R->Xdisplay, win, prop, 0L, 1L, False,
+ R->xa[XA_INCR], &atype, &afmt, &nitems,
+ &bytes_after, &s);
+ if (s)
+ XFree(s);
+ if (a != Success)
+ return;
#ifndef __CYGWIN32__
- if (atype == R->xa[XA_INCR]) { /* start an INCR transfer */
- D_SELECT((stderr, "rxvt_selection_property: INCR: starting transfer"));
- XDeleteProperty(R->Xdisplay, win, prop);
- XFlush(R->Xdisplay);
- reget_time = 1;
- R->selection_wait = Sel_incr;
- }
+ if (atype == R->xa[XA_INCR]) { /* start an INCR transfer */
+ D_SELECT((stderr, "rxvt_selection_property: INCR: starting transfer"));
+ XDeleteProperty(R->Xdisplay, win, prop);
+ XFlush(R->Xdisplay);
+ reget_time = 1;
+ R->selection_wait = Sel_incr;
+ }
#endif
} else if (R->selection_wait == Sel_incr) {
- reget_time = 1;
- if (rxvt_selection_paste(aR_ win, prop, True) == -1) {
- D_SELECT((stderr, "rxvt_selection_property: INCR: clean end"));
- R->selection_wait = Sel_none;
- R->timeout[TIMEOUT_INCR].tv_sec = 0; /* turn off timer */
- }
+ reget_time = 1;
+ if (rxvt_selection_paste(aR_ win, prop, True) == -1) {
+ D_SELECT((stderr, "rxvt_selection_property: INCR: clean end"));
+ R->selection_wait = Sel_none;
+ R->timeout[TIMEOUT_INCR].tv_sec = 0; /* turn off timer */
+ }
}
- if (reget_time) { /* received more data so reget time */
- (void)gettimeofday(&(R->timeout[TIMEOUT_INCR]), NULL);
- R->timeout[TIMEOUT_INCR].tv_sec += 10; /* ten seconds wait */
+ if (reget_time) { /* received more data so reget time */
+ (void)gettimeofday(&(R->timeout[TIMEOUT_INCR]), NULL);
+ R->timeout[TIMEOUT_INCR].tv_sec += 10; /* ten seconds wait */
}
}
/* ------------------------------------------------------------------------- */
{
D_SELECT((stderr, "rxvt_selection_request(%lu, %d, %d)", tm, x, y));
if (x < 0 || x >= R->TermWin.width || y < 0 || y >= R->TermWin.height)
- return; /* outside window */
+ return; /* outside window */
- if (R->selection.text != NULL) { /* internal selection */
- D_SELECT((stderr, "rxvt_selection_request: pasting internal"));
- rxvt_PasteIt(aR_ R->selection.text, R->selection.len);
- return;
+ if (R->selection.text != NULL) { /* internal selection */
+ D_SELECT((stderr, "rxvt_selection_request: pasting internal"));
+ rxvt_PasteIt(aR_ R->selection.text, R->selection.len);
+ return;
} else {
- int i;
+ int i;
- R->selection_request_time = tm;
- R->selection_wait = Sel_normal;
- for (i = Sel_Primary; i <= Sel_Clipboard; i++) {
+ R->selection_request_time = tm;
+ R->selection_wait = Sel_normal;
+ for (i = Sel_Primary; i <= Sel_Clipboard; i++) {
#ifdef MULTICHAR_SET
- R->selection_type = Sel_CompoundText;
+ R->selection_type = Sel_CompoundText;
#else
- R->selection_type = 0;
+ R->selection_type = 0;
#endif
- if (rxvt_selection_request_other(aR_
+ if (rxvt_selection_request_other(aR_
#ifdef MULTICHAR_SET
- R->xa[XA_COMPOUND_TEXT],
+ R->xa[XA_COMPOUND_TEXT],
#else
- XA_STRING,
+ XA_STRING,
#endif
- i))
- return;
- }
+ i))
+ return;
+ }
}
- R->selection_wait = Sel_none; /* don't loop in rxvt_selection_paste() */
+ R->selection_wait = Sel_none; /* don't loop in rxvt_selection_paste() */
D_SELECT((stderr, "rxvt_selection_request: pasting CUT_BUFFER0"));
rxvt_selection_paste(aR_ Xroot, XA_CUT_BUFFER0, False);
}
R->selection_type |= selnum;
if (selnum == Sel_Primary)
- sel = XA_PRIMARY;
+ sel = XA_PRIMARY;
else if (selnum == Sel_Secondary)
- sel = XA_SECONDARY;
+ sel = XA_SECONDARY;
else
- sel = R->xa[XA_CLIPBOARD];
+ sel = R->xa[XA_CLIPBOARD];
if (XGetSelectionOwner(R->Xdisplay, sel) != None) {
- D_SELECT((stderr, "rxvt_selection_request_other: pasting %s", debug_xa_names[selnum]));
- XConvertSelection(R->Xdisplay, sel, target, R->xa[XA_VT_SELECTION],
- R->TermWin.vt, R->selection_request_time);
- return 1;
+ D_SELECT((stderr, "rxvt_selection_request_other: pasting %s", debug_xa_names[selnum]));
+ XConvertSelection(R->Xdisplay, sel, target, R->xa[XA_VT_SELECTION],
+ R->TermWin.vt, R->selection_request_time);
+ return 1;
}
return 0;
}
R->want_refresh = 1;
if (R->selection.text)
- free(R->selection.text);
+ free(R->selection.text);
R->selection.text = NULL;
R->selection.len = 0;
CLEAR_SELECTION(R);
D_SELECT((stderr, "rxvt_selection_make(): R->selection.op=%d, R->selection.clicks=%d", R->selection.op, R->selection.clicks));
switch (R->selection.op) {
case SELECTION_CONT:
- break;
+ break;
case SELECTION_INIT:
- CLEAR_SELECTION(R);
+ CLEAR_SELECTION(R);
/* FALLTHROUGH */
case SELECTION_BEGIN:
- R->selection.op = SELECTION_DONE;
+ R->selection.op = SELECTION_DONE;
/* FALLTHROUGH */
default:
- return;
+ return;
}
R->selection.op = SELECTION_DONE;
if (R->selection.clicks == 4)
- return; /* nothing selected, go away */
+ return; /* nothing selected, go away */
i = (R->selection.end.row - R->selection.beg.row + 1) * (R->TermWin.ncol + 1) + 1;
str = (char *)rxvt_malloc(i * MB_CUR_MAX + 1);
for (; row <= end_row; row++, col = 0)
{
- t = &(R->screen.text[row][col]);
+ t = &(R->screen.text[row][col]);
end_col = R->screen.tlen[row];
if (end_col == -1)
- end_col = R->TermWin.ncol;
+ end_col = R->TermWin.ncol;
if (row == end_row)
MIN_IT (end_col, R->selection.end.col);
- for (; col < end_col; col++)
+ for (; col < end_col; col++)
if (*t == NOCHAR)
t++;
else
str += len;
}
- if (R->screen.tlen[row] != -1 && row != end_row)
- *str++ = '\n';
+ if (R->screen.tlen[row] != -1 && row != end_row)
+ *str++ = '\n';
}
#ifndef NO_OLD_SELECTION
if (R->selection_style == OLD_SELECT)
- if (end_col == R->TermWin.ncol)
- *str++ = '\n';
+ if (end_col == R->TermWin.ncol)
+ *str++ = '\n';
#endif
#ifndef NO_NEW_SELECTION
if (R->selection_style != OLD_SELECT)
- if (end_col != R->selection.end.col)
- *str++ = '\n';
+ if (end_col != R->selection.end.col)
+ *str++ = '\n';
#endif
*str = '\0';
i = str - (char *)new_selection_text;
if (i == 0)
{
- free (new_selection_text);
- return;
+ free (new_selection_text);
+ return;
}
// due to MB_MAX_CUR, selection wastage is usually high
R->selection.len = i;
if (R->selection.text)
- free (R->selection.text);
+ free (R->selection.text);
R->selection.text = new_selection_text;
XSetSelectionOwner(R->Xdisplay, XA_PRIMARY, R->TermWin.vt, tm);
if (XGetSelectionOwner(R->Xdisplay, XA_PRIMARY) != R->TermWin.vt)
- rxvt_print_error("can't get primary selection");
+ rxvt_print_error("can't get primary selection");
XChangeProperty(R->Xdisplay, Xroot, XA_CUT_BUFFER0, XA_STRING, 8,
- PropModeReplace, R->selection.text, (int)R->selection.len);
+ PropModeReplace, R->selection.text, (int)R->selection.len);
R->selection_time = tm;
D_SELECT((stderr, "rxvt_selection_make(): R->selection.len=%d", R->selection.len));
}
D_SELECT((stderr, "rxvt_selection_click(%d, %d, %d)", clicks, x, y));
clicks = ((clicks - 1) % 3) + 1;
- R->selection.clicks = clicks; /* save clicks so extend will work */
+ R->selection.clicks = clicks; /* save clicks so extend will work */
rxvt_selection_start_colrow(aR_ Pixel2Col(x), Pixel2Row(y));
if (clicks == 2 || clicks == 3)
- rxvt_selection_extend_colrow(aR_ R->selection.mark.col,
- R->selection.mark.row
- + R->TermWin.view_start,
- 0, /* button 3 */
- 1, /* button press */
- 0); /* click change */
+ rxvt_selection_extend_colrow(aR_ R->selection.mark.col,
+ R->selection.mark.row
+ + R->TermWin.view_start,
+ 0, /* button 3 */
+ 1, /* button press */
+ 0); /* click change */
}
/* ------------------------------------------------------------------------- */
MAX_IT(R->selection.mark.col, 0);
MIN_IT(R->selection.mark.col, (int32_t)R->TermWin.ncol - 1);
- if (R->selection.op) { /* clear the old selection */
- R->selection.beg.row = R->selection.end.row = R->selection.mark.row;
- R->selection.beg.col = R->selection.end.col = R->selection.mark.col;
+ if (R->selection.op) { /* clear the old selection */
+ R->selection.beg.row = R->selection.end.row = R->selection.mark.row;
+ R->selection.beg.col = R->selection.end.col = R->selection.mark.col;
}
R->selection.op = SELECTION_INIT;
R->selection.screen = R->current_screen;
#define DELIMIT_TEXT(x) \
(((x) == ' ' || (x) == '\t') ? 2 : (STRCHR(R->rs[Rs_cutchars], (x)) != NULL))
#ifdef MULTICHAR_SET
-# define DELIMIT_REND(x) (((x) & RS_multiMask) ? 1 : 0)
+# define DELIMIT_REND(x) (((x) & RS_multiMask) ? 1 : 0)
#else
-# define DELIMIT_REND(x) 1
+# define DELIMIT_REND(x) 1
#endif
/* INTPROTO */
rend_t *srp;
if (dirn == UP) {
- bound.row = R->TermWin.saveLines - R->TermWin.nscrolled - 1;
- bound.col = 0;
- dirnadd = -1;
+ bound.row = R->TermWin.saveLines - R->TermWin.nscrolled - 1;
+ bound.col = 0;
+ dirnadd = -1;
} else {
- bound.row = R->TermWin.saveLines + R->TermWin.nrow;
- bound.col = R->TermWin.ncol - 1;
- dirnadd = 1;
+ bound.row = R->TermWin.saveLines + R->TermWin.nrow;
+ bound.col = R->TermWin.ncol - 1;
+ dirnadd = 1;
}
row = mark->row + R->TermWin.saveLines;
col = mark->col;
w1 = DELIMIT_TEXT(*stp);
if (R->selection_style != NEW_SELECT) {
- if (w1 == 1) {
- stp += dirnadd;
- if (DELIMIT_TEXT(*stp) == 1)
- goto Old_Word_Selection_You_Die;
- col += dirnadd;
- }
- w1 = 0;
+ if (w1 == 1) {
+ stp += dirnadd;
+ if (DELIMIT_TEXT(*stp) == 1)
+ goto Old_Word_Selection_You_Die;
+ col += dirnadd;
+ }
+ w1 = 0;
}
srp = (&R->screen.rend[row][col]);
w2 = DELIMIT_REND(*srp);
for (;;) {
- for (; col != bound.col; col += dirnadd) {
- stp += dirnadd;
- if (DELIMIT_TEXT(*stp) != w1)
- break;
- srp += dirnadd;
- if (DELIMIT_REND(*srp) != w2)
- break;
- }
- if ((col == bound.col) && (row != bound.row)) {
- if (R->screen.tlen[(row - (dirn == UP ? 1 : 0))] == -1) {
- trow = row + dirnadd;
- tcol = dirn == UP ? R->TermWin.ncol - 1 : 0;
- if (R->screen.text[trow] == NULL)
- break;
- stp = &(R->screen.text[trow][tcol]);
- srp = &(R->screen.rend[trow][tcol]);
- if (DELIMIT_TEXT(*stp) != w1 || DELIMIT_REND(*srp) != w2)
- break;
- row = trow;
- col = tcol;
- continue;
- }
- }
- break;
+ for (; col != bound.col; col += dirnadd) {
+ stp += dirnadd;
+ if (DELIMIT_TEXT(*stp) != w1)
+ break;
+ srp += dirnadd;
+ if (DELIMIT_REND(*srp) != w2)
+ break;
+ }
+ if ((col == bound.col) && (row != bound.row)) {
+ if (R->screen.tlen[(row - (dirn == UP ? 1 : 0))] == -1) {
+ trow = row + dirnadd;
+ tcol = dirn == UP ? R->TermWin.ncol - 1 : 0;
+ if (R->screen.text[trow] == NULL)
+ break;
+ stp = &(R->screen.text[trow][tcol]);
+ srp = &(R->screen.rend[trow][tcol]);
+ if (DELIMIT_TEXT(*stp) != w1 || DELIMIT_REND(*srp) != w2)
+ break;
+ row = trow;
+ col = tcol;
+ continue;
+ }
+ }
+ break;
}
Old_Word_Selection_You_Die:
- D_SELECT((stderr, "rxvt_selection_delimit_word(%s,...) @ (r:%3d, c:%3d) has boundary (r:%3d, c:%3d)", (dirn == UP ? "up " : "down"), mark->row, mark->col, row - R->TermWin.saveLines, col));
+ D_SELECT((stderr, "rxvt_selection_delimit_word(%s,...) @ (r:%3d, c:%3d) has boundary (r:%3d, c:%3d)", (dirn == UP ? "up " : "down"), mark->row, mark->col, row - R->TermWin.saveLines, col));
if (dirn == DN)
- col++; /* put us on one past the end */
+ col++; /* put us on one past the end */
/* Poke the values back in */
ret->row = row - R->TermWin.saveLines;
* be _past_ a character for it to be selected.
*/
if (R->selection_style != OLD_SELECT) {
- if (((R->selection.clicks % 3) == 1) && !flag
- && (col == R->selection.mark.col
- && (row == R->selection.mark.row + R->TermWin.view_start))) {
- /* select nothing */
- R->selection.beg.row = R->selection.end.row = 0;
- R->selection.beg.col = R->selection.end.col = 0;
- R->selection.clicks = 4;
- R->want_refresh = 1;
- D_SELECT((stderr, "rxvt_selection_extend() R->selection.clicks = 4"));
- return;
- }
+ if (((R->selection.clicks % 3) == 1) && !flag
+ && (col == R->selection.mark.col
+ && (row == R->selection.mark.row + R->TermWin.view_start))) {
+ /* select nothing */
+ R->selection.beg.row = R->selection.end.row = 0;
+ R->selection.beg.col = R->selection.end.col = 0;
+ R->selection.clicks = 4;
+ R->want_refresh = 1;
+ D_SELECT((stderr, "rxvt_selection_extend() R->selection.clicks = 4"));
+ return;
+ }
}
#endif
if (R->selection.clicks == 4)
- R->selection.clicks = 1;
- rxvt_selection_extend_colrow(aR_ col, row, !!flag, /* ? button 3 */
- flag == 1 ? 1 : 0, /* ? button press */
- 0); /* no click change */
+ R->selection.clicks = 1;
+ rxvt_selection_extend_colrow(aR_ col, row, !!flag, /* ? button 3 */
+ flag == 1 ? 1 : 0, /* ? button press */
+ 0); /* no click change */
}
/* ------------------------------------------------------------------------- */
int end_col;
row_col_t pos;
enum {
- LEFT, RIGHT
+ LEFT, RIGHT
} closeto = RIGHT;
D_SELECT((stderr, "rxvt_selection_extend_colrow(c:%d, r:%d, %d, %d) clicks:%d, op:%d", col, row, button3, buttonpress, R->selection.clicks, R->selection.op));
R->want_refresh = 1;
switch (R->selection.op) {
case SELECTION_INIT:
- CLEAR_SELECTION(R);
- R->selection.op = SELECTION_BEGIN;
+ CLEAR_SELECTION(R);
+ R->selection.op = SELECTION_BEGIN;
/* FALLTHROUGH */
case SELECTION_BEGIN:
- if (row != R->selection.mark.row || col != R->selection.mark.col
- || (!button3 && buttonpress))
- R->selection.op = SELECTION_CONT;
- break;
+ if (row != R->selection.mark.row || col != R->selection.mark.col
+ || (!button3 && buttonpress))
+ R->selection.op = SELECTION_CONT;
+ break;
case SELECTION_DONE:
- R->selection.op = SELECTION_CONT;
+ R->selection.op = SELECTION_CONT;
/* FALLTHROUGH */
case SELECTION_CONT:
- break;
+ break;
case SELECTION_CLEAR:
- rxvt_selection_start_colrow(aR_ col, row);
+ rxvt_selection_start_colrow(aR_ col, row);
/* FALLTHROUGH */
default:
- return;
+ return;
}
if (R->selection.beg.col == R->selection.end.col
- && R->selection.beg.col != R->selection.mark.col
- && R->selection.beg.row == R->selection.end.row
- && R->selection.beg.row != R->selection.mark.row) {
- R->selection.beg.col = R->selection.end.col = R->selection.mark.col;
- R->selection.beg.row = R->selection.end.row = R->selection.mark.row;
- D_SELECT((stderr, "rxvt_selection_extend_colrow() ENT2 b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col));
+ && R->selection.beg.col != R->selection.mark.col
+ && R->selection.beg.row == R->selection.end.row
+ && R->selection.beg.row != R->selection.mark.row) {
+ R->selection.beg.col = R->selection.end.col = R->selection.mark.col;
+ R->selection.beg.row = R->selection.end.row = R->selection.mark.row;
+ D_SELECT((stderr, "rxvt_selection_extend_colrow() ENT2 b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col));
}
pos.col = col;
pos.row = row;
- pos.row -= R->TermWin.view_start; /* adjust for scroll */
+ pos.row -= R->TermWin.view_start; /* adjust for scroll */
#ifndef NO_OLD_SELECTION
/*
* Selection always terminates (left or right as appropriate) at the mark.
*/
if (R->selection_style == OLD_SELECT) {
- if (R->selection.clicks == 1 || button3) {
- if (R->hate_those_clicks) {
- R->hate_those_clicks = 0;
- if (R->selection.clicks == 1) {
- R->selection.beg.row = R->selection.mark.row;
- R->selection.beg.col = R->selection.mark.col;
- } else {
- R->selection.mark.row = R->selection.beg.row;
- R->selection.mark.col = R->selection.beg.col;
- }
- }
- if (ROWCOL_IS_BEFORE(pos, R->selection.mark)) {
- R->selection.end.row = R->selection.mark.row;
- R->selection.end.col = R->selection.mark.col + 1;
- R->selection.beg.row = pos.row;
- R->selection.beg.col = pos.col;
- } else {
- R->selection.beg.row = R->selection.mark.row;
- R->selection.beg.col = R->selection.mark.col;
- R->selection.end.row = pos.row;
- R->selection.end.col = pos.col + 1;
- }
- } else if (R->selection.clicks == 2) {
- rxvt_selection_delimit_word(aR_ UP, &(R->selection.mark),
- &(R->selection.beg));
- rxvt_selection_delimit_word(aR_ DN, &(R->selection.mark),
- &(R->selection.end));
- R->hate_those_clicks = 1;
- } else if (R->selection.clicks == 3) {
- R->selection.beg.row = R->selection.end.row = R->selection.mark.row;
- R->selection.beg.col = 0;
- R->selection.end.col = ncol;
- R->hate_those_clicks = 1;
- }
- D_SELECT((stderr, "rxvt_selection_extend_colrow() EXIT b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col));
- return;
+ if (R->selection.clicks == 1 || button3) {
+ if (R->hate_those_clicks) {
+ R->hate_those_clicks = 0;
+ if (R->selection.clicks == 1) {
+ R->selection.beg.row = R->selection.mark.row;
+ R->selection.beg.col = R->selection.mark.col;
+ } else {
+ R->selection.mark.row = R->selection.beg.row;
+ R->selection.mark.col = R->selection.beg.col;
+ }
+ }
+ if (ROWCOL_IS_BEFORE(pos, R->selection.mark)) {
+ R->selection.end.row = R->selection.mark.row;
+ R->selection.end.col = R->selection.mark.col + 1;
+ R->selection.beg.row = pos.row;
+ R->selection.beg.col = pos.col;
+ } else {
+ R->selection.beg.row = R->selection.mark.row;
+ R->selection.beg.col = R->selection.mark.col;
+ R->selection.end.row = pos.row;
+ R->selection.end.col = pos.col + 1;
+ }
+ } else if (R->selection.clicks == 2) {
+ rxvt_selection_delimit_word(aR_ UP, &(R->selection.mark),
+ &(R->selection.beg));
+ rxvt_selection_delimit_word(aR_ DN, &(R->selection.mark),
+ &(R->selection.end));
+ R->hate_those_clicks = 1;
+ } else if (R->selection.clicks == 3) {
+ R->selection.beg.row = R->selection.end.row = R->selection.mark.row;
+ R->selection.beg.col = 0;
+ R->selection.end.col = ncol;
+ R->hate_those_clicks = 1;
+ }
+ D_SELECT((stderr, "rxvt_selection_extend_colrow() EXIT b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col));
+ return;
}
-#endif /* ! NO_OLD_SELECTION */
+#endif /* ! NO_OLD_SELECTION */
#ifndef NO_NEW_SELECTION
/* selection_style must not be OLD_SELECT to get here */
/*
* and it was decided by whichever point/word/line was `fixed' at the
* time of the most recent button3 press
*/
- if (button3 && buttonpress) { /* button3 press */
- /*
- * first determine which edge of the selection we are closest to
- */
- if (ROWCOL_IS_BEFORE(pos, R->selection.beg)
- || (!ROWCOL_IS_AFTER(pos, R->selection.end)
- && (((pos.col - R->selection.beg.col)
- + ((pos.row - R->selection.beg.row) * ncol))
- < ((R->selection.end.col - pos.col)
- + ((R->selection.end.row - pos.row) * ncol)))))
- closeto = LEFT;
- if (closeto == LEFT) {
- R->selection.beg.row = pos.row;
- R->selection.beg.col = pos.col;
- R->selection.mark.row = R->selection.end.row;
- R->selection.mark.col = R->selection.end.col
- - (R->selection.clicks == 2);
- } else {
- R->selection.end.row = pos.row;
- R->selection.end.col = pos.col;
- R->selection.mark.row = R->selection.beg.row;
- R->selection.mark.col = R->selection.beg.col;
- }
- } else { /* button1 drag or button3 drag */
- if (ROWCOL_IS_AFTER(R->selection.mark, pos)) {
- if ((R->selection.mark.row == R->selection.end.row)
- && (R->selection.mark.col == R->selection.end.col)
- && clickchange && R->selection.clicks == 2)
- R->selection.mark.col--;
- R->selection.beg.row = pos.row;
- R->selection.beg.col = pos.col;
- R->selection.end.row = R->selection.mark.row;
- R->selection.end.col = R->selection.mark.col
- + (R->selection.clicks == 2);
- } else {
- R->selection.beg.row = R->selection.mark.row;
- R->selection.beg.col = R->selection.mark.col;
- R->selection.end.row = pos.row;
- R->selection.end.col = pos.col;
- }
+ if (button3 && buttonpress) { /* button3 press */
+ /*
+ * first determine which edge of the selection we are closest to
+ */
+ if (ROWCOL_IS_BEFORE(pos, R->selection.beg)
+ || (!ROWCOL_IS_AFTER(pos, R->selection.end)
+ && (((pos.col - R->selection.beg.col)
+ + ((pos.row - R->selection.beg.row) * ncol))
+ < ((R->selection.end.col - pos.col)
+ + ((R->selection.end.row - pos.row) * ncol)))))
+ closeto = LEFT;
+ if (closeto == LEFT) {
+ R->selection.beg.row = pos.row;
+ R->selection.beg.col = pos.col;
+ R->selection.mark.row = R->selection.end.row;
+ R->selection.mark.col = R->selection.end.col
+ - (R->selection.clicks == 2);
+ } else {
+ R->selection.end.row = pos.row;
+ R->selection.end.col = pos.col;
+ R->selection.mark.row = R->selection.beg.row;
+ R->selection.mark.col = R->selection.beg.col;
+ }
+ } else { /* button1 drag or button3 drag */
+ if (ROWCOL_IS_AFTER(R->selection.mark, pos)) {
+ if ((R->selection.mark.row == R->selection.end.row)
+ && (R->selection.mark.col == R->selection.end.col)
+ && clickchange && R->selection.clicks == 2)
+ R->selection.mark.col--;
+ R->selection.beg.row = pos.row;
+ R->selection.beg.col = pos.col;
+ R->selection.end.row = R->selection.mark.row;
+ R->selection.end.col = R->selection.mark.col
+ + (R->selection.clicks == 2);
+ } else {
+ R->selection.beg.row = R->selection.mark.row;
+ R->selection.beg.col = R->selection.mark.col;
+ R->selection.end.row = pos.row;
+ R->selection.end.col = pos.col;
+ }
}
if (R->selection.clicks == 1) {
- end_col = R->screen.tlen[R->selection.beg.row + R->TermWin.saveLines];
- if (end_col != -1 && R->selection.beg.col > end_col) {
+ end_col = R->screen.tlen[R->selection.beg.row + R->TermWin.saveLines];
+ if (end_col != -1 && R->selection.beg.col > end_col) {
#if 1
- R->selection.beg.col = ncol;
+ R->selection.beg.col = ncol;
#else
- if (R->selection.beg.row != R->selection.end.row)
- R->selection.beg.col = ncol;
- else
- R->selection.beg.col = R->selection.mark.col;
+ if (R->selection.beg.row != R->selection.end.row)
+ R->selection.beg.col = ncol;
+ else
+ R->selection.beg.col = R->selection.mark.col;
#endif
- }
- end_col = R->screen.tlen[R->selection.end.row + R->TermWin.saveLines];
- if (end_col != -1 && R->selection.end.col > end_col)
- R->selection.end.col = ncol;
+ }
+ end_col = R->screen.tlen[R->selection.end.row + R->TermWin.saveLines];
+ if (end_col != -1 && R->selection.end.col > end_col)
+ R->selection.end.col = ncol;
} else if (R->selection.clicks == 2) {
- if (ROWCOL_IS_AFTER(R->selection.end, R->selection.beg))
- R->selection.end.col--;
- rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg),
- &(R->selection.beg));
- rxvt_selection_delimit_word(aR_ DN, &(R->selection.end),
- &(R->selection.end));
+ if (ROWCOL_IS_AFTER(R->selection.end, R->selection.beg))
+ R->selection.end.col--;
+ rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg),
+ &(R->selection.beg));
+ rxvt_selection_delimit_word(aR_ DN, &(R->selection.end),
+ &(R->selection.end));
} else if (R->selection.clicks == 3) {
#ifndef NO_FRILLS
- if ((R->Options & Opt_tripleclickwords)) {
- int end_row;
-
- rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg),
- &(R->selection.beg));
- end_row = R->screen.tlen[R->selection.mark.row
- + R->TermWin.saveLines];
- for (end_row = R->selection.mark.row; end_row < R->TermWin.nrow;
- end_row++) {
- end_col = R->screen.tlen[end_row + R->TermWin.saveLines];
- if (end_col != -1) {
- R->selection.end.row = end_row;
- R->selection.end.col = end_col;
- rxvt_selection_remove_trailing_spaces(aR);
- break;
- }
- }
- } else
-#endif
- {
- if (ROWCOL_IS_AFTER(R->selection.mark, R->selection.beg))
- R->selection.mark.col++;
- R->selection.beg.col = 0;
- R->selection.end.col = ncol;
- }
+ if ((R->Options & Opt_tripleclickwords)) {
+ int end_row;
+
+ rxvt_selection_delimit_word(aR_ UP, &(R->selection.beg),
+ &(R->selection.beg));
+ end_row = R->screen.tlen[R->selection.mark.row
+ + R->TermWin.saveLines];
+ for (end_row = R->selection.mark.row; end_row < R->TermWin.nrow;
+ end_row++) {
+ end_col = R->screen.tlen[end_row + R->TermWin.saveLines];
+ if (end_col != -1) {
+ R->selection.end.row = end_row;
+ R->selection.end.col = end_col;
+ rxvt_selection_remove_trailing_spaces(aR);
+ break;
+ }
+ }
+ } else
+#endif
+ {
+ if (ROWCOL_IS_AFTER(R->selection.mark, R->selection.beg))
+ R->selection.mark.col++;
+ R->selection.beg.col = 0;
+ R->selection.end.col = ncol;
+ }
}
- if (button3 && buttonpress) { /* mark may need to be changed */
- if (closeto == LEFT) {
- R->selection.mark.row = R->selection.end.row;
- R->selection.mark.col = R->selection.end.col
- - (R->selection.clicks == 2);
- } else {
- R->selection.mark.row = R->selection.beg.row;
- R->selection.mark.col = R->selection.beg.col;
- }
+ if (button3 && buttonpress) { /* mark may need to be changed */
+ if (closeto == LEFT) {
+ R->selection.mark.row = R->selection.end.row;
+ R->selection.mark.col = R->selection.end.col
+ - (R->selection.clicks == 2);
+ } else {
+ R->selection.mark.row = R->selection.beg.row;
+ R->selection.mark.col = R->selection.beg.col;
+ }
}
D_SELECT((stderr, "rxvt_selection_extend_colrow() EXIT b:(r:%d,c:%d) m:(r:%d,c:%d), e:(r:%d,c:%d)", R->selection.beg.row, R->selection.beg.col, R->selection.mark.row, R->selection.mark.col, R->selection.end.row, R->selection.end.col));
-#endif /* ! NO_NEW_SELECTION */
+#endif /* ! NO_NEW_SELECTION */
}
#ifndef NO_FRILLS
end_col = R->selection.end.col;
end_row = R->selection.end.row;
for ( ; end_row >= R->selection.beg.row; ) {
- stp = R->screen.text[end_row + R->TermWin.saveLines];
- while (--end_col >= 0) {
- if (stp[end_col] != ' ' && stp[end_col] != '\t')
- break;
- }
- if (end_col >= 0
- || R->screen.tlen[end_row - 1 + R->TermWin.saveLines] != -1) {
- R->selection.end.col = end_col + 1;
- R->selection.end.row = end_row;
- break;
- }
- end_row--;
- end_col = R->TermWin.ncol;
+ stp = R->screen.text[end_row + R->TermWin.saveLines];
+ while (--end_col >= 0) {
+ if (stp[end_col] != ' ' && stp[end_col] != '\t')
+ break;
+ }
+ if (end_col >= 0
+ || R->screen.tlen[end_row - 1 + R->TermWin.saveLines] != -1) {
+ R->selection.end.col = end_col + 1;
+ R->selection.end.row = end_row;
+ break;
+ }
+ end_row--;
+ end_col = R->TermWin.ncol;
}
if (R->selection.mark.row > R->selection.end.row) {
- R->selection.mark.row = R->selection.end.row;
- R->selection.mark.col = R->selection.end.col;
+ R->selection.mark.row = R->selection.end.row;
+ R->selection.mark.col = R->selection.end.col;
} else if (R->selection.mark.row == R->selection.end.row
- && R->selection.mark.col > R->selection.end.col)
- R->selection.mark.col = R->selection.end.col;
+ && R->selection.mark.col > R->selection.end.col)
+ R->selection.mark.col = R->selection.end.col;
}
#endif
ev.time = rq->time;
if (rq->target == R->xa[XA_TARGETS]) {
- target_list[0] = (Atom32) R->xa[XA_TARGETS];
- target_list[1] = (Atom32) XA_STRING;
- target_list[2] = (Atom32) R->xa[XA_TEXT];
+ target_list[0] = (Atom32) R->xa[XA_TARGETS];
+ target_list[1] = (Atom32) XA_STRING;
+ target_list[2] = (Atom32) R->xa[XA_TEXT];
#ifdef USE_XIM
- target_list[3] = (Atom32) R->xa[XA_COMPOUND_TEXT];
+ target_list[3] = (Atom32) R->xa[XA_COMPOUND_TEXT];
#endif
- XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_ATOM,
- (8 * sizeof(target_list[0])), PropModeReplace,
- (unsigned char *)target_list,
- (sizeof(target_list) / sizeof(target_list[0])));
- ev.property = rq->property;
+ XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_ATOM,
+ (8 * sizeof(target_list[0])), PropModeReplace,
+ (unsigned char *)target_list,
+ (sizeof(target_list) / sizeof(target_list[0])));
+ ev.property = rq->property;
} else if (rq->target == R->xa[XA_MULTIPLE]) {
- /* TODO: Handle MULTIPLE */
+ /* TODO: Handle MULTIPLE */
} else if (rq->target == R->xa[XA_TIMESTAMP] && R->selection.text) {
- XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_INTEGER,
- (8 * sizeof(Time)), PropModeReplace,
- (unsigned char *)&R->selection_time, 1);
- ev.property = rq->property;
+ XChangeProperty(R->Xdisplay, rq->requestor, rq->property, XA_INTEGER,
+ (8 * sizeof(Time)), PropModeReplace,
+ (unsigned char *)&R->selection_time, 1);
+ ev.property = rq->property;
} else if (rq->target == XA_STRING
- || rq->target == R->xa[XA_COMPOUND_TEXT]
- || rq->target == R->xa[XA_TEXT]) {
+ || rq->target == R->xa[XA_COMPOUND_TEXT]
+ || rq->target == R->xa[XA_TEXT]) {
#ifdef USE_XIM
- short freect = 0;
+ short freect = 0;
#endif
- int selectlen;
+ int selectlen;
#ifdef USE_XIM
- if (rq->target != XA_STRING) {
- target = R->xa[XA_COMPOUND_TEXT];
- style = (rq->target == R->xa[XA_COMPOUND_TEXT])
- ? XCompoundTextStyle : XStdICCTextStyle;
- } else
-#endif
- {
- target = XA_STRING;
- style = XStringStyle;
- }
- if (R->selection.text) {
- cl[0] = (char *)R->selection.text;
- selectlen = R->selection.len;
- } else {
- cl[0] = dummy;
- *dummy = '\0';
- selectlen = 0;
- }
+ if (rq->target != XA_STRING) {
+ target = R->xa[XA_COMPOUND_TEXT];
+ style = (rq->target == R->xa[XA_COMPOUND_TEXT])
+ ? XCompoundTextStyle : XStdICCTextStyle;
+ } else
+#endif
+ {
+ target = XA_STRING;
+ style = XStringStyle;
+ }
+ if (R->selection.text) {
+ cl[0] = (char *)R->selection.text;
+ selectlen = R->selection.len;
+ } else {
+ cl[0] = dummy;
+ *dummy = '\0';
+ selectlen = 0;
+ }
#ifdef USE_XIM
- if (XmbTextListToTextProperty(R->Xdisplay, cl, 1, style, &ct)
- == Success) /* if we failed to convert then send it raw */
- freect = 1;
- else
-#endif
- {
- ct.value = (unsigned char *)cl[0];
- ct.nitems = selectlen;
- }
- XChangeProperty(R->Xdisplay, rq->requestor, rq->property,
- target, 8, PropModeReplace,
- ct.value, (int)ct.nitems);
- ev.property = rq->property;
+ if (XmbTextListToTextProperty(R->Xdisplay, cl, 1, style, &ct)
+ == Success) /* if we failed to convert then send it raw */
+ freect = 1;
+ else
+#endif
+ {
+ ct.value = (unsigned char *)cl[0];
+ ct.nitems = selectlen;
+ }
+ XChangeProperty(R->Xdisplay, rq->requestor, rq->property,
+ target, 8, PropModeReplace,
+ ct.value, (int)ct.nitems);
+ ev.property = rq->property;
#ifdef USE_XIM
- if (freect)
- XFree(ct.value);
+ if (freect)
+ XFree(ct.value);
#endif
}
XSendEvent(R->Xdisplay, rq->requestor, False, 0L, (XEvent *)&ev);
XGetWindowAttributes(R->Xdisplay, R->TermWin.vt, &xwa);
pos->x = Col2Pixel(R->screen.cur.col) + xwa.x;
pos->y = Height2Pixel((R->screen.cur.row + 1)) + xwa.y
- - R->TermWin.lineSpace;
+ - R->TermWin.lineSpace;
}
#endif
/* ------------------------------------------------------------------------- */
{
int color;
const char *name[] = {
- "fg", "bg",
- "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"
+ "fg", "bg",
+ "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white"
};
fprintf(stderr, "Color ( ");
if (R->rstyle & RS_RVid)
- fprintf(stderr, "rvid ");
+ fprintf(stderr, "rvid ");
if (R->rstyle & RS_Bold)
- fprintf(stderr, "bold ");
+ fprintf(stderr, "bold ");
if (R->rstyle & RS_Blink)
- fprintf(stderr, "blink ");
+ fprintf(stderr, "blink ");
if (R->rstyle & RS_Uline)
- fprintf(stderr, "uline ");
+ fprintf(stderr, "uline ");
fprintf(stderr, "): ");
color = GET_FGCOLOR(R->rstyle);
#ifndef NO_BRIGHTCOLOR
if (color >= minBrightCOLOR && color <= maxBrightCOLOR) {
- color -= (minBrightCOLOR - minCOLOR);
- fprintf(stderr, "bright ");
+ color -= (minBrightCOLOR - minCOLOR);
+ fprintf(stderr, "bright ");
}
#endif
fprintf(stderr, "%s on ", name[color]);
color = GET_BGCOLOR(R->rstyle);
#ifndef NO_BRIGHTCOLOR
if (color >= minBrightCOLOR && color <= maxBrightCOLOR) {
- color -= (minBrightCOLOR - minCOLOR);
- fprintf(stderr, "bright ");
+ color -= (minBrightCOLOR - minCOLOR);
+ fprintf(stderr, "bright ");
}
#endif
fprintf(stderr, "%s\n", name[color]);