Enlightenment CVS committal Author : mej Project : eterm Module : Eterm
Dir : eterm/Eterm/src Modified Files: Tag: ETERM-0_10 Makefile.am command.c defaultfont.c events.c feature.h misc.c misc.h options.c options.h screen.c screen.h startup.c startup.h term.c windows.c Log Message: Tue Mar 15 17:29:24 2005 Michael Jennings (mej) Big-ass merge. ---------------------------------------------------------------------- =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/Makefile.am,v retrieving revision 1.27.2.1 retrieving revision 1.27.2.2 diff -u -3 -r1.27.2.1 -r1.27.2.2 --- Makefile.am 9 May 2002 15:31:19 -0000 1.27.2.1 +++ Makefile.am 15 Mar 2005 22:32:19 -0000 1.27.2.2 @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.27.2.1 2002/05/09 15:31:19 mej Exp $ +# $Id: Makefile.am,v 1.27.2.2 2005/03/15 22:32:19 mej Exp $ lib_LTLIBRARIES = libEterm.la bin_PROGRAMS = Eterm @@ -32,6 +32,7 @@ Eterm_LDADD = libEterm.la EXTRA_DIST = mmx_cmod.S +MAINTAINERCLEANFILES=Makefile.in install-exec-hook: $(mkinstalldirs) $(DESTDIR)$(pkgdatadir) =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/command.c,v retrieving revision 1.69.2.10 retrieving revision 1.69.2.11 diff -u -3 -r1.69.2.10 -r1.69.2.11 --- command.c 15 Jul 2004 19:57:51 -0000 1.69.2.10 +++ command.c 15 Mar 2005 22:32:34 -0000 1.69.2.11 @@ -34,7 +34,7 @@ * he guarantee anything whatsoever. *----------------------------------------------------------------------*/ -static const char cvs_ident[] = "$Id: command.c,v 1.69.2.10 2004/07/15 19:57:51 mej Exp $"; +static const char cvs_ident[] = "$Id: command.c,v 1.69.2.11 2005/03/15 22:32:34 mej Exp $"; /* includes: */ #include "config.h" @@ -107,6 +107,12 @@ #if defined(linux) # include <linux/tty.h> /* For N_TTY_BUF_SIZE. */ #endif +#ifdef MULTI_CHARSET +# include <locale.h> +# include <langinfo.h> +# include <iconv.h> +# include <wchar.h> +#endif /* Eterm-specific Headers */ #include "command.h" @@ -3464,9 +3470,7 @@ if (ch >= ' ' || ch == '\t' || ch == '\n' || ch == '\r') { /* Read a text string from the input buffer */ int nlines = 0; - - /* unsigned char * str; */ - register unsigned char *str; + unsigned char *str; D_CMD(("Command buffer contains %d characters.\n", cmdbuf_endp - cmdbuf_ptr)); D_VT(("\n%s\n\n", safe_print_string(cmdbuf_ptr - 1, cmdbuf_endp - cmdbuf_ptr + 1))); @@ -3489,18 +3493,97 @@ } #endif if (ch >= ' ' || ch == '\t' || ch == '\r') { - /* nothing */ + NOP; } else if (ch == '\n') { nlines++; if (++refresh_count >= (refresh_limit * (TERM_WINDOW_GET_ROWS() - 1))) break; - } else { /* unprintable */ + } else { + /* unprintable */ cmdbuf_ptr--; break; } } - D_SCREEN(("Adding %d lines (%d chars); str == %8p, cmdbuf_ptr == %8p, cmdbuf_endp == %8p\n", nlines, cmdbuf_ptr - str, str, cmdbuf_ptr, cmdbuf_endp)); - scr_add_lines(str, nlines, (cmdbuf_ptr - str)); + D_SCREEN(("Adding %d lines (%d chars); str == %8p, cmdbuf_ptr == %8p, cmdbuf_endp == %8p\n", + nlines, cmdbuf_ptr - str, str, cmdbuf_ptr, cmdbuf_endp)); +#if FIXME_BLOCK + /* + * iconv() is not my friend. :-( I've tried various things + * to make this work (including UCS2, SJIS, EUCJ, and + * WCHAR_T), but nothing has worked. I'm obviously + * missing something, so if you know what, kindly throw me + * a clue. :-) -- mej + */ + if (!strcmp(nl_langinfo(CODESET), "UTF-8")) { + iconv_t handle; + + if (encoding_method != UCS2) { + set_multichar_encoding("utf8"); + } + handle = iconv_open("WCHAR_T", "UTF-8"); + if (handle == SPIF_CAST_C(iconv_t) -1) { + print_error("Unable to decode UTF-8 locale %s to WCHAR_T. Defaulting to portable C locale.\n", + setlocale(LC_ALL, "")); + setlocale(LC_ALL, "C"); + scr_add_lines(str, nlines, (cmdbuf_ptr - str)); + } else { + char *outbuff, *pinbuff, *poutbuff; + wchar_t *wcbuff; + mbstate_t mbs; + size_t bufflen, outlen = 0, retval; + + pinbuff = (char *) str; + bufflen = cmdbuf_ptr - str; + outlen = bufflen * 6; + poutbuff = outbuff = SPIF_CAST_C(char *) MALLOC(outlen); + errno = 0; + D_VT(("Allocated output buffer of %lu chars at %010p against input buffer of %lu\n", bufflen * 6, outbuff, bufflen)); + print_warning("Moo: %s\n", safe_print_string(str, bufflen)); + retval = iconv(handle, &pinbuff, &bufflen, &poutbuff, &outlen); + outlen = (size_t) (poutbuff - outbuff); + if (retval != (size_t) -1) { + errno = 0; + } + if (errno == E2BIG) { + print_error("My UTF-8 decode buffer was too small by %lu bytes?!\n", bufflen); + } else if (errno == EILSEQ) { + print_error("Illegal multibyte sequence encountered at \'%c\' (0x%02x); skipping.\n", + *pinbuff, *pinbuff); + *pinbuff = ' '; + pinbuff++; + } else if (errno == EINVAL) { + D_VT(("Incomplete multibyte sequence encountered.\n")); + print_warning("Converted %lu input chars to %lu output chars before incomplete sequence.\n", (cmdbuf_ptr - str), outlen); + } else { + print_warning("Converted %lu input chars to %lu output chars.\n", (cmdbuf_ptr - str), outlen); + } + + print_warning("Moo2: %s\n", safe_print_string(outbuff, outlen)); + MEMSET(outbuff + outlen, 0, sizeof(wchar_t)); + wcbuff = SPIF_CAST_C(wchar_t *) outbuff; + MEMSET(&mbs, 0, sizeof(mbstate_t)); + outlen = wcsrtombs(NULL, &wcbuff, 0, &mbs) + 1; + if (outlen > 0) { + outbuff = SPIF_CAST_C(char *) MALLOC(outlen); + outlen = wcsrtombs(outbuff, &wcbuff, outlen, &mbs); + if ((long)outlen >= 0) { + FREE(wcbuff); + print_error("I win!\n"); + } else { + print_error("wcsrtombs() returned %ld (errno is %d (%s))\n", (unsigned long) outlen, errno, strerror(errno)); + } + if (pinbuff > (char *) str) { + cmdbuf_ptr = (unsigned char *) pinbuff; + scr_add_lines(outbuff, nlines, outlen); + } + } else { + print_error("wcsrtombs(NULL, %10p, 0) returned %ld (errno is %d (%s))\n", wcbuff, (unsigned long) outlen, errno, strerror(errno)); + } + FREE(outbuff); + } + } else +#endif + scr_add_lines(str, nlines, (cmdbuf_ptr - str)); } else { switch (ch) { # ifdef NO_ENQ_ANS =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/defaultfont.c,v retrieving revision 1.3.2.2 retrieving revision 1.3.2.3 diff -u -3 -r1.3.2.2 -r1.3.2.3 --- defaultfont.c 19 Nov 2002 04:41:54 -0000 1.3.2.2 +++ defaultfont.c 15 Mar 2005 22:32:35 -0000 1.3.2.3 @@ -188,7 +188,7 @@ * The current encoding is available via nl_langinfo(). * Otherwise, it comes from locale name. */ -#ifdef HAVE_NL_LANGINFO +#if defined(HAVE_NL_LANGINFO) && defined(CODESET) encoding_str = nl_langinfo(CODESET); #else encoding_str = NULL; =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/events.c,v retrieving revision 1.51.2.6 retrieving revision 1.51.2.7 diff -u -3 -r1.51.2.6 -r1.51.2.7 --- events.c 15 Jul 2004 19:57:52 -0000 1.51.2.6 +++ events.c 15 Mar 2005 22:32:36 -0000 1.51.2.7 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: events.c,v 1.51.2.6 2004/07/15 19:57:52 mej Exp $"; +static const char cvs_ident[] = "$Id: events.c,v 1.51.2.7 2005/03/15 22:32:36 mej Exp $"; #include "config.h" #include "feature.h" @@ -342,7 +342,7 @@ XGetWindowProperty(Xdisplay, Xroot, props[PROP_DND_SELECTION], 0L, 1000000L, False, AnyPropertyType, &ActualType, &ActualFormat, &Size, &RemainingBytes, &data); if (data != NULL) { XChangeProperty(Xdisplay, Xroot, XA_CUT_BUFFER0, XA_STRING, 8, PropModeReplace, data, strlen(data)); - selection_paste(Xroot, XA_CUT_BUFFER0, True); + selection_paste(XA_CUT_BUFFER0); XSetInputFocus(Xdisplay, Xroot, RevertToNone, CurrentTime); XFree(data); } =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/feature.h,v retrieving revision 1.32.2.8 retrieving revision 1.32.2.9 diff -u -3 -r1.32.2.8 -r1.32.2.9 --- feature.h 15 Jul 2004 19:57:52 -0000 1.32.2.8 +++ feature.h 15 Mar 2005 22:32:36 -0000 1.32.2.9 @@ -201,6 +201,9 @@ /* Allow option/attribute for Meta to set the 8th bit */ #define META8_OPTION +/* Attempt to deactivate UTF-8 and similar locales. */ +/* #define NO_UTF8_LOCALE */ + /********************* Miscellaneous options *********************/ /* To have $DISPLAY and the "\E[7n" response be IP addresses rather than FQDN's */ @@ -301,7 +304,7 @@ # define PATH_ENV "ETERMPATH" #endif -#if defined(_POSIX_VERSION) && defined(_POSIX_SAVED_IDS) && (_POSIX_SAVED_IDS == 1) +#if defined(_POSIX_VERSION) && defined(_POSIX_SAVED_IDS) # ifdef HAVE_SAVED_UIDS # undef HAVE_SAVED_UIDS # endif =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/misc.c,v retrieving revision 1.20.2.4 retrieving revision 1.20.2.5 diff -u -3 -r1.20.2.4 -r1.20.2.5 --- misc.c 19 Jan 2004 19:49:22 -0000 1.20.2.4 +++ misc.c 15 Mar 2005 22:32:36 -0000 1.20.2.5 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: misc.c,v 1.20.2.4 2004/01/19 19:49:22 mej Exp $"; +static const char cvs_ident[] = "$Id: misc.c,v 1.20.2.5 2005/03/15 22:32:36 mej Exp $"; #include "config.h" #include "feature.h" @@ -223,6 +223,53 @@ return (pnew - str); } +spif_charptr_t +escape_string(spif_charptr_t str, spif_char_t quote, spif_int32_t maxlen) +{ + spif_charptr_t buff, s = str, pbuff; + + D_STRINGS(("escape_string(%s %c %ld)\n", (char *) str, quote, maxlen)); + if (! quote) { + quote = '\"'; + } + + /* The escaped string will be at most twice the length of the original. */ + buff = SPIF_CAST(charptr) MALLOC(strlen(SPIF_CAST_PTR(char) str) * 2 + 1); + + /* Copy and escape the string from str into buff. */ + for (pbuff = buff; (*s); s++, pbuff++) { + if (*s == quote) { + D_STRINGS(("Double-escaping \'%c\' at position %d\n", *s, s - str)); + *pbuff = '\\'; + pbuff++; + *pbuff = '\\'; + pbuff++; + } else { + if (quote == '\"') { + if ((*s == '\\') || (*s == '`')) { + D_STRINGS(("Escaping \'%c\' at position %d\n", *s, s - str)); + *pbuff = '\\'; + pbuff++; + } + } + } + D_STRINGS(("Copying \'%c\' at position %d\n", *s, s - str)); + *pbuff = *s; + } + *pbuff = 0; + + if (maxlen) { + /* Given maxlen, we know "str" can hold at least "maxlen" chars. */ + if (!spiftool_safe_strncpy(str, buff, maxlen)) { + str[maxlen] = 0; + } + FREE(buff); + return str; + } else { + return buff; + } +} + char * safe_print_string(const char *str, unsigned long len) { =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/misc.h,v retrieving revision 1.12.2.2 retrieving revision 1.12.2.3 diff -u -3 -r1.12.2.2 -r1.12.2.3 --- misc.h 19 Jan 2004 19:49:22 -0000 1.12.2.2 +++ misc.h 15 Mar 2005 22:32:36 -0000 1.12.2.3 @@ -40,6 +40,7 @@ extern unsigned long str_leading_match(register const char *, register const char *); extern char *str_trim(char *str); extern int parse_escaped_string(char *str); +extern spif_charptr_t escape_string(spif_charptr_t str, spif_char_t quote, spif_int32_t maxlen); extern char *safe_print_string(const char *buff, unsigned long len); extern unsigned long add_carriage_returns(unsigned char *buff, unsigned long cnt); extern unsigned char mkdirhier(const char *); =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/options.c,v retrieving revision 1.102.2.15 retrieving revision 1.102.2.16 diff -u -3 -r1.102.2.15 -r1.102.2.16 --- options.c 15 Jul 2004 19:57:52 -0000 1.102.2.15 +++ options.c 15 Mar 2005 22:32:36 -0000 1.102.2.16 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: options.c,v 1.102.2.15 2004/07/15 19:57:52 mej Exp $"; +static const char cvs_ident[] = "$Id: options.c,v 1.102.2.16 2005/03/15 22:32:36 mej Exp $"; #include "config.h" #include "feature.h" @@ -150,6 +150,8 @@ unsigned char rs_es_dock = BBAR_DOCKED_BOTTOM; char *rs_es_font = NULL; #endif +spif_charptr_t rs_beep_command = NULL; +spif_uint32_t rs_opacity = 0xffffffff; unsigned int rs_line_space = 0; unsigned int rs_meta_mod = 0, rs_alt_mod = 0, rs_numlock_mod = 0; #ifdef KEYSYM_ATTRIBUTE @@ -245,6 +247,7 @@ SPIFOPT_STR_LONG("trough-pixmap", "scrollbar background (trough) pixmap", rs_pixmaps[image_sb]), SPIFOPT_STR_LONG("anchor-pixmap", "scrollbar anchor pixmap", rs_pixmaps[image_sa]), SPIFOPT_STR_LONG("menu-pixmap", "menu pixmap", rs_pixmaps[image_menu]), + SPIFOPT_INT('o', "opacity", "window opacity (0-255; requires X COMPOSITE extension)", rs_opacity), SPIFOPT_BOOL('O', "trans", "creates a pseudo-transparent Eterm", image_options, IMAGE_OPTIONS_TRANS), SPIFOPT_BOOL('0', "itrans", "use immotile-optimized transparency", image_options, IMAGE_OPTIONS_ITRANS), SPIFOPT_BOOL_LONG("viewport-mode", "use viewport mode for the background image", image_options, IMAGE_OPTIONS_VIEWPORT), @@ -340,6 +343,7 @@ SPIFOPT_STR_LONG("finished-text", "post-termination terminal text", rs_finished_text), SPIFOPT_STR_LONG("term-name", "value to use for setting $TERM", rs_term_name), SPIFOPT_STR_LONG("pipe-name", "filename of console pipe to emulate -C", rs_pipe_name), + SPIFOPT_STR_LONG("beep-command", "command to run instead of normal beep", rs_beep_command), #ifdef ESCREEN SPIFOPT_STR('U', "url", "a URL pointing to a screen session to pick up", rs_url), SPIFOPT_STR('Z', "firewall", "connect session via forwarded port", rs_hop), @@ -403,7 +407,11 @@ " " SCREEN_IDENT "\n" " " SCROLLBAR_IDENT "\n" " " STARTUP_IDENT "\n" - " " SYSTEM_IDENT "\n" " " TERM_IDENT "\n" " " TIMER_IDENT "\n" " " UTMP_IDENT "\n" " " WINDOWS_IDENT "\n" "\n"); + " " SYSTEM_IDENT "\n" + " " TERM_IDENT "\n" + " " TIMER_IDENT "\n" + " " UTMP_IDENT "\n" + " " WINDOWS_IDENT "\n" "\n"); printf("Debugging configuration: "); #ifdef DEBUG @@ -1472,6 +1480,9 @@ } else if (!BEG_STRCASECMP(buff, "term_name ")) { RESET_AND_ASSIGN(rs_term_name, get_word(2, buff)); + } else if (!BEG_STRCASECMP(buff, "beep_command ")) { + RESET_AND_ASSIGN(rs_beep_command, get_word(2, buff)); + } else if (!BEG_STRCASECMP(buff, "debug ")) { DEBUG_LEVEL = (unsigned int) strtoul(get_pword(2, buff), (char **) NULL, 0); @@ -2571,6 +2582,15 @@ { register int i; +#if DEBUG > 0 + if (DEBUG_LEVEL > DEBUG) { + print_warning("Requested debug level of %d exceeds compile-time maximum of %d\n", + DEBUG_LEVEL, DEBUG); + } else if (DEBUG_LEVEL > 0) { + DPRINTF1(("Now running with debugging level of %d\n", DEBUG_LEVEL)); + } +#endif + if (rs_scrollbar_type) { if (!strcasecmp(rs_scrollbar_type, "xterm")) { #ifdef XTERM_SCROLLBAR @@ -2977,6 +2997,12 @@ } #endif + if (rs_opacity < 0x100) { + rs_opacity |= (rs_opacity << 24) | (rs_opacity << 16) | (rs_opacity << 8); + } else { + rs_opacity = 0xffffffff; + } + if (BITFIELD_IS_SET(vt_options, VT_OPTIONS_REVERSE_VIDEO)) { char *tmp; @@ -3841,6 +3867,11 @@ fprintf(fp, " min_anchor_size %d\n", rs_min_anchor_size); fprintf(fp, " border_width %d\n", TermWin.internalBorder); fprintf(fp, " term_name %s\n", getenv("TERM")); + fprintf(fp, " beep_command \"%s\"\n", SPIF_CAST_PTR(char) ( + (rs_beep_command) + ? (SPIF_CAST_PTR(char) rs_beep_command) + : (SPIF_CAST_PTR(char) "") + )); fprintf(fp, " debug %d\n", DEBUG_LEVEL); if (save_theme && rs_exec_args) { fprintf(fp, " exec "); @@ -3851,7 +3882,10 @@ } #ifdef CUTCHAR_OPTION if (rs_cutchars) { - fprintf(fp, " cut_chars '%s'\n", rs_cutchars); + spif_charptr_t cut_chars_escaped; + + cut_chars_escaped = escape_string(SPIF_CAST(charptr) rs_cutchars, '\"', 0); + fprintf(fp, " cut_chars \"%s\"\n", (char *) cut_chars_escaped); } #endif fprintf(fp, "end misc\n\n"); =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/options.h,v retrieving revision 1.36.2.8 retrieving revision 1.36.2.9 diff -u -3 -r1.36.2.8 -r1.36.2.9 --- options.h 19 Jan 2004 19:49:22 -0000 1.36.2.8 +++ options.h 15 Mar 2005 22:32:37 -0000 1.36.2.9 @@ -125,7 +125,9 @@ extern unsigned char rs_es_dock; extern char *rs_es_font; #endif +extern spif_uint32_t rs_opacity; extern unsigned int rs_line_space; +extern spif_charptr_t rs_beep_command; extern unsigned int rs_meta_mod, rs_alt_mod, rs_numlock_mod; #ifndef NO_BOLDFONT extern char *rs_boldFont; @@ -150,7 +152,6 @@ /************ Function Prototypes ************/ _XFUNCPROTOBEGIN -unsigned long num_words(const char *str); extern char *conf_parse_theme(char **theme, char *conf_name, unsigned char fallback); extern void init_libast(void); extern void init_defaults(void); =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/screen.c,v retrieving revision 1.59.2.8 retrieving revision 1.59.2.9 diff -u -3 -r1.59.2.8 -r1.59.2.9 --- screen.c 3 Mar 2004 17:42:46 -0000 1.59.2.8 +++ screen.c 15 Mar 2005 22:32:38 -0000 1.59.2.9 @@ -3,7 +3,7 @@ * */ -static const char cvs_ident[] = "$Id: screen.c,v 1.59.2.8 2004/03/03 17:42:46 mej Exp $"; +static const char cvs_ident[] = "$Id: screen.c,v 1.59.2.9 2005/03/15 22:32:38 mej Exp $"; #include "config.h" #include "feature.h" @@ -183,7 +183,8 @@ buf_rend = CALLOC(rend_t *, total_rows); drawn_rend = CALLOC(rend_t *, TERM_WINDOW_GET_REPORTED_ROWS()); swap.rend = CALLOC(rend_t *, TERM_WINDOW_GET_REPORTED_ROWS()); - D_SCREEN(("screen.text == %8p, screen.rend == %8p, swap.text == %8p, swap.rend == %8p\n", screen.text, screen.rend, swap.text, swap.rend)); + D_SCREEN(("screen.text == %8p, screen.rend == %8p, swap.text == %8p, swap.rend == %8p\n", + screen.text, screen.rend, swap.text, swap.rend)); for (i = 0; i < TERM_WINDOW_GET_REPORTED_ROWS(); i++) { j = i + TermWin.saveLines; @@ -226,7 +227,8 @@ buf_rend = REALLOC(buf_rend, total_rows * sizeof(rend_t *)); drawn_rend = REALLOC(drawn_rend, TERM_WINDOW_GET_REPORTED_ROWS() * sizeof(rend_t *)); swap.rend = REALLOC(swap.rend, TERM_WINDOW_GET_REPORTED_ROWS() * sizeof(rend_t *)); - D_SCREEN(("screen.text == %8p, screen.rend == %8p, swap.text == %8p, swap.rend == %8p\n", screen.text, screen.rend, swap.text, swap.rend)); + D_SCREEN(("screen.text == %8p, screen.rend == %8p, swap.text == %8p, swap.rend == %8p\n", + screen.text, screen.rend, swap.text, swap.rend)); /* we have fewer rows so fix up number of scrolled lines */ UPPER_BOUND(screen.row, TERM_WINDOW_GET_REPORTED_ROWS() - 1); @@ -242,7 +244,8 @@ buf_rend = REALLOC(buf_rend, total_rows * sizeof(rend_t *)); drawn_rend = REALLOC(drawn_rend, TERM_WINDOW_GET_REPORTED_ROWS() * sizeof(rend_t *)); swap.rend = REALLOC(swap.rend, TERM_WINDOW_GET_REPORTED_ROWS() * sizeof(rend_t *)); - D_SCREEN(("screen.text == %8p, screen.rend == %8p, swap.text == %8p, swap.rend == %8p\n", screen.text, screen.rend, swap.text, swap.rend)); + D_SCREEN(("screen.text == %8p, screen.rend == %8p, swap.text == %8p, swap.rend == %8p\n", + screen.text, screen.rend, swap.text, swap.rend)); k = MIN(TermWin.nscrolled, TERM_WINDOW_GET_REPORTED_ROWS() - prev_nrow); for (i = prev_total_rows; i < total_rows - k; i++) { @@ -279,7 +282,8 @@ screen.rend[i] = REALLOC(screen.rend[i], TERM_WINDOW_GET_REPORTED_COLS() * sizeof(rend_t)); screen.text[i][TERM_WINDOW_GET_REPORTED_COLS()] = MIN(tc, TERM_WINDOW_GET_REPORTED_COLS()); if (TERM_WINDOW_GET_REPORTED_COLS() > prev_ncol) - blank_line(&(screen.text[i][prev_ncol]), &(screen.rend[i][prev_ncol]), TERM_WINDOW_GET_REPORTED_COLS() - prev_ncol, DEFAULT_RSTYLE); + blank_line(&(screen.text[i][prev_ncol]), &(screen.rend[i][prev_ncol]), + TERM_WINDOW_GET_REPORTED_COLS() - prev_ncol, DEFAULT_RSTYLE); } } for (i = 0; i < TERM_WINDOW_GET_REPORTED_ROWS(); i++) { @@ -291,10 +295,12 @@ swap.rend[i] = REALLOC(swap.rend[i], TERM_WINDOW_GET_REPORTED_COLS() * sizeof(rend_t)); swap.text[i][TERM_WINDOW_GET_REPORTED_COLS()] = MIN(tc, TERM_WINDOW_GET_REPORTED_COLS()); if (TERM_WINDOW_GET_REPORTED_COLS() > prev_ncol) - blank_line(&(swap.text[i][prev_ncol]), &(swap.rend[i][prev_ncol]), TERM_WINDOW_GET_REPORTED_COLS() - prev_ncol, DEFAULT_RSTYLE); + blank_line(&(swap.text[i][prev_ncol]), &(swap.rend[i][prev_ncol]), + TERM_WINDOW_GET_REPORTED_COLS() - prev_ncol, DEFAULT_RSTYLE); } if (TERM_WINDOW_GET_REPORTED_COLS() > prev_ncol) - blank_line(&(drawn_text[i][prev_ncol]), &(drawn_rend[i][prev_ncol]), TERM_WINDOW_GET_REPORTED_COLS() - prev_ncol, DEFAULT_RSTYLE); + blank_line(&(drawn_text[i][prev_ncol]), &(drawn_rend[i][prev_ncol]), + TERM_WINDOW_GET_REPORTED_COLS() - prev_ncol, DEFAULT_RSTYLE); } } if (tabs) @@ -1444,7 +1450,10 @@ { #ifdef MULTI_CHARSET if (str && *str) { - if (!strcasecmp(str, "sjis")) { + if (!strcasecmp(str, "utf8") || !strcasecmp(str, "ucs2")) { + encoding_method = UCS2; + multichar_decode = latin1; + } else if (!strcasecmp(str, "sjis")) { encoding_method = SJIS; multichar_decode = sjis2jis; } else if (!strcasecmp(str, "eucj") || !strcasecmp(str, "euckr") || !strcasecmp(str, "gb")) { @@ -1537,8 +1546,11 @@ if (BITFIELD_IS_SET(vt_options, VT_OPTIONS_VISUAL_BELL)) { scr_rvideo_mode(!rvideo); scr_rvideo_mode(!rvideo); - } else + } else if (!SPIF_PTR_ISNULL(rs_beep_command) && (*rs_beep_command)) { + system_no_wait(SPIF_CAST_C(char *) rs_beep_command); + } else { XBell(Xdisplay, 0); + } } void @@ -1673,8 +1685,13 @@ XSetFont(Xdisplay, TermWin.gc, TermWin.font->fid); +#if FIXME_BLOCK + draw_string = XmbDrawString; + draw_image_string = XmbDrawImageString; +#else draw_string = XDrawString; draw_image_string = XDrawImageString; +#endif BOUND(screen.row, 0, TERM_WINDOW_GET_REPORTED_ROWS() - 1); BOUND(screen.col, 0, TERM_WINDOW_GET_REPORTED_COLS() - 1); @@ -1759,8 +1776,13 @@ if (!wbyte) { wbyte = 1; XSetFont(Xdisplay, TermWin.gc, TermWin.mfont->fid); +# if FIXME_BLOCK + draw_string = XmbDrawString; + draw_image_string = XmbDrawImageString; +# else draw_string = XDrawString16; draw_image_string = XDrawImageString16; +# endif } /* double stepping - we're in Multibyte mode */ for (; ++col < ncols;) { @@ -1797,8 +1819,13 @@ if (wbyte) { wbyte = 0; XSetFont(Xdisplay, TermWin.gc, TermWin.font->fid); +# if FIXME_BLOCK + draw_string = XmbDrawString; + draw_image_string = XmbDrawImageString; +# else draw_string = XDrawString; draw_image_string = XDrawImageString; +# endif } #endif /* single stepping - `normal' mode */ =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/screen.h,v retrieving revision 1.20.2.6 retrieving revision 1.20.2.7 diff -u -3 -r1.20.2.6 -r1.20.2.7 --- screen.h 3 Mar 2004 17:42:47 -0000 1.20.2.6 +++ screen.h 15 Mar 2005 22:32:38 -0000 1.20.2.7 @@ -59,7 +59,11 @@ if (y1 < low_y) low_y = y1; if (y2 > high_y) high_y = y2;}} while (0) #define ERASE_ROWS(row, num) do {XFillRectangle(Xdisplay, draw_buffer, TermWin.gc, Col2Pixel(0), Row2Pixel(row), TERM_WINDOW_GET_WIDTH(), Height2Pixel(num)); \ if (buffer_pixmap) {XClearArea(Xdisplay, TermWin.vt, Col2Pixel(0), Row2Pixel(row), TERM_WINDOW_GET_WIDTH(), Height2Pixel(num), 0);}} while (0) -#define DRAW_STRING(Func, x, y, str, len) Func(Xdisplay, draw_buffer, TermWin.gc, x, y, str, len) +#if 0 +# define DRAW_STRING(Func, x, y, str, len) Func(Xdisplay, draw_buffer, TermWin.fontset, TermWin.gc, x, y, str, len) +#else +# define DRAW_STRING(Func, x, y, str, len) Func(Xdisplay, draw_buffer, TermWin.gc, x, y, str, len) +#endif /* Make bold if bold flag is set and either we're drawing the foreground color or we're not suppressing bold. In other words, the foreground color can always be bolded, but other colors can't if bold is suppressed. */ @@ -165,7 +169,7 @@ SELECTION_DONE } selection_op_t; typedef enum { - LATIN1 = 0, EUCJ, EUCKR = EUCJ, GB = EUCJ, SJIS, BIG5 + LATIN1 = 0, UCS2, EUCJ, EUCKR = EUCJ, GB = EUCJ, SJIS, BIG5 } encoding_t; typedef struct { short row, col; =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/startup.c,v retrieving revision 1.29.2.9 retrieving revision 1.29.2.10 diff -u -3 -r1.29.2.9 -r1.29.2.10 --- startup.c 3 Mar 2004 17:42:48 -0000 1.29.2.9 +++ startup.c 15 Mar 2005 22:32:38 -0000 1.29.2.10 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: startup.c,v 1.29.2.9 2004/03/03 17:42:48 mej Exp $"; +static const char cvs_ident[] = "$Id: startup.c,v 1.29.2.10 2005/03/15 22:32:38 mej Exp $"; #include "config.h" #include "feature.h" @@ -76,7 +76,8 @@ int i; char *val; - static char windowid_string[20], *display_string, *term_string; /* "WINDOWID=\0" = 10 chars, UINT_MAX = 10 chars */ + /* "WINDOWID=\0" = 10 chars, UINT_MAX = 10 chars */ + static char windowid_string[20], *display_string, *term_string; orig_argv0 = argv[0]; @@ -101,7 +102,9 @@ } /* This MUST be called before any other Xlib functions */ - +#ifdef SPIFOPT_SETTING_PREPARSE + SPIFOPT_FLAGS_SET(SPIFOPT_SETTING_PREPARSE); +#endif spifopt_parse(argc, argv); init_defaults(); @@ -147,6 +150,7 @@ props[PROP_DND_PROTOCOL] = XInternAtom(Xdisplay, "DndProtocol", False); props[PROP_DND_SELECTION] = XInternAtom(Xdisplay, "DndSelection", False); props[PROP_EWMH_ICON] = XInternAtom(Xdisplay, "_NET_WM_ICON", False); + props[PROP_EWMH_OPACITY] = XInternAtom(Xdisplay, "_NET_WM_WINDOW_OPACITY", True); if ((theme_dir = conf_parse_theme(&rs_theme, THEME_CFG, PARSE_TRY_ALL)) != NULL) { char *tmp; @@ -311,6 +315,19 @@ } putenv("ETERM_VERSION=" VERSION); +#ifdef NO_UTF8_LOCALE + /* Check locale for UTF-8 and deactivate if needed. */ + val = getenv("LANG"); + if (val && *val) { + char *tmp; + + tmp = strcasestr(val, ".utf"); + if (tmp) { + *tmp = 0; + } + } +#endif + D_CMD(("init_command()\n")); init_command(rs_exec_args); =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/startup.h,v retrieving revision 1.14.2.5 retrieving revision 1.14.2.6 diff -u -3 -r1.14.2.5 -r1.14.2.6 --- startup.h 19 Jan 2004 19:49:23 -0000 1.14.2.5 +++ startup.h 15 Mar 2005 22:32:38 -0000 1.14.2.6 @@ -103,6 +103,7 @@ PROP_DND_PROTOCOL, PROP_DND_SELECTION, PROP_EWMH_ICON, + PROP_EWMH_OPACITY, NUM_PROPS }; =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/term.c,v retrieving revision 1.78.2.11 retrieving revision 1.78.2.12 diff -u -3 -r1.78.2.11 -r1.78.2.12 --- term.c 15 Jul 2004 19:57:54 -0000 1.78.2.11 +++ term.c 15 Mar 2005 22:32:38 -0000 1.78.2.12 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: term.c,v 1.78.2.11 2004/07/15 19:57:54 mej Exp $"; +static const char cvs_ident[] = "$Id: term.c,v 1.78.2.12 2005/03/15 22:32:38 mej Exp $"; #include "config.h" #include "feature.h" @@ -2017,7 +2017,8 @@ if ((valptr = (char *) strsep(&tnstr, ";")) == NULL) { break; } - D_CMD(("Modifying the %s attribute of the %s color modifier of the %s image to be %s\n", mod, color, get_image_type(which), valptr)); + D_CMD(("Modifying the %s attribute of the %s color modifier of the %s image to be %s\n", + mod, color, get_image_type(which), valptr)); changed = 1; # ifdef PIXMAP_OFFSET if (image_mode_is(which, MODE_TRANS) && (desktop_pixmap != None)) { @@ -2365,30 +2366,37 @@ xev.message_type = props[PROP_DESKTOP]; xev.format = 32; xev.data.l[0] = rs_desktop; - XChangeProperty(Xdisplay, TermWin.parent, xev.message_type, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &rs_desktop, 1); + XChangeProperty(Xdisplay, TermWin.parent, xev.message_type, XA_CARDINAL, 32, + PropModeReplace, (unsigned char *) &rs_desktop, 1); XSendEvent(Xdisplay, Xroot, False, SubstructureNotifyMask, (XEvent *) & xev); } break; -#if 0 - case 70: - /* Exit Eterm */ - exit(0); - break; - case 71: - /* Save current config */ + case 51: + /* Change opacity */ nstr = (char *) strsep(&tnstr, ";"); if (nstr && *nstr) { - valptr = (char *) strsep(&tnstr, ";"); - if (!strcasecmp(nstr, "theme")) { - save_config(valptr, SAVE_THEME_CONFIG); + XClientMessageEvent xev; + spif_uint32_t tmp; + + tmp = (int) strtol(nstr, (char **) NULL, 0); + if (tmp < 0x100) { + rs_opacity = tmp | (tmp << 24) | (tmp << 16) | (tmp << 8); } else { - save_config(valptr, SAVE_USER_CONFIG); + rs_opacity = 0xffffffff; } - } else { - save_config(NULL, SAVE_USER_CONFIG); + xev.type = ClientMessage; + xev.window = TermWin.parent; + xev.message_type = props[PROP_EWMH_OPACITY]; + xev.format = 32; + xev.data.l[0] = rs_opacity; + XChangeProperty(Xdisplay, TermWin.parent, xev.message_type, XA_CARDINAL, 32, + PropModeReplace, (unsigned char *) &rs_opacity, 1); + XChangeProperty(Xdisplay, TermWin.vt, xev.message_type, XA_CARDINAL, 32, + PropModeReplace, (unsigned char *) &rs_opacity, 1); + XSendEvent(Xdisplay, Xroot, False, SubstructureNotifyMask, (XEvent *) (&xev)); } break; -#endif + case 72: /* Search scrollback buffer for a string. NULL to clear. */ nstr = (char *) strsep(&tnstr, ";"); @@ -2398,15 +2406,7 @@ scr_search_scrollback(NULL); } break; -#if 0 - case 73: - /* Spawn a subprogram */ - nstr = (char *) strsep(&tnstr, ";"); - if (nstr && *nstr) { - system_no_wait(nstr); - } - break; -#endif + case 80: /* Set debugging level */ nstr = (char *) strsep(&tnstr, ";"); =================================================================== RCS file: /cvsroot/enlightenment/eterm/Eterm/src/windows.c,v retrieving revision 1.51.2.7 retrieving revision 1.51.2.8 diff -u -3 -r1.51.2.7 -r1.51.2.8 --- windows.c 19 Jan 2004 19:49:23 -0000 1.51.2.7 +++ windows.c 15 Mar 2005 22:32:39 -0000 1.51.2.8 @@ -21,7 +21,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -static const char cvs_ident[] = "$Id: windows.c,v 1.51.2.7 2004/01/19 19:49:23 mej Exp $"; +static const char cvs_ident[] = "$Id: windows.c,v 1.51.2.8 2005/03/15 22:32:39 mej Exp $"; #include "config.h" #include "feature.h" @@ -380,7 +380,8 @@ } Attributes.colormap = cmap; - szHint.base_width = (2 * TermWin.internalBorder + ((BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_SCROLLBAR)) ? (scrollbar_get_width() + (2 * scrollbar_get_shadow())) : 0)); + szHint.base_width = (2 * TermWin.internalBorder + ((BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_SCROLLBAR)) + ? (scrollbar_get_width() + (2 * scrollbar_get_shadow())) : 0)); szHint.base_height = (2 * TermWin.internalBorder) + bbar_calc_docked_height(BBAR_DOCKED); flags = (rs_geometry ? XParseGeometry(rs_geometry, &x, &y, &width, &height) : 0); @@ -447,8 +448,10 @@ XSelectInput(Xdisplay, TermWin.parent, (KeyPressMask | FocusChangeMask | StructureNotifyMask | VisibilityChangeMask | PropertyChangeMask)); if (mwmhints.flags) { prop = XInternAtom(Xdisplay, "_MOTIF_WM_HINTS", False); - XChangeProperty(Xdisplay, TermWin.parent, prop, prop, 32, PropModeReplace, (unsigned char *) &mwmhints, PROP_MWM_HINTS_ELEMENTS); + XChangeProperty(Xdisplay, TermWin.parent, prop, prop, 32, + PropModeReplace, (unsigned char *) &mwmhints, PROP_MWM_HINTS_ELEMENTS); } + /* vt cursor: Black-on-White is standard, but this is more popular */ TermWin_cursor = XCreateFontCursor(Xdisplay, XC_xterm); set_pointer_colors(NULL, NULL); @@ -457,9 +460,12 @@ cursor = XCreateFontCursor(Xdisplay, XC_left_ptr); /* the vt window */ - TermWin.x = (((BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_SCROLLBAR)) && !(BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_SCROLLBAR_RIGHT))) ? (scrollbar_get_width() + (2 * scrollbar_get_shadow())) : 0); + TermWin.x = (((BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_SCROLLBAR)) + && !(BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_SCROLLBAR_RIGHT))) + ? (scrollbar_get_width() + (2 * scrollbar_get_shadow())) : 0); TermWin.y = bbar_calc_docked_height(BBAR_DOCKED_TOP); - TermWin.vt = XCreateWindow(Xdisplay, TermWin.parent, TermWin.x, TermWin.y, szHint.width, szHint.height, 0, Xdepth, InputOutput, CopyFromParent, + TermWin.vt = XCreateWindow(Xdisplay, TermWin.parent, TermWin.x, TermWin.y, szHint.width, szHint.height, + 0, Xdepth, InputOutput, CopyFromParent, CWBackPixel | CWBorderPixel | CWOverrideRedirect | CWColormap, &Attributes); D_X11(("Created terminal window 0x%08x at %dx%d\n", TermWin.vt, TermWin.x, TermWin.y)); if (!(background_is_pixmap()) && !(BITFIELD_IS_SET(eterm_options, ETERM_OPTIONS_BORDERLESS))) { @@ -473,7 +479,16 @@ /* If the user wants a specific desktop, tell the WM that */ if (rs_desktop != -1) { val = rs_desktop; - XChangeProperty(Xdisplay, TermWin.parent, props[PROP_DESKTOP], XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1); + XChangeProperty(Xdisplay, TermWin.parent, props[PROP_DESKTOP], + XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1); + } + + /* Set window opacity if needed. */ + if ((props[PROP_EWMH_OPACITY] != None) && (rs_opacity != 0xff)) { + XChangeProperty(Xdisplay, TermWin.parent, props[PROP_EWMH_OPACITY], + XA_CARDINAL, 32, PropModeReplace, SPIF_CAST_PTR(uchar) &rs_opacity, 1); + XChangeProperty(Xdisplay, TermWin.vt, props[PROP_EWMH_OPACITY], + XA_CARDINAL, 32, PropModeReplace, SPIF_CAST_PTR(uchar) &rs_opacity, 1); } /* We're done creating our windows. Now let's initialize the event subsystem to handle them. */ ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs