plan9port/plumb/basic

154 lines
4.3 KiB
Text
Raw Normal View History

2003-11-23 18:30:04 +00:00
# these are generally in order from most specific to least,
# since first rule that fires wins.
include fileaddr
# declarations of ports without rules
plumb to seemail
plumb to showmail
# relative files as file: urls get made into absolute paths
type is text
data matches 'file:([.a-zA-Z¡-￿0-9_\-]([.a-zA-Z¡-￿0-9_/\-]*[a-zA-Z¡-￿0-9_/\-]))?'
arg isfile $1
data set file://$file
plumb to web
plumb start web $data
2004-06-09 14:07:16 +00:00
# urls go to web browser
2003-11-23 18:30:04 +00:00
type is text
data matches '(https?|ftp|file|gopher|mailto|news|nntp|telnet|wais|prospero)://[a-zA-Z0-9_@\-]+([.:][a-zA-Z0-9_@\-]+)*/?[a-zA-Z0-9_?,%#~&/\-+=]+([:.][a-zA-Z0-9_?,%#~&/\-+=]+)*'
plumb to web
2004-06-09 14:07:16 +00:00
plumb start web $0
2003-11-23 18:30:04 +00:00
# doc and rtf files go to wdoc2txt
type is text
data matches '[a-zA-Z¡-￿0-9_\-./]+'
data matches '([a-zA-Z¡-￿0-9_\-./]+)\.(doc|rtf)'
arg isfile $0
plumb to msword
plumb start wdoc2txt $file
# start rule for microsoft word documents without .doc suffix
type is text
dst is msword
plumb to msword
plumb start wdoc2txt $file
# image files go to page
type is text
data matches '[a-zA-Z¡-￿0-9_\-./@]+'
data matches '([a-zA-Z¡-￿0-9_\-./@]+)\.(jpe?g|JPE?G|gif|GIF|tiff?|TIFF?|ppm|bit|png|PNG)'
2003-11-23 18:30:04 +00:00
arg isfile $0
plumb to image
2006-06-06 13:58:19 +00:00
plumb start 9 page $file
2003-11-23 18:30:04 +00:00
# postscript/pdf/dvi go to page but not over the a plumb port
# the port is here for reference but is unused
type is text
data matches '[a-zA-Z¡-￿0-9_\-./@]+'
data matches '([a-zA-Z¡-￿0-9_\-./@]+)\.(ps|PS|eps|EPS|pdf|PDF|dvi|DVI)'
2003-11-23 18:30:04 +00:00
arg isfile $0
plumb to postscript
2006-06-06 13:58:19 +00:00
plumb start 9 page $file
2003-11-23 18:30:04 +00:00
# open office - s[xt][cdigmw], doc, xls, ppt
data matches '[a-zA-Z¡-￿0-9_\-./@]+'
data matches '([a-zA-Z¡-￿0-9_\-./@]+)\.([Ss][XxTt][CcDdIiGgMmWw]|[Dd][Oo][Cc]|[Xx][Ll][Ss]|[Pp][Pp][Tt])'
arg isfile $0
plumb to openoffice
plumb start openoffice $file
# existing files tagged by line number:columnumber or linenumber.columnumber, twice, go to editor
type is text
data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr,$twocolonaddr
arg isfile $1
data set $file
plumb/basic: avoid wrap around in file:1:2 (#158) Fixes #122, #140. As reported in #122, `file:1:1` moves to the end of the file, and `file:1:2` fails with “address out of range”. I’ll use file:2:3 as an example so we can tell the line and column number apart. What’s happening is this: plumb/basic matches `2:3` using twocolonaddr (from plumb/fileaddr), then sets addr to `2-#1+#3` (the 1 is constant and was introduced because column numbers are 1-based). Acme interprets this in three steps: 1. find the range (q0, q1) that contains line 2 2. create the range (q2, q2) where q2 = q0 - 1 3. create the range (q3, q3) where q3 = q2 + 3 The second step has a branch where if q0 == 0 and 1 > 0 (remember that 1 is constant and comes form plumb/basic), q0 is set to the end of the file. This makes addressing things at the end of the file easier. The problem then is that if we select line 1, which starts at the beginning of the file, q0 is always 0 and the branch in step 2) will always be used. `1:1` is interpreted as `1-#1+#1` which starts at 0, wraps around to the end of the file, then moves 1 character backwards and then forwards again, ending at the end of the file. `1:2` is interpretes as `1-#1+#2` which starts at 0, wraps around to the end od the file, then moves 1 character backwards and tries moving 2 characters forwards beyond the end of the file, resulting in the out of range error. In #140 @rsc proposed transforming `:X:Y` into `:X-#0+#Y-#1` instead since that avoids wrapping around by not moving backwards at first. This change modifies `plumb/basic` to do that.
2018-11-14 04:59:04 +00:00
attr add addr=$2-#0+#$3-#1,$4-#0+#$5-#1
plumb to edit
plumb client $editor
# existing files tagged by line number:columnumber or linenumber.columnumber, twice, go to editor
type is text
data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])':$twocolonaddr
arg isfile $1
data set $file
plumb/basic: avoid wrap around in file:1:2 (#158) Fixes #122, #140. As reported in #122, `file:1:1` moves to the end of the file, and `file:1:2` fails with “address out of range”. I’ll use file:2:3 as an example so we can tell the line and column number apart. What’s happening is this: plumb/basic matches `2:3` using twocolonaddr (from plumb/fileaddr), then sets addr to `2-#1+#3` (the 1 is constant and was introduced because column numbers are 1-based). Acme interprets this in three steps: 1. find the range (q0, q1) that contains line 2 2. create the range (q2, q2) where q2 = q0 - 1 3. create the range (q3, q3) where q3 = q2 + 3 The second step has a branch where if q0 == 0 and 1 > 0 (remember that 1 is constant and comes form plumb/basic), q0 is set to the end of the file. This makes addressing things at the end of the file easier. The problem then is that if we select line 1, which starts at the beginning of the file, q0 is always 0 and the branch in step 2) will always be used. `1:1` is interpreted as `1-#1+#1` which starts at 0, wraps around to the end of the file, then moves 1 character backwards and then forwards again, ending at the end of the file. `1:2` is interpretes as `1-#1+#2` which starts at 0, wraps around to the end od the file, then moves 1 character backwards and tries moving 2 characters forwards beyond the end of the file, resulting in the out of range error. In #140 @rsc proposed transforming `:X:Y` into `:X-#0+#Y-#1` instead since that avoids wrapping around by not moving backwards at first. This change modifies `plumb/basic` to do that.
2018-11-14 04:59:04 +00:00
attr add addr=$2-#0+#$3-#1
plumb to edit
plumb client $editor
2003-11-23 18:30:04 +00:00
# existing files, possibly tagged by line number, go to editor
type is text
data matches '([.a-zA-Z¡-￿0-9_/\-@]*[a-zA-Z¡-￿0-9_/\-])('$addr')?'
2003-11-23 18:30:04 +00:00
arg isfile $1
data set $file
attr add addr=$3
plumb to edit
plumb client $editor
2003-11-23 18:30:04 +00:00
2003-12-04 19:18:06 +00:00
# .h files are looked up in /usr/include and passed to edit
2003-11-23 18:30:04 +00:00
type is text
2006-07-05 17:12:57 +00:00
data matches '([a-zA-Z¡-￿0-9/_\-]+\.h)('$addr')?'
2003-12-04 19:18:06 +00:00
arg isfile /usr/include/$1
data set $file
attr add addr=$3
plumb to edit
plumb client $editor
2003-12-04 19:18:06 +00:00
# .h files are looked up in /usr/local/include and passed to edit
type is text
2006-07-05 17:12:57 +00:00
data matches '([a-zA-Z¡-￿0-9/_\-]+\.h)('$addr')?'
2003-12-04 19:18:06 +00:00
arg isfile /usr/local/include/$1
data set $file
attr add addr=$3
plumb to edit
plumb client $editor
2003-12-04 19:18:06 +00:00
2005-01-11 19:46:06 +00:00
# .h files are looked up in $plan9/include and passed to edit
2003-12-04 19:18:06 +00:00
type is text
2006-07-05 17:12:57 +00:00
data matches '([a-zA-Z¡-￿0-9/_\-]+\.h)('$addr')?'
2005-01-11 19:46:06 +00:00
arg isfile $plan9/include/$1
2003-11-23 18:30:04 +00:00
data set $file
attr add addr=$3
plumb to edit
plumb client $editor
2003-11-23 18:30:04 +00:00
# .m files are looked up in /usr/inferno/module and passed to edit
2003-11-23 18:30:04 +00:00
type is text
2006-07-05 17:12:57 +00:00
data matches '([a-zA-Z¡-￿0-9/_\-]+\.m)('$addr')?'
arg isfile /usr/inferno/module/$1
2003-11-23 18:30:04 +00:00
data set $file
attr add addr=$3
plumb to edit
plumb client window $editor
2003-11-23 18:30:04 +00:00
# faces -> new mail window for message
type is text
data matches '[a-zA-Z¡-￿0-9_\-./]+'
data matches '/mail/fs/[a-zA-Z¡-￿0-9/]+/[0-9]+'
plumb to showmail
plumb start window -r 4 120 750 600 upas/nedmail -s $0
# email addresses get a new mail window
type is text
data matches '[a-zA-Z0-9_+.\-]+@[a-zA-Z0-9_+.\-]*'
plumb to sendmail
plumb start wmail $0
# plumb start window rc -c '''echo % mail '''$0'; mail '$0
2003-11-23 18:30:04 +00:00
# man index entries are synthesized
type is text
data matches '([a-zA-Z¡-￿0-9_\-./]+)\(([1-8])\)'
2004-04-19 05:53:47 +00:00
plumb start rc -c 'man '$2' '$1' >[2=1] | nobs | plumb -i -d edit -a ''action=showdata filename=/man/'$1'('$2')'''
2003-11-23 18:30:04 +00:00
# start rule for images without known suffixes
dst is image
arg isfile $data
2003-11-23 18:30:04 +00:00
plumb to image
2006-06-06 13:58:19 +00:00
plumb start 9 page $data
2003-11-23 18:30:04 +00:00
# start rule for postscript without known suffixes
dst is postscript
arg isfile $data
2006-06-06 13:58:19 +00:00
plumb start 9 page $data