Re: question: action on reattach

Stefan `Sec` Zehl <[email protected]> Sat, 23 Mar 2019 11:27:11 +0100
Newsgroups gmane.comp.gnu.screen.user
Message-ID <[email protected]>
Hi,

On Thu, Mar 21, 2019 at 23:19 +0100, otheus uibk wrote:
> 3. A feature I sorely miss is the ability to trigger an action on
> re-attach. As a partial solution, I can exploit the SIGWINCH-on-resize
> behavior to do this, but I must pick up the mouse and resize the screen
> (horrors!) on my graphical terminal window. The motivation for having this
> is to trigger updates to shell environment variables which point to
> authentication agents, such as gpg-agent and ssh-agent and X11-forwarding
> stuff. If this feature already exists, can someone tell me the earliest
> version?

Interesting idea to have screen actually trigger it - I have tackled
that environment problem in a similar way, by (mis-)using sigINFO and
having a shell alias to trigger it. It's definitely zsh-specific, but
should be adaptable. ",," needs to be run before attaching the screen,
of course.

function ,, () {
        {
        local vars=''
        for a in TERM DISPLAY SSH_AUTH_SOCK SSH_CONNECTION XAUTHORITY ; do
                if [ -z "${(P)a}" ] ; then
                        echo "unset $a"
                else
                        echo "$a=\"${(P)a}\""
                        vars=($vars $a)
                fi
        done
        [ ! -z "$vars" ] && echo "export $vars"
        } > ~/.,
        kill -INFO `ps auxww| perl -anle '$F[0] eq $ENV{USER} && "@F[10..$#F]" =~ /zsh$/ && "/dev/tty$F[6]" ne "'$TTY'" && print $F[1]'`
        source ~/.,
}


sigINFOd=0

TRAPINFO () {
	up=$(tput up 2>/dev/null || tput cuu1 )
        if [[ -o zle ]] ; then
	    zle -I
	    if [[ "$sigINFOd" == "1" ]] ; then
		echo -n $up$up
	    fi  
	    . ~/.,
	    echo "INFO: TERM=$TERM DISPLAY=$DISPLAY zle<"
	    sigINFOd=1
        else    
	    if [[ "$sigINFOd" == "1" ]] ; then
		echo -n $up
            fi  
	    . ~/.,
	    echo -n "INFO: TERM=$TERM DISPLAY=$DISPLAY nozle<\r"
        fi
}

precmd(){
	sigINFOd=0
}



CU,
	Sec
-- 
[ Recovering from a root breakin - someone says to cvsup and make world ]
Brandon S. Allbery: Not if cvsup itself has been trojaned.
John Polstra:       Cool, that would be one of the first code contributions
                    ever for CVSup. :-)