···306 }
307308 fn onSubmit(ptr: ?*anyopaque, ctx: *vxfw.EventContext, input: []const u8) anyerror!void {
000000309 const self: *Channel = @ptrCast(@alignCast(ptr orelse unreachable));
310311 // Copy the input into a temporary buffer
···1806 }
18071808 fn onSubmit(ptr: ?*anyopaque, ctx: *vxfw.EventContext, input: []const u8) anyerror!void {
0000001809 const self: *Client = @ptrCast(@alignCast(ptr orelse unreachable));
18101811 // Copy the input into a temporary buffer
···306 }
307308 fn onSubmit(ptr: ?*anyopaque, ctx: *vxfw.EventContext, input: []const u8) anyerror!void {
309+ // Check the message is not just whitespace
310+ for (input) |b| {
311+ // Break on the first non-whitespace byte
312+ if (!std.ascii.isWhitespace(b)) break;
313+ } else return;
314+315 const self: *Channel = @ptrCast(@alignCast(ptr orelse unreachable));
316317 // Copy the input into a temporary buffer
···1812 }
18131814 fn onSubmit(ptr: ?*anyopaque, ctx: *vxfw.EventContext, input: []const u8) anyerror!void {
1815+ // Check the message is not just whitespace
1816+ for (input) |b| {
1817+ // Break on the first non-whitespace byte
1818+ if (!std.ascii.isWhitespace(b)) break;
1819+ } else return;
1820+1821 const self: *Client = @ptrCast(@alignCast(ptr orelse unreachable));
18221823 // Copy the input into a temporary buffer