Sure, but I'm not the one using plan9/client: plumb.Open is. So in order to do it and keep supporting p9p, I still need to fork 9fans.net/go and vendor my changes to the plumb package, which brings me back to where I started: needing to maintain my own fork of a seemingly abandoned package.
(I just tried directly opening /mnt/plumb/edit behind a build tag in the plumb package and returning the *os.File, and it does mostly work except for the same problem of *os.File not implementing io.ByteReader, and the fact that now the same function on different platforms has different signatures, because the default plumb.Open is defined as returning a concrete type from plan9/client, not an interface..) On Sun, Feb 19, 2017 at 9:43 AM, Skip Tavakkolian <skip.tavakkol...@gmail.com> wrote: > if want to run those utilities in Plan 9 you don't need to worry about > speaking 9P with the underlying services -- i.e. no need for plan9/client > package. the file hierarchies for plumber, acme, draw, etc. are mounted into > the process' namespace. for example, acme's namespace is mounted on > "/mnt/acme"; so a program that is started by acme will use normal > open/read/write/close to interact with acme. that's the beauty of Plan 9. > > the middle-layer packages (i.e. acme, plumb, draw) should use os.OpenFile, > File.Read/Write, etc. > for example: acme.New() can be modified like this > > // New creates a new window. > func New() (*Win, error) { > fid, err := os.OpenFile("/mnt/acme/new/ctl", os.O_RDWR) > if err != nil { > return nil, err > } > buf := make([]byte, 100) > n, err := fid.Read(buf) > if err != nil { > fid.Close() > return nil, err > } > a := strings.Fields(string(buf[0:n])) > if len(a) == 0 { > fid.Close() > return nil, errors.New("short read from acme/new/ctl") > } > id, err := strconv.Atoi(a[0]) > if err != nil { > fid.Close() > return nil, errors.New("invalid window id in acme/new/ctl: " + a[0]) > } > return Open(id, fid) > } > > etc. > > > > > On Sat, Feb 18, 2017 at 3:51 PM Dave MacFarlane <driu...@gmail.com> wrote: >> >> client doesn't implement ReadByte, and opening a plumbing port with >> 9fans.net/go/plumb9fans/net/go/plumb needs a ByteReader is the change >> that I've been vendoring for other OSes to be able to open the "edit" >> port of the plumber. >> >> The problem that I'm having now isn't that it doesn't build, it's that >> "plumb.Open("edit", plan9.OREAD)" returns an error right away on Plan >> 9 because DialService is assuming it's for p9p trying to emulate >> namespaces with Unix Domain Sockets. I'm sure it's fixable, but the >> repo seems to be abandoned (pull requests have been open since 2015), >> so I'm wondering if there's any other packages that deal with the >> plumbing ports (because otherwise I think my only option is to fork it >> and maintain it myself..) >> >> >> On Sat, Feb 18, 2017 at 10:57 PM, Bakul Shah <ba...@bitblocks.com> wrote: >> > On Sat, 18 Feb 2017 21:42:05 GMT Dave MacFarlane <driu...@gmail.com> >> > wrote: >> >> Are there any cross-platform alternatives to 9fans.net/go for >> >> interacting with the Plan9/p9p plumber? >> > >> > I think you will have to create os specific versions of >> > 9fans.net/go/plan9/client/dial.go:Namespace() >> > >> >> It doesn't seem to be maintained (I've had to vendor a bug fix for a >> >> while to use it to receive plumbing messages) and I just discovered >> >> while trying to use my de text editor on Plan 9 that, ironically, >> >> 9fans.net/go doesn't work under Plan 9, either.. >> > >> > I know go/acme/Watch doesn't build. Are there others (modulo >> > the above issue)? There may be other ways to handle Watch.... >> >> >> >> -- >> - Dave >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to golang-nuts+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/d/optout. -- - Dave -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.