Match windows by substring in /window
This could just iterate over idNames instead, but using complete means more recently used windows will match first.master
parent
a8c1f02976
commit
0d888b88d0
|
@ -1,4 +1,4 @@
|
||||||
.Dd May 28, 2021
|
.Dd June 17, 2021
|
||||||
.Dt CATGIRL 1
|
.Dt CATGIRL 1
|
||||||
.Os
|
.Os
|
||||||
.
|
.
|
||||||
|
@ -521,8 +521,9 @@ Temporarily remove a message highlight pattern.
|
||||||
Temporarily remove a message ignore pattern.
|
Temporarily remove a message ignore pattern.
|
||||||
.It Ic /window
|
.It Ic /window
|
||||||
List all windows.
|
List all windows.
|
||||||
.It Ic /window Ar name
|
.It Ic /window Ar name | substring
|
||||||
Switch to window by name.
|
Switch to window by name
|
||||||
|
or matching substring.
|
||||||
.It Ic /window Ar num | Ic / Ns Ar num
|
.It Ic /window Ar num | Ic / Ns Ar num
|
||||||
Switch to window by number.
|
Switch to window by number.
|
||||||
.El
|
.El
|
||||||
|
|
1
chat.h
1
chat.h
|
@ -360,6 +360,7 @@ char *editBuffer(size_t *pos);
|
||||||
void editCompleteAdd(void);
|
void editCompleteAdd(void);
|
||||||
|
|
||||||
const char *complete(uint id, const char *prefix);
|
const char *complete(uint id, const char *prefix);
|
||||||
|
const char *completeSubstr(uint id, const char *substr);
|
||||||
void completeAccept(void);
|
void completeAccept(void);
|
||||||
void completeReject(void);
|
void completeReject(void);
|
||||||
void completeAdd(uint id, const char *str, enum Color color);
|
void completeAdd(uint id, const char *str, enum Color color);
|
||||||
|
|
12
command.c
12
command.c
|
@ -379,7 +379,17 @@ static void commandWindow(uint id, char *params) {
|
||||||
uiShowNum(strtoul(params, NULL, 10));
|
uiShowNum(strtoul(params, NULL, 10));
|
||||||
} else {
|
} else {
|
||||||
id = idFind(params);
|
id = idFind(params);
|
||||||
if (id) uiShowID(id);
|
if (id) {
|
||||||
|
uiShowID(id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (const char *match; (match = completeSubstr(None, params));) {
|
||||||
|
id = idFind(match);
|
||||||
|
if (!id) continue;
|
||||||
|
completeAccept();
|
||||||
|
uiShowID(id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -119,6 +119,15 @@ const char *complete(uint id, const char *prefix) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *completeSubstr(uint id, const char *substr) {
|
||||||
|
for (match = (match ? match->next : head); match; match = match->next) {
|
||||||
|
if (match->id && match->id != id) continue;
|
||||||
|
if (!strcasestr(match->str, substr)) continue;
|
||||||
|
return match->str;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void completeAccept(void) {
|
void completeAccept(void) {
|
||||||
if (match) prepend(detach(match));
|
if (match) prepend(detach(match));
|
||||||
match = NULL;
|
match = NULL;
|
||||||
|
|
Loading…
Reference in New Issue