summaryrefslogtreecommitdiff
path: root/sys/man/1/rwd
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 16:49:47 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 16:49:47 +0300
commitb41b9034225ab3e49980d9de55c141011b6383b0 (patch)
tree891014b4c2e803e01ac7a1fd2b60819fbc5a6e73 /sys/man/1/rwd
parentc558a99e0be506a9abdf677f0ca4490644e05fc1 (diff)
Import sources from 2011-03-30 iso image - sys/man
Diffstat (limited to 'sys/man/1/rwd')
-rwxr-xr-xsys/man/1/rwd161
1 files changed, 161 insertions, 0 deletions
diff --git a/sys/man/1/rwd b/sys/man/1/rwd
new file mode 100755
index 000000000..14e1a57ce
--- /dev/null
+++ b/sys/man/1/rwd
@@ -0,0 +1,161 @@
+.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.