diff options
| author | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 12:41:27 +0300 |
|---|---|---|
| committer | Mehmet Samet Duman <yongdohyun@projecttick.org> | 2026-04-04 12:41:27 +0300 |
| commit | 4f2d36194b4f299aa7509d815c07121039ea833b (patch) | |
| tree | f3ded014bad3a4c76ff6a22b8726ebaab68c3d13 /mnv/runtime/doc/remote.txt | |
| parent | 5b578e70c314723a3cde5c9bfc2be0bf1dadc93b (diff) | |
| download | Project-Tick-4f2d36194b4f299aa7509d815c07121039ea833b.tar.gz Project-Tick-4f2d36194b4f299aa7509d815c07121039ea833b.zip | |
NOISSUE change uvim folder name to mnv
Signed-off-by: Mehmet Samet Duman <yongdohyun@projecttick.org>
Diffstat (limited to 'mnv/runtime/doc/remote.txt')
| -rw-r--r-- | mnv/runtime/doc/remote.txt | 281 |
1 files changed, 281 insertions, 0 deletions
diff --git a/mnv/runtime/doc/remote.txt b/mnv/runtime/doc/remote.txt new file mode 100644 index 0000000000..9affb703b7 --- /dev/null +++ b/mnv/runtime/doc/remote.txt @@ -0,0 +1,281 @@ +*remote.txt* For MNV version 10.0. Last change: 2026 Feb 14 + + + MNV REFERENCE MANUAL by Bram Moolenaar + + +MNV client-server communication *client-server* + +1. Common functionality |clientserver| +2. X11 specific items |x11-clientserver| +3. MS-Windows specific items |w32-clientserver| +4. Socket server specific items |socketserver-clientserver| + +============================================================================== +1. Common functionality *clientserver* + +When compiled with the |+clientserver| option, MNV can act as a command +server. It accepts messages from a client and executes them. At the same +time, MNV can function as a client and send commands to a MNV server. + +The following command line arguments are available: + + argument meaning ~ + + --remote [+{cmd}] {file} ... *--remote* + Open the file list in a remote MNV. When + there is no MNV server, execute locally. + There is one optional init command: +{cmd}. + This must be an Ex command that can be + followed by "|". + The rest of the command line is taken as the + file list. Thus any non-file arguments must + come before this. + You cannot edit stdin this way |--|. + The remote MNV is raised. If you don't want + this use > + mnv --remote-send "<C-\><C-N>:n filename<CR>" +< + --remote-silent [+{cmd}] {file} ... *--remote-silent* + As above, but don't complain if there is no + server and the file is edited locally. + --remote-wait [+{cmd}] {file} ... *--remote-wait* + As --remote, but wait for files to complete + (unload) in remote MNV. + --remote-wait-silent [+{cmd}] {file} ... *--remote-wait-silent* + As --remote-wait, but don't complain if there + is no server. + *--remote-tab* + --remote-tab Like --remote but open each file in a new + tabpage. + *--remote-tab-silent* + --remote-tab-silent Like --remote-silent but open each file in a + new tabpage. + *--remote-tab-wait* + --remote-tab-wait Like --remote-wait but open each file in a new + tabpage. + + *--remote-tab-wait-silent* + --remote-tab-wait-silent Like --remote-wait-silent but open each file + in a new tabpage. + *--servername* + --servername {name} Become the server {name}. When used together + with one of the --remote commands: connect to + server {name} instead of the default (see + below). The name used will be uppercase. If + using the socketserver, you can specify a + path, see |socketserver-name| for more + details. + *--remote-send* + --remote-send {keys} Send {keys} to server and exit. The {keys} + are not mapped. Special key names are + recognized, e.g., "<CR>" results in a CR + character. + *--remote-expr* + --remote-expr {expr} Evaluate {expr} in server and print the result + on stdout. + *--serverlist* + --serverlist Output a list of server names. + *--clientserver* + --clientserver {method} Use the specified method {method} as the + backend for clientserver functionality. Can + either be "socket" or "x11". + {only available when compiled with both |+X11| + and |+socketserver| features} + + +Examples ~ + +Edit "file.txt" in an already running GMNV server: > + gmnv --remote file.txt + +Edit "file.txt" in an already running server called FOOBAR: > + gmnv --servername FOOBAR --remote file.txt + +Edit "file.txt" in server "FILES" if it exists, become server "FILES" +otherwise: > + gmnv --servername FILES --remote-silent file.txt + +This doesn't work, all arguments after --remote will be used as file names: > + gmnv --remote --servername FOOBAR file.txt + +Edit file "+foo" in a remote server (note the use of "./" to avoid the special +meaning of the leading plus): > + mnv --remote ./+foo + +Tell the remote server "BLA" to write all files and exit: > + mnv --servername BLA --remote-send '<C-\><C-N>:wqa<CR>' + + +SERVER NAME *client-server-name* + +By default MNV will try to register the name under which it was invoked (gmnv, +egmnv ...). This can be overridden with the --servername argument. If the +specified name is not available, a postfix is applied until a free name is +encountered, i.e. "gmnv1" for the second invocation of gmnv on a particular +X-server. The resulting name is available in the servername builtin variable +|v:servername|. The case of the server name is ignored, thus "gmnv" and +"GMNV" are considered equal. Note if a socket server is being used, there are +some differences, see |socketserver-differences|. + +When MNV is invoked with --remote, --remote-wait or --remote-send it will try +to locate the server name determined by the invocation name and --servername +argument as described above. If an exact match is not available, the first +server with the number postfix will be used. If a name with the number +postfix is specified with the --servername argument, it must match exactly. + +If no server can be located and --remote or --remote-wait was used, MNV will +start up according to the rest of the command line and do the editing by +itself. This way it is not necessary to know whether gmnv is already started +when sending command to it. + +The --serverlist argument will cause MNV to print a list of registered command +servers on the standard output (stdout) and exit. If a socket server is being +used, there are caveats, see |socketserver-differences|. + *{server}* +The {server} argument is used by several functions. When this is an empty +string then on Unix the default server name is used, which is "GMNV". On +MS-Windows an empty string does not work. + +Win32 Note: Making the MNV server go to the foreground doesn't always work, +because MS-Windows doesn't allow it. The client will move the server to the +foreground when using the --remote or --remote-wait argument and the server +name starts with "g". + + +REMOTE EDITING + +The --remote argument will cause a |:drop| command to be constructed from the +rest of the command line and sent as described above. +The --remote-wait argument does the same thing and additionally sets up to +wait for each of the files to have been edited. This uses the BufUnload +event, thus as soon as a file has been unloaded, MNV assumes you are done +editing it. +Note that the --remote and --remote-wait arguments will consume the rest of +the command line. I.e. all remaining arguments will be regarded as filenames. +You can not put options there! + + +FUNCTIONS + *E240* *E573* +There are a number of MNV functions for scripting the command server. See +the description in |builtin.txt| or use CTRL-] on the function name to jump to +the full explanation. + + synopsis explanation ~ + remote_startserver( name) run a server + remote_expr( server, string, idvar) send expression + remote_send( server, string, idvar) send key sequence + serverlist() get a list of available servers + remote_peek( serverid, retvar) check for reply string + remote_read( serverid) read reply string + server2client( serverid, string) send reply string + remote_foreground( server) bring server to the front + +See also the explanation of |CTRL-\_CTRL-N|. Very useful as a leading key +sequence. +The {serverid} for server2client() can be obtained with expand("<client>") + +============================================================================== +2. X11 specific items *x11-clientserver* + *E247* *E248* *E251* *E258* *E277* + +The communication between client and server goes through the X server. The +display of the MNV server must be specified. The usual protection of the X +server is used, you must be able to open a window on the X server for the +communication to work. It is possible to communicate between different +systems. + +By default, a GUI MNV will register a name on the X-server by which it can be +addressed for subsequent execution of injected strings. MNV can also act as +a client and send strings to other instances of MNV on the same X11 display. + +When an X11 GUI MNV (gmnv) is started, it will try to register a send-server +name on the 'MNVRegistry' property on the root window. + +A non GUI MNV with access to the X11 display (|xterm-clipboard| enabled), can +also act as a command server if a server name is explicitly given with the +--servername argument, or when MNV was built with the |+autoservername| +feature. + +An empty --servername argument will cause the command server to be disabled. + +To send commands to a MNV server from another application, read the source +file src/if_xcmdsrv.c, it contains some hints about the protocol used. + +============================================================================== +3. Win32 specific items *w32-clientserver* + +Every Win32 MNV can work as a server, also in the console. You do not need a +version compiled with OLE. Windows messages are used, this works on any +version of MS-Windows. But only communication within one system is possible. + +Since MS-Windows messages are used, any other application should be able to +communicate with a MNV server. An alternative is using the OLE functionality +|ole-interface|. + +When using gmnv, the --remote-wait only works properly this way: > + + start /w gmnv --remote-wait file.txt +< +============================================================================== +4. Socket server specific items *socketserver-clientserver* + *E1563* *E1564* *E1565* *E1566* *E1567* + +The communication between client and server is done using Unix domain sockets. +These sockets are either placed in these directories in the following order of +availability: + 1. "$XDG_RUTIME_DIR/mnv" if $XDG_RUNTIME_DIR is set in the environment. + 2. "$TMPDIR/mnv-[uid]", where "[uid]" is the uid of the user. This + directory will have the access permissions set to 700 so only the user + can read or write from/to it. If $TMPDIR is not set, "/tmp" is used. + + *socketserver-name* +When specifying the server id/name, it can be taken as a generic name or an +absolute or relative path. If the server id starts with either a "/" +(absolute) or "./" | "../" (relative), then it is taken as path to the socket. +Otherwise the server id will be the filename of the socket which will be +placed in the above common directories. Note that a server id/name can only +contain slashes "/" if it is taken as a path, so names such as "abc/dir" will +be invalid. + +Socket server functionality is available in both GTK GUI and terminal versions +of MNV. Unless MNV is compiled with |+autoservername| feature, the socket +server will have to started explicitly, just like X11, even in the GUI. + +If MNV crashes or does not exit cleanly, the socket server will not remove the +socket file and it will be left around. This is generally not a problem, +because if a socket name is taken, MNV checks if the socket in its place is +dead (not attached to any process), and can replace it instead of finding a +new name. + +To send commands to a MNV socket server from another application, read the +source file src/os_unix.c, there is detailed description of the protocol used. + + *socketserver-differences* +Most of the functionality is the same as X11, however unlike X11, where the +client does not need to be a server in order to communicate with another +server, the socket server requires the server to be running even as a client. +The exception is |serverlist()| or the |--serverlist| argument, which does not +require the server to be running. + +Additionally, the server id or client id will not be a number like X11 or +MS-Windows (shown in hex representation), instead it is the absolute path to +the socket. This can be seen via the |v:servername| variable. + +The |--serverlist| argument will act just like X11, however it only checks the +given common directories above. If a custom path is used for a socket, it +will not be detected, such as a path either not in $XDG_RUNTIME_DIR or +<$TMPDIR or /tmp>/mnv of the |--serverlist| MNV process. + +If you have both |+socketserver| and |+X11| compiled, you will need to add +|--clientserver| set to "socket" in combination with |--serverlist| to list +the available servers. You cannot list both types of backends in one command. + + *socketserver-x11* +If MNV is compiled with both |+X11| and |+socketserver|, then deciding which +backend to use is done at startup time, via the |--clientserver| argument. By +default if it is not specified, then X11 will be used. A MNV instance using a +socket server cannot communicate with one using X11. + + mnv:tw=78:sw=4:ts=8:noet:ft=help:norl: |
