コード例 #1
0
ファイル: zle_vi.c プロジェクト: Osse/zsh
int
vijoin(UNUSED(char **args))
{
    int x, pos;

    startvichange(-1);
    if ((x = findeol()) == zlell)
	return 1;
    zlecs = x + 1;
    pos = zlecs;
    for (; zlecs != zlell && ZC_iblank(zleline[zlecs]); INCPOS(zlecs))
	;
    x = 1 + (zlecs - pos);
    backdel(x, CUT_RAW);
    if (zlecs) {
	int pos = zlecs;
	DECPOS(pos);
	if (ZC_iblank(zleline[pos])) {
	    zlecs = pos;
	    return 0;
	}
    }
    spaceinline(1);
    zleline[zlecs] = ZWC(' ');
    return 0;
}
コード例 #2
0
ファイル: zle_word.c プロジェクト: zsh-users/zsh
int
vibackwardwordend(char **args)
{
    int n = zmult;

    if (n < 0) {
	int ret;
	zmult = -n;
	ret = viforwardwordend(args);
	zmult = n;
	return ret;
    }
    while (n-- && zlecs > 1) {
	int cc = wordclass(zleline[zlecs]);
	DECCS();
	while (zlecs) {
	    if (wordclass(zleline[zlecs]) != cc || ZC_iblank(zleline[zlecs]))
		break;
	    DECCS();
	}
	while (zlecs && ZC_iblank(zleline[zlecs]))
	    DECCS();
    }
    return 0;
}
コード例 #3
0
ファイル: zle_word.c プロジェクト: AMDmi3/zsh
int
vibackwardwordend(char **args)
{
    int n = zmult;

    if (n < 0) {
	int ret;
	zmult = -n;
	ret = viforwardwordend(args);
	zmult = n;
	return ret;
    }
    while (n-- && zlecs > 1) {
	int start = 0;
	if (Z_vialnum(zleline[zlecs]))
	    start = 1;
	else if (!ZC_inblank(zleline[zlecs]))
	    start = 2;
	DECCS();
	while (zlecs) {
	    int same = (start != 1) && ZC_iblank(zleline[zlecs]);
	    if (start)
		same |= Z_vialnum(zleline[zlecs]);
	    if (same == (start == 2))
		break;
	    DECCS();
	}
	while (zlecs && ZC_iblank(zleline[zlecs]))
	    DECCS();
    }
    return 0;
}
コード例 #4
0
ファイル: zle_word.c プロジェクト: zsh-users/zsh
int
vibackwardkillword(UNUSED(char **args))
{
    int x = zlecs, lim = (viinsbegin > findbol()) ? viinsbegin : findbol();
    int n = zmult;

    if (n < 0)
	return 1;
/* this taken from "vibackwardword" */
    while (n--) {
	while (x > lim) {
	    int pos = x;
	    DECPOS(pos);
	    if (!ZC_iblank(zleline[pos]))
		break;
	    x = pos;
	}
	if (x > lim) {
	    int cc;
	    int pos = x;
	    DECPOS(pos);
	    cc = wordclass(zleline[pos]);
	    for (;;) {
		x = pos;
		if (x <= lim)
		    break;
		DECPOS(pos);
		if (wordclass(zleline[pos]) != cc)
		    break;
	    }
	}
    }
    backkill(zlecs - x, CUT_FRONT|CUT_RAW);
    return 0;
}
コード例 #5
0
ファイル: zle_vi.c プロジェクト: jackleaks/zsh
int
vijoin(UNUSED(char **args))
{
    int x, pos;
    int n = zmult;
    int visual = region_active;

    startvichange(-1);
    if (n < 1)
	return 1;
    if (visual && zlecs > mark) {
	exchangepointandmark(zlenoargs);
	x = findeol();
	if (x >= mark) {
	    exchangepointandmark(zlenoargs);
	    return 1;
	}
    } else if ((x = findeol()) == zlell || (visual && x >= mark))
	return 1;

    while (n) {
	zlecs = x + 1;
	pos = zlecs;
	for (; zlecs != zlell && ZC_iblank(zleline[zlecs]); INCPOS(zlecs))
	    ;
	x = 1 + (zlecs - pos);
	backdel(x, CUT_RAW);
	if (zlecs) {
	    int pos = zlecs;
	    DECPOS(pos);
	    if (ZC_iblank(zleline[pos])) {
		zlecs = pos;
		return 0;
	    }
	}
	spaceinline(1);
	zleline[zlecs] = ZWC(' ');
	if ((!visual && --n < 2) || (x = findeol()) == zlell || (visual && x >= mark))
	    return 0;
    }
    return 0;
}
コード例 #6
0
ファイル: zle_word.c プロジェクト: zsh-users/zsh
int
wordclass(ZLE_CHAR_T x)
{
    return (ZC_iblank(x) ? 0 : ((ZC_ialnum(x) || (ZWC('_') == x)) ? 1 :
		ZC_ipunct(x) ? 2 : 3));
}