## clean up any remaining sockets from gpg forwarding
[[ -v _GNUPG_SOCK_DEST_BASE ]] && rm -f $_GNUPG_SOCK_DEST_BASE*(=N)
+## manually reset terminal for interactive logout
if [[ -o interactive ]] {
+ # send xterm scrollback clear extension just in case:
+ # - TERM may not be set correctly
+ # - terminfo/termcap database entry for reset may be buggy
+ echo -en '\e[3J'
+ # use terminfo/termcap directly instead of relying on system clear/reset:
+ # - often they are just wrappers for ncurses tput or other tools
+ # - they may not even exist on lightweight systems
+ # - provided scripts/binaries may be buggy or broken
+ y=0
+ for x (rs1 rs2 rs3) {
+ [[ -v terminfo[$x] ]] || continue
+ echoti $x
+ y=1
+ }
+ if (( y == 0 )) {
+ for x (rs r1 r2 r3) {
+ [[ -v termcap[$x] ]] || continue
+ echotc $x
+ y=1
+ }
+ }
+ if (( y == 0 )) {
+ # fallback, send ECMA-48 clear
+ echo -en '\e[2J'
+ }
echo logout
- clear
}
### load site-specific
-if [[ -f ${ZDOTDIR:-~}/.zlogout.local ]] { source ${ZDOTDIR:-~}/.zlogout.local }
+load-site-dotfile zlogout