⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdefaults.c

📁 rxvt经典的linux下的终端.小巧实用
💻 C
📖 第 1 页 / 共 3 页
字号:
# if defined(NEXT_SCROLLBAR)    "NeXT"#  if defined(XTERM_SCROLLBAR)    "+"#  endif# endif# if defined(XTERM_SCROLLBAR)    "xterm"# endif#endif    ","#if defined(GREEK_SUPPORT)    "Greek,"#endif#if defined(RXVT_GRAPHICS)    "graphics,"#endif#if defined(NO_BACKSPACE_KEY)    "no_backspace,"#endif#if defined(NO_DELETE_KEY)    "no_delete,"#endif#if !defined(NO_STRINGS)    "strings,"#endif#if defined(TTY_256COLOR)    "256colour,"#endif#if defined(NO_RESOURCES)    "NoResources"#else# if defined(USE_XGETDEFAULT)    "XGetDefaults"# else    ".Xdefaults"# endif#endif    "\nUsage: ";		/* Usage */#define INDENT 18/*{{{ usage: *//*----------------------------------------------------------------------*//* EXTPROTO */voidrxvt_usage(int type){    unsigned int    i, col;    write(STDERR_FILENO, releasestring, sizeof(releasestring) - 1);    write(STDERR_FILENO, optionsstring, sizeof(optionsstring) - 1);    write(STDERR_FILENO, APL_NAME, sizeof(APL_NAME) - 1);    switch (type) {    case 0:			/* brief listing */	fprintf(stderr, " [-help] [--help]\n");	for (col = 1, i = 0; i < optList_size(); i++)	    if (optList[i].desc != NULL) {		int             len = 0;		if (!optList_isBool(i)) {		    len = optList_strlen(i);		    if (len > 0)			len++;	/* account for space */		}#ifdef DEBUG_STRICT		assert(optList[i].opt != NULL);#endif		len += 4 + STRLEN(optList[i].opt) + (optList_isBool(i) ? 2: 0);		col += len;		if (col > 79) {	/* assume regular width */		    putc('\n', stderr);		    col = 1 + len;		}		fprintf(stderr, " [-%s%s", (optList_isBool(i) ? "/+" : ""),			optList[i].opt);		if (optList_strlen(i))		    fprintf(stderr, " %s]", optList[i].arg);		else		    fprintf(stderr, "]");	    }	break;    case 1:			/* full command-line listing */	fprintf(stderr, " [options] [-e command args]\n\n"		"where options include:\n");	for (i = 0; i < optList_size(); i++)	    if (optList[i].desc != NULL) {#ifdef DEBUG_STRICT		assert(optList[i].opt != NULL);#endif		fprintf(stderr, "  %s%s %-*s%s%s\n",			(optList_isBool(i) ? "-/+" : "-"), optList[i].opt,			(INDENT - STRLEN(optList[i].opt)			 + (optList_isBool(i) ? 0 : 2)),			(optList[i].arg ? optList[i].arg : ""),			(optList_isBool(i) ? "turn on/off " : ""),			optList[i].desc);	    }	fprintf(stderr, "\n  --help to list long-options");	break;    case 2:			/* full resource listing */	fprintf(stderr,		" [options] [-e command args]\n\n"		"where resources (long-options) include:\n");	for (i = 0; i < optList_size(); i++)	    if (optList[i].kw != NULL)		fprintf(stderr, "  %s: %*s%s\n",			optList[i].kw,			(INDENT - STRLEN(optList[i].kw)), "", /* XXX */			(optList_isBool(i) ? "boolean" : optList[i].arg));#ifdef KEYSYM_RESOURCE	fprintf(stderr, "  " "keysym.sym" ": %*s%s\n",		(INDENT - sizeof("keysym.sym") + 1), "", /* XXX */		"keysym");#endif	fprintf(stderr, "\n  -help to list options");	break;    }    fprintf(stderr, "\n\n");    exit(EXIT_FAILURE);    /* NOTREACHED */}/*}}} *//*{{{ get command-line options before getting resources *//* EXTPROTO */voidrxvt_get_options(rxvt_t *r, int argc, const char *const *argv){    int             i, bad_option = 0;    static const char On[3] = "ON", Off[4] = "OFF";    for (i = 1; i < argc; i++) {	unsigned int    entry, longopt = 0;	const char     *flag, *opt;	opt = argv[i];#ifdef DEBUG_RESOURCES	fprintf(stderr, "argv[%d] = %s: ", i, opt);#endif	if (*opt == '-') {	    flag = On;	    if (*++opt == '-')		longopt = *opt++;	/* long option */	} else if (*opt == '+') {	    flag = Off;	    if (*++opt == '+')		longopt = *opt++;	/* long option */	} else {	    bad_option = 1;	    rxvt_print_error("bad option \"%s\"", opt);	    continue;	}	if (!STRCMP(opt, "help"))	    rxvt_usage(longopt ? 2 : 1);	if (!STRCMP(opt, "h"))	    rxvt_usage(0);	/* feature: always try to match long-options */	for (entry = 0; entry < optList_size(); entry++)	    if ((optList[entry].kw && !STRCMP(opt, optList[entry].kw))		|| (!longopt		    && optList[entry].opt && !STRCMP(opt, optList[entry].opt)))		break;	if (entry < optList_size()) {	    if (optList_isReverse(entry))		flag = flag == On ? Off : On;	    if (optList_strlen(entry)) {	/* string value */		const char     *str = argv[++i];#ifdef DEBUG_RESOURCES		fprintf(stderr, "string (%s,%s) = ",			optList[entry].opt ? optList[entry].opt : "nil",			optList[entry].kw ? optList[entry].kw : "nil");#endif		if (flag == On && str && (optList[entry].doff != -1)) {#ifdef DEBUG_RESOURCES		    fprintf(stderr, "\"%s\"\n", str);#endif		    r->h->rs[optList[entry].doff] = str;		    /*		     * special cases are handled in main.c:main() to allow		     * X resources to set these values before we settle for		     * default values		     */		}#ifdef DEBUG_RESOURCES		else		    fprintf(stderr, "???\n");#endif	    } else {		/* boolean value */#ifdef DEBUG_RESOURCES		fprintf(stderr, "boolean (%s,%s) = %s\n",			optList[entry].opt, optList[entry].kw, flag);#endif		if (flag == On)		    r->Options |= (optList[entry].flag);		else		    r->Options &= ~(optList[entry].flag);		if (optList[entry].doff != -1)		    r->h->rs[optList[entry].doff] = flag;	    }	} else#ifdef KEYSYM_RESOURCE	    /* if (!STRNCMP(opt, "keysym.", sizeof("keysym.") - 1)) */	if (rxvt_Str_match(opt, "keysym.")) {	    const char     *str = argv[++i];	    if (str != NULL)		rxvt_parse_keysym(r, opt + sizeof("keysym.") - 1, str);	} else#endif	{	    /*	     * various old-style options, just ignore	     * Obsolete since about Jan 96,	     * so they can probably eventually be removed	     */	    const char     *msg = "bad";	    if (longopt) {		opt--;		bad_option = 1;	    } else if (!STRCMP(opt, "7") || !STRCMP(opt, "8")#ifdef GREEK_SUPPORT		       /* obsolete 12 May 1996 (v2.17) */		       || !rxvt_Str_match(opt, "grk")#endif		)		msg = "obsolete";	    else		bad_option = 1;	    rxvt_print_error("%s option \"%s\"", msg, --opt);	}    }    if (bad_option)	rxvt_usage(0);}/*}}} */#ifndef NO_RESOURCES/*----------------------------------------------------------------------*/# ifdef KEYSYM_RESOURCE/* * Define key from XrmEnumerateDatabase. *   quarks will be something like *      "rxvt" "keysym" "0xFF01" *   value will be a string *//* ARGSUSED *//* INTPROTO */Boolrxvt_define_key(XrmDatabase *database __attribute__((unused)), XrmBindingList bindings __attribute__((unused)), XrmQuarkList quarks, XrmRepresentation *type __attribute__((unused)), XrmValue *value, XPointer closure __attribute__((unused))){    int             last;    rxvt_t         *r = rxvt_get_r();    for (last = 0; quarks[last] != NULLQUARK; last++)	/* look for last quark in list */	;    last--;    rxvt_parse_keysym(r, XrmQuarkToString(quarks[last]), (char *)value->addr);    return False;}/* * look for something like this (XK_Delete) * rxvt*keysym.0xFFFF: "\177" * * arg will be *      NULL for ~/.Xdefaults and *      non-NULL for command-line options (need to allocate) */#define NEWARGLIM	500	/* `reasonable' size *//* INTPROTO */intrxvt_parse_keysym(rxvt_t *r, const char *str, const char *arg){    int             n, sym;    char           *key_string, *newarg = NULL;    char            newargstr[NEWARGLIM];    if (arg == NULL) {	if ((n = rxvt_Str_match(str, "keysym.")) == 0)	    return 0;	str += n;		/* skip `keysym.' */    }/* some scanf() have trouble with a 0x prefix */    if (isdigit(str[0])) {	if (str[0] == '0' && toupper(str[1]) == 'X')	    str += 2;	if (arg) {	    if (sscanf(str, (STRCHR(str, ':') ? "%x:" : "%x"), &sym) != 1)		return -1;	} else {	    if (sscanf(str, "%x:", &sym) != 1)		return -1;	    /* cue to ':', it's there since sscanf() worked */	    STRNCPY(newargstr, STRCHR(str, ':') + 1, NEWARGLIM - 1);	    newargstr[NEWARGLIM - 1] = '\0';	    newarg = newargstr;	}    } else {	/*	 * convert keysym name to keysym number	 */	STRNCPY(newargstr, str, NEWARGLIM - 1);	newargstr[NEWARGLIM - 1] = '\0';	if (arg == NULL) {	    if ((newarg = STRCHR(newargstr, ':')) == NULL)		return -1;	    *newarg++ = '\0';	/* terminate keysym name */	}	if ((sym = XStringToKeysym(newargstr)) == None)	    return -1;    }    if (sym < 0xFF00 || sym > 0xFFFF)	/* we only do extended keys */	return -1;    sym &= 0xFF;    if (r->h->Keysym_map[sym] != NULL)	/* already set ? */	return -1;    if (newarg == NULL) {	STRNCPY(newargstr, arg, NEWARGLIM - 1);	newargstr[NEWARGLIM - 1] = '\0';	newarg = newargstr;    }    rxvt_Str_trim(newarg);    if (*newarg == '\0' || (n = rxvt_Str_escaped(newarg)) == 0)	return -1;    MIN_IT(n, 255);    key_string = rxvt_malloc((n + 1) * sizeof(char));    key_string[0] = n;    STRNCPY(key_string + 1, newarg, n);    r->h->Keysym_map[sym] = (unsigned char *)key_string;    return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -