7 keyiterate(int skip, char *fmt, ...)
15 a = parseattrfmtv(fmt, arg);
18 for(i=0; i<ring.nkey; i++){
20 if(matchattr(a, k->attr, k->privattr)){
29 werrstr("no key found");
34 keylookup(char *fmt, ...)
42 a = parseattrfmtv(fmt, arg);
45 for(i=0; i<ring.nkey; i++){
47 if(matchattr(a, k->attr, k->privattr)){
54 werrstr("no key found");
59 keyfetch(Conv *c, char *fmt, ...)
67 a = parseattrfmtv(fmt, arg);
70 flog("keyfetch %A", a);
73 for(i=0; i<ring.nkey; i++){
77 if(matchattr(a, k->attr, k->privattr)){
79 if(strfindattr(k->attr, "confirm") && confirmkey(c, k) != 1){
84 flog("using key %A %N", k->attr, k->privattr);
92 for(i=0; i<ring.nkey; i++){
96 if(matchattr(a, k->attr, k->privattr)){
98 if(strfindattr(k->attr, "confirm") && confirmkey(c, k) != 1){
107 werrstr("no key found");
120 for(i=0; i<ring.nkey; i++){
121 if(matchattr(k->attr, ring.key[i]->attr, nil)
122 && matchattr(ring.key[i]->attr, k->attr, nil)){
123 keyclose(ring.key[i]);
129 ring.key = erealloc(ring.key, (ring.nkey+1)*sizeof(ring.key[0]));
130 ring.key[ring.nkey++] = k;
142 if(k->proto->closekey)
143 (*k->proto->closekey)(k);
146 freeattr(k->privattr);
151 keyreplace(Conv *c, Key *k, char *fmt, ...)
159 msg = vsmprint(fmt, arg);
161 sysfatal("out of memory");
164 /* replace prompted values with prompts */
165 a = copyattr(k->attr);
166 bp = parseattr(k->proto->keyprompt);
167 for(b=bp; b; b=b->next){
168 a = delattr(a, b->name);
169 a = addattr(a, "%q?", b->name);
173 if(badkey(c, k, msg, a) < 0)
174 convbadkey(c, k, msg, a);
175 kk = keylookup("%A", a);
184 if(strfindattr(kk->attr, "confirm")){
185 if(confirmkey(c, kk) != 1){
186 werrstr("key use not confirmed");
195 keyevict(Conv *c, Key *k, char *fmt, ...)
202 msg = vsmprint(fmt, arg);
204 sysfatal("out of memory");
207 /* replace prompted values with prompts */
208 a = copyattr(k->attr);
209 bp = parseattr(k->proto->keyprompt);
210 for(b=bp; b; b=b->next){
211 a = delattr(a, b->name);
212 a = addattr(a, "%q?", b->name);
216 if(badkey(c, k, msg, nil) < 0)
217 convbadkey(c, k, msg, nil);