123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- .TH RWD 1
- .SH NAME
- rwd, conswdir \- maintain remote working directory
- .SH SYNOPSIS
- .B rwd
- .I path
- .PP
- .B conswdir
- [
- .I prog
- ]
- .SH DESCRIPTION
- .I Rwd
- and
- .I conswdir
- conspire to keep
- .IR rio (4)
- and
- .IR acme (4)
- informed about the current directory on
- remote systems during login sessions.
- .I Rio
- and
- .I acme
- include this information in plumb messages sent to
- .IR plumber (4).
- If the remote system's name space is mounted in the
- plumber's name space,
- the end result is that file paths printed during the session
- are plumbable.
- .PP
- .I Rwd
- informs
- .IR rio
- and
- .IR acme
- of directory changes.
- The name of the remote machine is taken from
- the environment variable
- .BR $remotesys .
- .I Rwd
- writes the full path to
- .BR /dev/wdir ;
- writes the last element of the path,
- suffixed by
- .BI @ remotesys \fR,
- to
- .BR /dev/label ;
- and when run inside a
- .I win
- (see
- .IR acme (1))
- window, changes the window title to
- .IB path /- remotesys
- using
- .BR /dev/acme/ctl .
- .PP
- .I Conswdir
- copies standard input to standard output, looking for in-band messages
- about directory changes.
- The messages are of the form:
- .IP
- .EX
- \e033];\fIpath\fP\e007
- .EE
- .LP
- where
- .B \e033
- and
- .B \e007
- are ASCII escape and bell characters.
- Such messages are removed from the stream and not printed to standard output;
- for each such message
- .I conswdir
- runs
- .I prog
- (default
- .BR /bin/rwd )
- with
- .I path
- as its only argument.
- .SH EXAMPLES
- Add this plumbing rule (see
- .IR plumb (6))
- in order to run commands in the plumber's name space:
- .IP
- .EX
- # have plumber run command
- kind is text
- data matches 'Local (.*)'
- plumb to none
- plumb start rc -c $1
- .EE
- .PP
- Mount a Unix system in your name space and the plumber's:
- .IP
- .EX
- % 9fs unix
- % plumb 'Local 9fs unix'
- .EE
- .LP
- (If you're using acme, execute
- .B "Local 9fs unix
- with the middle button to mount the Unix system in acme's name space.)
- .PP
- Connect to the Unix system, processing in-band directory change messages:
- .IP
- .EX
- % ssh unix | aux/conswdir
- .EE
- .PP
- Add this shell function to your
- .B .profile
- on the Unix system
- to generate directory change messages every time a
- .B cd
- command is executed:
- .IP
- .EX
- H=`hostname | sed 's/\e..*//'`
- _cd () {
- \ecd $* &&
- case $- in
- *i*)
- _dir=`pwd`
- echo /n/$H$_dir | awk '{printf("\e033];%s\e007", $1);}'
- esac
- }
- alias cd=_cd
- .EE
- .PP
- The examples described so far only help for relative
- path names. Add this plumbing rule to handle rooted names
- like
- .BR /usr/include/stdio.h :
- .IP
- .EX
- # remote rooted path names
- type is text
- wdir matches '/n/unix(/.*)?'
- data matches '/([.a-zA-Z¡-0-9_/\e-]*[a-zA-Z¡-0-9_/\e-])('$addr')?'
- arg isfile /n/unix/$1
- data set $file
- attr add addr=$3
- plumb to edit
- plumb client window $editor
- .EE
- .SH SOURCE
- .B /rc/bin/rwd
- .br
- .B /sys/src/cmd/aux/conswdir.c
- .SH SEE ALSO
- .IR plumber (4),
- .IR plumb (6),
- .IR srv (4)
- .SH BUGS
- This mechanism is clunky, but Unix and SSH
- make it hard to build a better one.
- .PP
- The escape sequence was chosen because
- it changes the title on xterm windows.
|