By:
- Making the Unix socket name unique (for each Emacs instance), by
appending Emacs's PID to it.
- Changing the GDS server to listen on both Unix domain and TCP (and
not to mind if the TCP bind fails, which will happen if another GDS
instance has already bound to the TCP port number).
- Adding this unique Unix socket name to the environment (as
GDS_UNIX_SOCKET_NAME), so that Guile clients started from inside
Emacs can pick it up.
- Changing the GDS client code to look for GDS_UNIX_SOCKET_NAME in the
environment, and to connect to the Unix socket with that name
instead of over TCP.
Guile clients started outside Emacs will not find
GDS_UNIX_SOCKET_NAME and so will fall back to using TCP. This means
they will connect to whichever Emacs + GDS server instance started
first.
* emacs/gds-server.el (gds-start-server): Take both Unix socket name
and TCP port args, instead of just one (which could be either Unix
or TCP), and pass these on to `run-server'. Remove unused optional
bufname arg.
* emacs/gds.el (gds-unix-socket-name, gds-tcp-port): New variables.
(gds-socket-type-alist): Removed.
(gds-run-debug-server): Pass gds-unix-socket-name and gds-tcp-port
to gds-start-server. Add the Unix socket name to the environment.
(gds-server-socket-type): Note now obsolete.
* ice-9/gds-client.scm (connect-to-gds): Get Unix socket name from
environment, and connect to this in preference to using TCP.
* ice-9/gds-server.scm (run-server): Take both Unix socket name and
TCP port args. Listen and accept connections on both.
(gds-run-debug-server): Use gds-server-socket-type and
gds-socket-type-alist instead of gds-server-port-or-path.
(gds-server-socket-type): New, replacing gds-server-port-or-path.
gds-server-port-or-path instead of hardcoded 8333.
(gds-server-port-or-path): New.
* gds-server.el (gds-start-server): Change port arg to
port-or-path, to support Unix domain sockets.
* gds-client.scm (connect-to-gds): Try to connect by Unix domain
socket if TCP connection fails.
* gds-server.scm (run-server): Update to support listening on a
Unix domain socket.
(gds-guile-program): New.
(gds-start): When starting or restarting, kill captive if it
exists. Use gds-guile-program instead of just "guile".
(gds-mode): Use widget minor mode.
(gds-client-ref): New optional client arg.
(gds-update-buffers): Don't call widget-setup.
(gds-heading-face): New.
(gds-insert-interaction): Various prettifications.
(gds-heading-insert): New.
(gds-choose-client): Check that numbers in client and gds-client
are still valid.
(gds-eval-expression, gds-apropos): Remove text properties from
expression to evaluate.
(gds-mode-map): Don't set widget-mode-map as parent.
(gds-start-captive): Use gds-guile-program instead of just
"guile".
* gds-client.scm (install-breakpoints): Bugfix: avoid null lists
in traversal.
(eval-thread, gds-eval): Where expression has multiple parts,
modify output to say which part is being evaluated.
protocol.
(gds-display-slow-eval): New.
(gds-client-ref): Bugfix: buf -> (cdr buf).
(gds-display-buffers): Bugfix: minimum overlay end value is 1, not
0.
(gds-evals-in-progress): New.
(gds-results): New.
(gds-insert-interaction): Show evaluations in progress (with
button to interrupt them) and results of last help or evaluation.
(gds-interrupt-eval): New.
(gds-debug-trap-hooks, gds-up, gds-down): New.
(gds-eval-region, gds-eval-expression): Include abbreviated code
in eval correlator.
(gds-abbreviated-length, gds-abbreviated): New.
(gds-mode-map): New keys for gds-debug-trap-hooks, gds-up,
gds-down.
(gds-debug-menu): New menu entries for gds-up, gds-down.
* gds-client.scm (gds-connect): Enable trapping for gds-eval
stacks.
(ui-read-thread-proc): Write 'running status earlier.
(stack->emacs-readable): Limit stack length to 'depth debug
option.
(handle-instruction): Update format of eval correlator.
(handle-instruction-1): Resolve module names from root module
instead of from current module.
(resolve-module-from-root): New.
(handle-instruction-1): New protocol `interrupt-eval'.
(eval-thread-table): New.
(eval-thread): Add thread to eval-thread-table; write new protocol
to frontend to communicate eval thread status; update for new
correlator format; bind correlator local before entering loop2.
(gds-eval): Use start-stack 'gds-eval-stack to rebase stack.
* gds.el (gds-start, gds-start-captive): Do
`process-kill-without-query' as soon as processes started, ...
(gds-shutdown, gds-kill-captive): ... instead of here.
(gds-display-results): More clearly show unspecified results; show
results in interaction view instead of in separate window.
(gds-send): Add sent protocol to transcript.