Add /close
parent
55e721da42
commit
943502ea82
|
@ -146,6 +146,8 @@ Send a raw IRC command.
|
||||||
.
|
.
|
||||||
.Ss UI Commands
|
.Ss UI Commands
|
||||||
.Bl -tag -width Ds
|
.Bl -tag -width Ds
|
||||||
|
.It Ic /close Op Ar name | num
|
||||||
|
Close the named, numbered or current window.
|
||||||
.It Ic /window Ar name
|
.It Ic /window Ar name
|
||||||
Switch to window by name.
|
Switch to window by name.
|
||||||
.It Ic /window Ar num , Ic / Ns Ar num
|
.It Ic /window Ar num , Ic / Ns Ar num
|
||||||
|
|
2
chat.h
2
chat.h
|
@ -128,6 +128,8 @@ void uiHide(void);
|
||||||
void uiDraw(void);
|
void uiDraw(void);
|
||||||
void uiShowID(size_t id);
|
void uiShowID(size_t id);
|
||||||
void uiShowNum(size_t num);
|
void uiShowNum(size_t num);
|
||||||
|
void uiCloseID(size_t id);
|
||||||
|
void uiCloseNum(size_t id);
|
||||||
void uiRead(void);
|
void uiRead(void);
|
||||||
void uiWrite(size_t id, enum Heat heat, const time_t *time, const char *str);
|
void uiWrite(size_t id, enum Heat heat, const time_t *time, const char *str);
|
||||||
void uiFormat(
|
void uiFormat(
|
||||||
|
|
12
command.c
12
command.c
|
@ -100,10 +100,22 @@ static void commandWindow(size_t id, char *params) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void commandClose(size_t id, char *params) {
|
||||||
|
if (!params) {
|
||||||
|
uiCloseID(id);
|
||||||
|
} else if (isdigit(params[0])) {
|
||||||
|
uiCloseNum(strtoul(params, NULL, 10));
|
||||||
|
} else {
|
||||||
|
id = idFind(params);
|
||||||
|
if (id) uiCloseID(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static const struct Handler {
|
static const struct Handler {
|
||||||
const char *cmd;
|
const char *cmd;
|
||||||
Command *fn;
|
Command *fn;
|
||||||
} Commands[] = {
|
} Commands[] = {
|
||||||
|
{ "/close", commandClose },
|
||||||
{ "/join", commandJoin },
|
{ "/join", commandJoin },
|
||||||
{ "/me", commandMe },
|
{ "/me", commandMe },
|
||||||
{ "/nick", commandNick },
|
{ "/nick", commandNick },
|
||||||
|
|
28
ui.c
28
ui.c
|
@ -573,6 +573,34 @@ void uiShowNum(size_t num) {
|
||||||
windowShow(window);
|
windowShow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void windowClose(struct Window *window) {
|
||||||
|
if (window->id == Network) return;
|
||||||
|
if (windows.active == window) {
|
||||||
|
windowShow(window->prev ? window->prev : window->next);
|
||||||
|
}
|
||||||
|
if (windows.other == window) windows.other = NULL;
|
||||||
|
windowRemove(window);
|
||||||
|
for (size_t i = 0; i < BufferCap; ++i) {
|
||||||
|
free(window->buffer.lines[i]);
|
||||||
|
}
|
||||||
|
delwin(window->pad);
|
||||||
|
free(window);
|
||||||
|
statusUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiCloseID(size_t id) {
|
||||||
|
windowClose(windowFor(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiCloseNum(size_t num) {
|
||||||
|
struct Window *window = windows.head;
|
||||||
|
for (size_t i = 0; i < num; ++i) {
|
||||||
|
window = window->next;
|
||||||
|
if (!window) return;
|
||||||
|
}
|
||||||
|
windowClose(window);
|
||||||
|
}
|
||||||
|
|
||||||
static void keyCode(int code) {
|
static void keyCode(int code) {
|
||||||
size_t id = windows.active->id;
|
size_t id = windows.active->id;
|
||||||
switch (code) {
|
switch (code) {
|
||||||
|
|
Loading…
Reference in New Issue