mirror of
https://github.com/zsh-users/zsh
synced 2024-09-29 12:44:46 +00:00
20331: Use internal zlong variables for consistency
20332: Add WIDGETSTYLE zle parameter
This commit is contained in:
parent
65bbf722d9
commit
6b1dc0f701
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2004-09-09 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* 20332: Src/Zle/zle_params.c, Doc/Zsh/zle.yo: add WIDGETSTYLE zle
|
||||
parameter to reveal widget implementation: function name for zle
|
||||
-N widgets and internal completion widget for zle -C widgets.
|
||||
|
||||
* 20331: Src/builtin.c, Src/hist.c, Src/params.c, Src/prompt.c,
|
||||
Src/zsh.h, Src/Zle/compctl.c: Where possible use internal zlong
|
||||
variables for integers that correspond to shell variables.
|
||||
|
||||
2004-09-08 Peter Stephenson <pws@csr.com>
|
||||
|
||||
* 20330: Src/Zle/zle_thingy.c, Doc/Zsh/zle.yo: rationalise status
|
||||
|
|
|
@ -732,6 +732,16 @@ vindex(WIDGET)
|
|||
item(tt(WIDGET) (scalar))(
|
||||
The name of the widget currently being executed; read-only.
|
||||
)
|
||||
vindex(WIDGETSTYLE)
|
||||
item(tt(WIDGET) (scalar))(
|
||||
Describes the implementation behind the widget currently being executed;
|
||||
the second argument that followed tt(zle -C) or tt(zle -N) when the widget
|
||||
was defined, if any. If the widget was defined with tt(zle -N) and there was
|
||||
no second argument this is the same as the first argument. Hence for
|
||||
tt(zle -N) this gives the name of the function that implements the widget,
|
||||
and for tt(zle -C) this gives the internal completion widget that defines
|
||||
the type of completion. Read-only.
|
||||
)
|
||||
enditem()
|
||||
|
||||
subsect(Special Widget)
|
||||
|
|
|
@ -3692,7 +3692,7 @@ makecomplistflags(Compctl cc, char *s, int incmd, int compadd)
|
|||
/* We have a pattern to take things from the history. */
|
||||
Patprog pprogc = NULL;
|
||||
char *e, *h, hpatsav;
|
||||
int i = addhistnum(curhist,-1,HIST_FOREIGN), n = cc->hnum;
|
||||
zlong i = addhistnum(curhist,-1,HIST_FOREIGN), n = cc->hnum;
|
||||
Histent he = gethistent(i, GETHIST_UPWARD);
|
||||
|
||||
/* Parse the pattern, if it isn't the null string. */
|
||||
|
|
|
@ -55,43 +55,45 @@ static struct zleparam {
|
|||
} zleparams[] = {
|
||||
{ "BUFFER", PM_SCALAR, FN(set_buffer), FN(get_buffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "BUFFERLINES", PM_INTEGER | PM_READONLY, NULL, FN(get_bufferlines),
|
||||
zleunsetfn, NULL },
|
||||
{ "CONTEXT", PM_SCALAR | PM_READONLY, NULL, FN(get_context),
|
||||
zleunsetfn, NULL },
|
||||
{ "CURSOR", PM_INTEGER, FN(set_cursor), FN(get_cursor),
|
||||
zleunsetfn, NULL },
|
||||
{ "MARK", PM_INTEGER, FN(set_mark), FN(get_mark),
|
||||
zleunsetfn, NULL },
|
||||
{ "LBUFFER", PM_SCALAR, FN(set_lbuffer), FN(get_lbuffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "RBUFFER", PM_SCALAR, FN(set_rbuffer), FN(get_rbuffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "PREBUFFER", PM_SCALAR | PM_READONLY, NULL, FN(get_prebuffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "WIDGET", PM_SCALAR | PM_READONLY, NULL, FN(get_widget),
|
||||
zleunsetfn, NULL },
|
||||
{ "LASTWIDGET", PM_SCALAR | PM_READONLY, NULL, FN(get_lwidget),
|
||||
{ "CUTBUFFER", PM_SCALAR, FN(set_cutbuffer), FN(get_cutbuffer),
|
||||
unset_cutbuffer, NULL },
|
||||
{ "HISTNO", PM_INTEGER, FN(set_histno), FN(get_histno),
|
||||
zleunsetfn, NULL },
|
||||
{ "KEYMAP", PM_SCALAR | PM_READONLY, NULL, FN(get_keymap),
|
||||
zleunsetfn, NULL },
|
||||
{ "KEYS", PM_SCALAR | PM_READONLY, NULL, FN(get_keys),
|
||||
zleunsetfn, NULL },
|
||||
{ "NUMERIC", PM_INTEGER | PM_UNSET, FN(set_numeric), FN(get_numeric),
|
||||
unset_numeric, NULL },
|
||||
{ "HISTNO", PM_INTEGER, FN(set_histno), FN(get_histno),
|
||||
zleunsetfn, NULL },
|
||||
{ "BUFFERLINES", PM_INTEGER | PM_READONLY, NULL, FN(get_bufferlines),
|
||||
zleunsetfn, NULL },
|
||||
{ "PENDING", PM_INTEGER | PM_READONLY, NULL, FN(get_pending),
|
||||
zleunsetfn, NULL },
|
||||
{ "CUTBUFFER", PM_SCALAR, FN(set_cutbuffer), FN(get_cutbuffer),
|
||||
unset_cutbuffer, NULL },
|
||||
{ "killring", PM_ARRAY, FN(set_killring), FN(get_killring),
|
||||
unset_killring, NULL },
|
||||
{ "PREDISPLAY", PM_SCALAR, FN(set_predisplay), FN(get_predisplay),
|
||||
zleunsetfn, NULL },
|
||||
{ "POSTDISPLAY", PM_SCALAR, FN(set_postdisplay), FN(get_postdisplay),
|
||||
zleunsetfn, NULL },
|
||||
{ "LASTSEARCH", PM_SCALAR | PM_READONLY, NULL, FN(get_lsearch),
|
||||
zleunsetfn, NULL },
|
||||
{ "CONTEXT", PM_SCALAR | PM_READONLY, NULL, FN(get_context),
|
||||
{ "LASTWIDGET", PM_SCALAR | PM_READONLY, NULL, FN(get_lwidget),
|
||||
zleunsetfn, NULL },
|
||||
{ "LBUFFER", PM_SCALAR, FN(set_lbuffer), FN(get_lbuffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "MARK", PM_INTEGER, FN(set_mark), FN(get_mark),
|
||||
zleunsetfn, NULL },
|
||||
{ "NUMERIC", PM_INTEGER | PM_UNSET, FN(set_numeric), FN(get_numeric),
|
||||
unset_numeric, NULL },
|
||||
{ "PENDING", PM_INTEGER | PM_READONLY, NULL, FN(get_pending),
|
||||
zleunsetfn, NULL },
|
||||
{ "POSTDISPLAY", PM_SCALAR, FN(set_postdisplay), FN(get_postdisplay),
|
||||
zleunsetfn, NULL },
|
||||
{ "PREBUFFER", PM_SCALAR | PM_READONLY, NULL, FN(get_prebuffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "PREDISPLAY", PM_SCALAR, FN(set_predisplay), FN(get_predisplay),
|
||||
zleunsetfn, NULL },
|
||||
{ "RBUFFER", PM_SCALAR, FN(set_rbuffer), FN(get_rbuffer),
|
||||
zleunsetfn, NULL },
|
||||
{ "WIDGET", PM_SCALAR | PM_READONLY, NULL, FN(get_widget),
|
||||
zleunsetfn, NULL },
|
||||
{ "WIDGETSTYLE", PM_SCALAR | PM_READONLY, NULL, FN(get_widgetstyle),
|
||||
zleunsetfn, NULL },
|
||||
{ NULL, 0, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
@ -278,6 +280,21 @@ get_widget(UNUSED(Param pm))
|
|||
return bindk->nam;
|
||||
}
|
||||
|
||||
/**/
|
||||
static char *
|
||||
get_widgetstyle(UNUSED(Param pm))
|
||||
{
|
||||
Widget widget = bindk->widget;
|
||||
int flags = widget->flags;
|
||||
|
||||
if (flags & WIDGET_INT)
|
||||
return ".internal"; /* Don't see how this can ever be returned... */
|
||||
else if (flags & WIDGET_NCOMP)
|
||||
return widget->u.comp.wid;
|
||||
else
|
||||
return widget->u.fnnam;
|
||||
}
|
||||
|
||||
/**/
|
||||
static char *
|
||||
get_lwidget(UNUSED(Param pm))
|
||||
|
|
|
@ -1293,7 +1293,8 @@ printif(char *str, int c)
|
|||
int
|
||||
bin_fc(char *nam, char **argv, Options ops, int func)
|
||||
{
|
||||
int first = -1, last = -1, retval;
|
||||
zlong first = -1, last = -1;
|
||||
int retval;
|
||||
char *s;
|
||||
struct asgment *asgf = NULL, *asgl = NULL;
|
||||
Patprog pprog = NULL;
|
||||
|
@ -1305,15 +1306,15 @@ bin_fc(char *nam, char **argv, Options ops, int func)
|
|||
}
|
||||
if (OPT_ISSET(ops,'p')) {
|
||||
char *hf = "";
|
||||
int hs = DEFAULT_HISTSIZE;
|
||||
int shs = 0;
|
||||
zlong hs = DEFAULT_HISTSIZE;
|
||||
zlong shs = 0;
|
||||
int level = OPT_ISSET(ops,'a') ? locallevel : -1;
|
||||
if (*argv) {
|
||||
hf = *argv++;
|
||||
if (*argv) {
|
||||
hs = atoi(*argv++);
|
||||
hs = zstrtol(*argv++, NULL, 10);
|
||||
if (*argv)
|
||||
shs = atoi(*argv++);
|
||||
shs = zstrtol(*argv++, NULL, 10);
|
||||
else
|
||||
shs = hs;
|
||||
if (*argv) {
|
||||
|
@ -1490,10 +1491,10 @@ bin_fc(char *nam, char **argv, Options ops, int func)
|
|||
/* get the history event associated with s */
|
||||
|
||||
/**/
|
||||
static int
|
||||
static zlong
|
||||
fcgetcomm(char *s)
|
||||
{
|
||||
int cmd;
|
||||
zlong cmd;
|
||||
|
||||
/* First try to match a history number. Negative *
|
||||
* numbers indicate reversed numbering. */
|
||||
|
@ -1558,9 +1559,11 @@ fcsubs(char **sp, struct asgment *sub)
|
|||
|
||||
/**/
|
||||
static int
|
||||
fclist(FILE *f, Options ops, int first, int last, struct asgment *subs, Patprog pprog)
|
||||
fclist(FILE *f, Options ops, zlong first, zlong last,
|
||||
struct asgment *subs, Patprog pprog)
|
||||
{
|
||||
int fclistdone = 0, tmp;
|
||||
int fclistdone = 0;
|
||||
zlong tmp;
|
||||
char *s;
|
||||
Histent ent;
|
||||
|
||||
|
@ -1592,7 +1595,9 @@ fclist(FILE *f, Options ops, int first, int last, struct asgment *subs, Patprog
|
|||
|
||||
/* do numbering */
|
||||
if (!OPT_ISSET(ops,'n')) {
|
||||
fprintf(f, "%5d%c ", ent->histnum,
|
||||
char buf[DIGBUFSIZE];
|
||||
convbase(buf, ent->histnum, 10);
|
||||
fprintf(f, "%5s%c ", buf,
|
||||
ent->flags & HIST_FOREIGN? '*' : ' ');
|
||||
}
|
||||
/* output actual time (and possibly date) of execution of the
|
||||
|
|
48
Src/hist.c
48
Src/hist.c
|
@ -79,7 +79,7 @@ mod_export int excs, exlast;
|
|||
*/
|
||||
|
||||
/**/
|
||||
mod_export int curhist;
|
||||
mod_export zlong curhist;
|
||||
|
||||
/**/
|
||||
struct histent curline;
|
||||
|
@ -87,7 +87,7 @@ struct histent curline;
|
|||
/* current line count of allocated history entries */
|
||||
|
||||
/**/
|
||||
int histlinect;
|
||||
zlong histlinect;
|
||||
|
||||
/* The history lines are kept in a hash, and also doubly-linked in a ring */
|
||||
|
||||
|
@ -99,12 +99,12 @@ mod_export Histent hist_ring;
|
|||
/* capacity of history lists */
|
||||
|
||||
/**/
|
||||
int histsiz;
|
||||
zlong histsiz;
|
||||
|
||||
/* desired history-file size (in lines) */
|
||||
|
||||
/**/
|
||||
int savehistsiz;
|
||||
zlong savehistsiz;
|
||||
|
||||
/* if = 1, we have performed history substitution on the current line *
|
||||
* if = 2, we have used the 'p' modifier */
|
||||
|
@ -178,7 +178,7 @@ int hlinesz;
|
|||
|
||||
/* default event (usually curhist-1, that is, "!!") */
|
||||
|
||||
static int defev;
|
||||
static zlong defev;
|
||||
|
||||
/* add a character to the current history word */
|
||||
|
||||
|
@ -339,8 +339,10 @@ getargc(Histent ehist)
|
|||
static int
|
||||
histsubchar(int c)
|
||||
{
|
||||
int ev, farg, evset = -1, larg, argc, cflag = 0, bflag = 0;
|
||||
static int mev = -1, marg = -1;
|
||||
int farg, evset = -1, larg, argc, cflag = 0, bflag = 0;
|
||||
zlong ev;
|
||||
static int marg = -1;
|
||||
static zlong mev = -1;
|
||||
char buf[256], *ptr;
|
||||
char *sline;
|
||||
Histent ehist;
|
||||
|
@ -410,7 +412,7 @@ histsubchar(int c)
|
|||
return -1;
|
||||
}
|
||||
} else {
|
||||
int t0;
|
||||
zlong t0;
|
||||
|
||||
for (;;) {
|
||||
if (inblank(c) || c == ';' || c == ':' || c == '^' ||
|
||||
|
@ -448,7 +450,7 @@ histsubchar(int c)
|
|||
ev = defev;
|
||||
evset = 0;
|
||||
}
|
||||
} else if ((t0 = atoi(buf))) {
|
||||
} else if ((t0 = zstrtol(buf, NULL, 10))) {
|
||||
ev = (t0 < 0) ? addhistnum(curhist,t0,HIST_FOREIGN) : t0;
|
||||
evset = 1;
|
||||
} else if ((unsigned)*buf == bangchar) {
|
||||
|
@ -839,8 +841,8 @@ histremovedups(void)
|
|||
}
|
||||
|
||||
/**/
|
||||
mod_export int
|
||||
addhistnum(int hl, int n, int xflags)
|
||||
mod_export zlong
|
||||
addhistnum(zlong hl, int n, int xflags)
|
||||
{
|
||||
int dir = n < 0? -1 : n > 0? 1 : 0;
|
||||
Histent he = gethistent(hl, dir);
|
||||
|
@ -892,7 +894,7 @@ down_histent(Histent he)
|
|||
|
||||
/**/
|
||||
mod_export Histent
|
||||
gethistent(int ev, int nearmatch)
|
||||
gethistent(zlong ev, int nearmatch)
|
||||
{
|
||||
Histent he;
|
||||
|
||||
|
@ -927,7 +929,7 @@ putoldhistentryontop(short keep_going)
|
|||
Histent he = keep_going? next : hist_ring->down;
|
||||
next = he->down;
|
||||
if (isset(HISTEXPIREDUPSFIRST) && !(he->flags & HIST_DUP)) {
|
||||
static int max_unique_ct = 0;
|
||||
static zlong max_unique_ct = 0;
|
||||
if (!keep_going)
|
||||
max_unique_ct = savehistsiz;
|
||||
do {
|
||||
|
@ -1346,7 +1348,7 @@ getargspec(int argc, int marg, int evset)
|
|||
/* do ?foo? search */
|
||||
|
||||
/**/
|
||||
static int
|
||||
static zlong
|
||||
hconsearch(char *str, int *marg)
|
||||
{
|
||||
int t1 = 0;
|
||||
|
@ -1370,7 +1372,7 @@ hconsearch(char *str, int *marg)
|
|||
/* do !foo search */
|
||||
|
||||
/**/
|
||||
int
|
||||
zlong
|
||||
hcomsearch(char *str)
|
||||
{
|
||||
Histent he;
|
||||
|
@ -1795,7 +1797,7 @@ static struct histfile_stats {
|
|||
char *text;
|
||||
time_t stim, mtim;
|
||||
off_t fpos, fsiz;
|
||||
int next_write_ev;
|
||||
zlong next_write_ev;
|
||||
} lasthist;
|
||||
|
||||
static struct histsave {
|
||||
|
@ -1803,16 +1805,16 @@ static struct histsave {
|
|||
char *histfile;
|
||||
HashTable histtab;
|
||||
Histent hist_ring;
|
||||
int curhist;
|
||||
int histlinect;
|
||||
int histsiz;
|
||||
int savehistsiz;
|
||||
zlong curhist;
|
||||
zlong histlinect;
|
||||
zlong histsiz;
|
||||
zlong savehistsiz;
|
||||
int locallevel;
|
||||
} *histsave_stack;
|
||||
static int histsave_stack_size = 0;
|
||||
static int histsave_stack_pos = 0;
|
||||
|
||||
static int histfile_linect;
|
||||
static zlong histfile_linect;
|
||||
|
||||
static int
|
||||
readhistline(int start, char **bufp, int *bufsiz, FILE *in)
|
||||
|
@ -2006,7 +2008,7 @@ savehistfile(char *fn, int err, int writeflags)
|
|||
char *t, *start = NULL;
|
||||
FILE *out;
|
||||
Histent he;
|
||||
int xcurhist = curhist - !!(histactive & HA_ACTIVE);
|
||||
zlong xcurhist = curhist - !!(histactive & HA_ACTIVE);
|
||||
int extended_history = isset(EXTENDEDHISTORY);
|
||||
|
||||
if (!interact || savehistsiz <= 0 || !hist_ring
|
||||
|
@ -2345,7 +2347,7 @@ bufferwords(LinkList list, char *buf, int *index)
|
|||
|
||||
/**/
|
||||
int
|
||||
pushhiststack(char *hf, int hs, int shs, int level)
|
||||
pushhiststack(char *hf, zlong hs, zlong shs, int level)
|
||||
{
|
||||
struct histsave *h;
|
||||
int curline_in_ring = (histactive & HA_ACTIVE) && hist_ring == &curline;
|
||||
|
|
27
Src/params.c
27
Src/params.c
|
@ -2493,7 +2493,7 @@ nullintsetfn(UNUSED(Param pm), UNUSED(zlong x))
|
|||
mod_export zlong
|
||||
intvargetfn(Param pm)
|
||||
{
|
||||
return *((zlong *)pm->u.data);
|
||||
return *pm->u.valptr;
|
||||
}
|
||||
|
||||
/* Function to set value of generic special integer *
|
||||
|
@ -2504,7 +2504,7 @@ intvargetfn(Param pm)
|
|||
mod_export void
|
||||
intvarsetfn(Param pm, zlong x)
|
||||
{
|
||||
*((zlong *)pm->u.data) = x;
|
||||
*pm->u.valptr = x;
|
||||
}
|
||||
|
||||
/* Function to set value of any ZLE-related integer *
|
||||
|
@ -2515,7 +2515,7 @@ intvarsetfn(Param pm, zlong x)
|
|||
void
|
||||
zlevarsetfn(Param pm, zlong x)
|
||||
{
|
||||
zlong *p = (zlong *)pm->u.data;
|
||||
zlong *p = pm->u.valptr;
|
||||
|
||||
*p = x;
|
||||
if (p == &lines || p == &columns)
|
||||
|
@ -2745,7 +2745,13 @@ randomsetfn(UNUSED(Param pm), zlong v)
|
|||
zlong
|
||||
intsecondsgetfn(Param pm)
|
||||
{
|
||||
return (zlong)floatsecondsgetfn(pm);
|
||||
struct timeval now;
|
||||
struct timezone dummy_tz;
|
||||
|
||||
gettimeofday(&now, &dummy_tz);
|
||||
|
||||
return (zlong)(now.tv_sec - shtimer.tv_sec) +
|
||||
(zlong)(now.tv_usec - shtimer.tv_usec) / (zlong)1000000;
|
||||
}
|
||||
|
||||
/* Function to set value of special parameter `SECONDS' */
|
||||
|
@ -2754,7 +2760,16 @@ intsecondsgetfn(Param pm)
|
|||
void
|
||||
intsecondssetfn(Param pm, zlong x)
|
||||
{
|
||||
floatsecondssetfn(pm, (double)x);
|
||||
struct timeval now;
|
||||
struct timezone dummy_tz;
|
||||
zlong diff;
|
||||
|
||||
gettimeofday(&now, &dummy_tz);
|
||||
diff = (zlong)now.tv_sec - x;
|
||||
shtimer.tv_sec = diff;
|
||||
if ((zlong)shtimer.tv_sec != diff)
|
||||
zwarn("SECONDS truncated on assignment", NULL, 0);
|
||||
shtimer.tv_usec = 0;
|
||||
}
|
||||
|
||||
/**/
|
||||
|
@ -3090,6 +3105,8 @@ void
|
|||
errnosetfn(UNUSED(Param pm), zlong x)
|
||||
{
|
||||
errno = (int)x;
|
||||
if ((zlong)errno != x)
|
||||
zwarn("errno truncated on assignment", NULL, 0);
|
||||
}
|
||||
|
||||
/* Function to get value for special parameter `ERRNO' */
|
||||
|
|
|
@ -384,7 +384,7 @@ putpromptchar(int doprint, int endchar)
|
|||
case 'h':
|
||||
case '!':
|
||||
addbufspc(DIGBUFSIZE);
|
||||
sprintf(bp, "%d", curhist);
|
||||
convbase(bp, curhist, 10);
|
||||
bp += strlen(bp);
|
||||
break;
|
||||
case 'j':
|
||||
|
@ -676,7 +676,7 @@ putpromptchar(int doprint, int endchar)
|
|||
pputc('!');
|
||||
} else {
|
||||
addbufspc(DIGBUFSIZE);
|
||||
sprintf(bp, "%d", curhist);
|
||||
convbase(bp, curhist, 10);
|
||||
bp += strlen(bp);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1129,6 +1129,7 @@ struct param {
|
|||
char **arr; /* value if declared array (PM_ARRAY) */
|
||||
char *str; /* value if declared string (PM_SCALAR) */
|
||||
zlong val; /* value if declared integer (PM_INTEGER) */
|
||||
zlong *valptr; /* value if special pointer to integer */
|
||||
double dval; /* value if declared float
|
||||
(PM_EFLOAT|PM_FFLOAT) */
|
||||
HashTable hash; /* value if declared assoc (PM_HASHED) */
|
||||
|
@ -1334,7 +1335,7 @@ struct histent {
|
|||
short *words; /* Position of words in history */
|
||||
/* line: as pairs of start, end */
|
||||
int nwords; /* Number of words in history line */
|
||||
int histnum; /* A sequential history number */
|
||||
zlong histnum; /* A sequential history number */
|
||||
};
|
||||
|
||||
#define HIST_MAKEUNIQUE 0x00000001 /* Kill this new entry if not unique */
|
||||
|
|
Loading…
Reference in a new issue