This code is a collection of command prompts for tclline ([Pure-tcl readline2]). The prompts `path` and `pathColor` are extracted from its source code; `fish` (inspired by the https://en.wikipedia.org/wiki/Fish_(Unix_shell)%|%fish shell%|%) is by [dbohdan]. ====== namespace eval ::TclReadLine::prompts { variable shortenPath { original {} short {} } } proc ::TclReadLine::prompts::user-at-host {} { return $::tcl_platform(user)@[info hostname] } proc ::TclReadLine::prompts::shorten-path path { # Cache the short path, since this runs on every keypress. variable shortenPath if {[dict get $shortenPath original] eq $path} { return [dict get $shortenPath short] } set splitPath [file split $path] set result {} foreach fragment [lrange $splitPath 0 end-1] { regexp {^\.{0,2}.} $fragment fragment lappend result $fragment } set short [file join {*}$result [lindex $splitPath end]] dict set shortenPath original $path dict set shortenPath short $short return $short } # Looks like this: # tclsh-8.6.3 [Downloads] % set ::TclReadLine::prompts::path {tclsh[info patchlevel] \[[pwd]\]% } # Looks like the above but with color. set ::TclReadLine::prompts::pathColor {\033\[36mtclsh-[info patchlevel]\033\[0m \[\033\[34m[file tail [pwd]\033\[0m]\]\033\[31m % \033\[0m} # A fish shell-style prompt with a clock. # Looks like this: # 14:49:52 user@host /h/d/Downloads> set ::TclReadLine::prompts::fish {[clock format [clock seconds] -format {%H:%M:%S}] [::TclReadLine::prompts::user-at-host] [::TclReadLine::prompts::shorten-path [pwd]]> } set ::TclReadLine::PROMPT $::TclReadLine::prompts::path ====== <>Dev. Tools