diff --git a/termtcp.c b/termtcp.c index f5db8f9..febe042 100644 --- a/termtcp.c +++ b/termtcp.c @@ -241,6 +241,7 @@ static void session_switch(int n); static void session_next(void); static void session_prev(void); static void session_new(void); +static void session_close(void); static void do_connect(int idx); /* ═══════════════════════════════════════════════════════════ @@ -2688,6 +2689,22 @@ static void session_new(void) do_connect(idx); } +static void session_close(void) +{ + if (session_count() <= 1) { + if (S->connected) tcp_disconnect(); + if (S->logging) close_log(); + endwin(); + exit(0); + } + int idx = session_index(); + if (S->connected) tcp_disconnect(); + if (S->logging) close_log(); + session_next(); /* S now points to another active session */ + sessions[idx].active = 0; + draw_status(); +} + /* ═══════════════════════════════════════════════════════════ * Connect helper * ═══════════════════════════════════════════════════════════ */ @@ -2829,13 +2846,14 @@ static void ctrl_a_menu(void) mvwprintw(w, 2, 4, "C - Connect"); mvwprintw(w, 3, 4, "D - Disconnect"); mvwprintw(w, 4, 4, "N - New Session"); - mvwprintw(w, 5, 4, "1-4 Switch Session"); - mvwprintw(w, 6, 4, "O - Config / Host Editor"); - mvwprintw(w, 7, 4, "M - Monitor Options"); - mvwprintw(w, 8, 4, "L - Toggle Log"); - mvwprintw(w, 9, 4, "F - Forms & Check-Ins"); - mvwprintw(w, 10, 4, "H - Help"); - mvwprintw(w, 11, 4, "Q - Quit"); + mvwprintw(w, 5, 4, "X - Close Session"); + mvwprintw(w, 6, 4, "1-4 Switch Session"); + mvwprintw(w, 7, 4, "O - Config / Host Editor"); + mvwprintw(w, 8, 4, "M - Monitor Options"); + mvwprintw(w, 9, 4, "L - Toggle Log"); + mvwprintw(w, 10, 4, "F - Forms & Check-Ins"); + mvwprintw(w, 11, 4, "H - Help"); + mvwprintw(w, 12, 4, "Q - Quit"); mvwprintw(w, mh-2, 4, "Esc = close"); wrefresh(w); @@ -2895,6 +2913,10 @@ static void ctrl_a_menu(void) session_new(); break; + case 'x': + session_close(); + break; + case '1': case '2': case '3': case '4': session_switch(ch - '1'); break;