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.

Reply via email to