syntax = "proto2"; package cursor; import "common.proto"; import "files.proto"; // handle cursor events and broadcast to all users service Cursor { // subscribe to a workspace's cursor events rpc Attach (stream cursor.CursorPosition) returns (stream cursor.CursorEvent); } // a tuple indicating row and column message RowCol { required int32 row = 1; required int32 col = 2; } // cursor position object message CursorPosition { // path of current buffer this cursor is into required files.BufferNode buffer = 1; // cursor start position required RowCol start = 2; // cursor end position required RowCol end = 3; } // cursor event, with user id and cursor position message CursorEvent { // user moving the cursor required common.Identity user = 1; // new cursor position required CursorPosition position = 2; }