From e1e29d9d93f1e5cd8ce74be6f6b074efc8db6d59 Mon Sep 17 00:00:00 2001 From: Aleteoryx Date: Fri, 19 Sep 2025 18:21:09 -0400 Subject: [PATCH] various improvements --- ntalk.tcl | 94 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 80 insertions(+), 14 deletions(-) diff --git a/ntalk.tcl b/ntalk.tcl index 54a40cc98ff994c20a6d0142c80c832b0bfea10f..9a2135c7e4fcd521b35cd93071fe09318c06686b 100755 --- a/ntalk.tcl +++ b/ntalk.tcl @@ -4,16 +4,41 @@ set confdir ~/.config/ntalk set scriptpath "${confdir}/cscript.tcl" file mkdir $confdir + +proc quit {} {exit 0} +proc restart {} { + global argv0 + exec [info nameofexecutable] $argv0 & + exit 0 +} + + +### FONT STUFF ### + +font create testingFont -size 100 + +proc make16 {} { + foreach font {TkDefaultFont TkFixedFont TkTextFont} { + font configure testingFont -family [font configure $font -family] + set fontsize [expr {int(ceil(16.0 / [font metrics testingFont -linespace] * 100))}] + font configure $font -size $fontsize + } +} +make16 + + ### UI SETUP ### frame .foot entry .foot.input label .foot.msgs -textvariable lastmsg +label .foot.name scrollbar .scroll -command {.buffer yview} -text .buffer -width 72 -yscrollcommand {.scroll set} -takefocus 1 +text .buffer -width 72 -yscrollcommand {.scroll set} -pack .foot.msgs -side right +pack .foot.msgs -side right +pack .foot.name -side left pack .foot.input -side bottom -fill x pack .foot -side bottom -fill x @@ -29,24 +54,35 @@ if {[catch {package require history}] == 0} { } } +bind . quit +bind . restart + ### CONNECTING ### +set user marmalade +set cmds {} +set sok {} +set server "the web" if [file readable $scriptpath] { set fp [open $scriptpath] .buffer insert 1.0 [read $fp] close $fp } else { - .buffer insert 1.0 {# input connection script, then hit C-RET -set sok [socket localhost 44322] + .buffer insert 1.0 {# input connection script, then hit C-RET. your changes will be saved. +set server localhost +set sok [socket $server 44322] set user marmalade } } bind .buffer { - set cscript [.buffer get 1.0 end] + eval [.buffer get 1.0 end] + make16 + if {$sok != {}} { set cscript [.buffer get 1.0 end] } } .buffer mark set insert end +focus .buffer vwait cscript bind .buffer {} .buffer configure -state disabled @@ -55,9 +91,11 @@ set fp [open $scriptpath w] puts $fp [string trim $cscript] close $fp -eval $cscript fconfigure $sok -translation lf; # dammit -set lastmsg 0 +set user [string trim $user] +.foot.name configure -text "${user}:" + +wm title . "nanochatting on $server" ### NETCODE ### @@ -65,12 +103,15 @@ set lastmsg 0 proc sendl {line} { global sok regsub "\n" $line " " line - puts $sok $line - flush $sok + if [catch { + puts $sok $line + flush $sok + }] { restart } } proc recvl {} { global sok - gets $sok + if [catch { gets $sok ret }] { restart } + return $ret } proc recvlines {{bd 0}} { global lastmsg @@ -128,6 +169,11 @@ proc skip {} { recvlines } +proc quit {} { + sendl QUIT + exit 0 +} + ### ACTUAL CLIENT CODE LMAO ### @@ -148,14 +194,23 @@ proc pollmsgs {} { ### BOOT ### +focus .foot.input +set lastmsg 0 last 16 after 10000 pollmsgs bind .foot.input [concat [bind .foot.input ] ";" { set line [.foot.input get] - switch -glob -- $line { + .foot.input delete 0 end + switch -glob -- $line [concat $cmds { /hist { hist } + /quit { + quit + } + /restart { + restart + } {/last *} { last [string range $line 6 end] } @@ -168,10 +223,21 @@ bind .foot.input [concat [bind .foot.input ] ";" { {/my *} { sendmsg "${user}'s [string range $line 4 end]" } + {/nick *} { + set user [string trim [string range $line 6 end]] + .foot.name configure -text "${user}:" + } + {/eval *} { + .foot.input insert 0 [eval [string range $line 6 end]] + } + {/exec *} { + .foot.input insert 0 [exec sh -c [string range $line 6 end]] + } + {/calc *} { + .foot.input insert 0 [expr [string range $line 6 end]] + } default { sendmsg "$user: $line" } - } - - .foot.input delete 0 end + }] }]