Commit graph

303 commits

Author SHA1 Message Date
Karoly Lorentey
819b8f00ed A few more bugfixes and new features.
(Sigh.)  I obviously need to remember to separate individual changes
to multiple commits.

src/emacsclient.c: Improved error handling.
(decode_options): Changed frame option (again) from -f to -t.
(print_help_and_exit): Ditto.
(copy_from_to): Check EINTR after write, not EAGAIN.  Removed SIGIO hack.
(pty_conversation): Handle errors transmitted through the socket.
Handle pty errors by not reading from it anymore.
(main): Restore correct errno after socket_status failed.  Send -tty
on -t, not -pty.

lisp/server.el (server-process-filter): Watch -tty, not -pty.
Use make-frame-on-tty instead of make-terminal-frame.
Don't set newframe to t if make-frame-on-tty failed.
Don't delete frames here.  Print correct message when there are no
files to edit, but a new frame was requested.
(server-sentinel): Delete the frame after the process.
(server-handle-delete-frame): New function for delete-frame-functions.
(server-start): Add server-handle-delete-frame to delete-frame-functions.
(server-buffer-done): Don't delete frames here.

src/alloc.c (mark_ttys): Add prototype.
(Fgarbage_collect): Call mark_ttys.

src/emacs.c: (shut_down_emacs): Don't flush stdout before
reset_sys_modes().

src/process.c (add_keyboard_wait_descriptor_called_flag): Removed.
(add_keyboard_wait_descriptor): Removed stdin hack.

src/sysdep.c: Unconditionally include sysselect.h.
(old_fcntl_flags): Changed to an array.
(init_sigio, reset_sigio): Use it.
(narrow_foreground_group, widen_foreground_group): Use setpgid, not
setpgrp.
(old_fcntl_owner): Changed to an array.
(init_sys_modes, reset_sys_modes): Use it.  Fix fsync() and reset_sigio() calls.
src/term.c (Qframe_tty_name, Qframe_tty_type): New variables.
(syms_of_term): Initialize them.
(Fframe_tty_name, Fframe_tty_type): New functions.
(term_init): Call add_keyboard_wait_descriptor().
(Fdelete_tty): New function.
(delete_tty): Call delete_keyboard_wait_descriptor().
(get_current_tty): Removed.
(mark_ttys): New function.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-28
2003-12-31 05:09:29 +00:00
Karoly Lorentey
16c290d8c1 Major bugfixes and slight enhancements.
src/dispextern.h (get_tty_size, tabs_safe_p, init_baud_rate): Update
prototypes.

src/dispnew.c (window_change_signal): Update call to get_tty_size.
src/frame.c (Fmake_terminal_frame): Ditto.
src/keyboard.c (Fsuspend_emacs): Ditto.

src/sysdep.c: Eliminate tty_outputs, wherever possible.  (The
exceptions are init_sys_modes and reset_sys_modes, which need access
to tty-local parameters).
(init_baud_rate): Change tty_output parameter to a simple file descriptor.
(narrow_foreground_group, widen_foreground_group): Ditto.
(tabs_safe_p, get_tty_size): Ditto.
(init_sys_modes): Update narrow_foreground_group invocation.
(reset_sys_modes): Update widen_foreground_group invocation.
(request_sigio)[!FASYNC && STRIDE]: Fix function signature.

src/term.c (delete_tty): Only close output file handle if it is
different from input.  Re-enable freeing of Wcm.
(term_init): Update get_tty_size, tabs_safe_p and init_baud_rate
invocations.

lib-src/emacsclient.c (here): Renamed to frame.
(longopts): Change --here to --frame.  The -h short option may be
confused with --help.
(decode_options, print_help_and_exit): Update to reflect above changes.
(main): Ditto.

lisp/server.el (server-start): Fix frame-live-p call syntax.
(server-process-filter): Handle 'emacsclient -f' without file
arguments.  Don't return any values to emacsclient when 'emacsclient
-f -e'.
(server-switch-buffer): Prevent infinite recursion when there are no
files to edit.


git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-27
2003-12-30 19:27:57 +00:00
Karoly Lorentey
22de1e79e7 Delete server frames on server restart.
lisp/server.el (server-start): Delete any remaining opened frames of
the previous server.
(server-sentinel, server-process-filter): Force deleting the frame.
(server-buffer-done): Ditto.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-25
2003-12-30 17:42:02 +00:00
Karoly Lorentey
b2af72d2f0 Make sure secondary frames are deleted when emacsclient quits.
lisp/server.el (server-sentinel): Delete frame if alive.  Fix delq
invocation on server-frames.  
(server-process-filter, server-buffer-done): Fix delq invocation on
server-frames.

src/cm.c (cmputc): Abort on write error, see what happens.

src/keyboard.c (read_avail_input): Do delete_tty on read errors.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-21
2003-12-29 08:28:35 +00:00
Karoly Lorentey
0a1258976b Bugfix festival.
lib-src/emacsclient.c (main_argc, main_argv): New variables.
(main): Initialize them.
(fail): Use them.
(window_change, copy_from_to): Don't kill if emacs_pid is zero.
(pty_conversation): Watch the command socket, too.  Read emacs_pid
here.  Emacs and emacsclient could deadlock if Emacs tried to do a
reset_sys_modes before sending its pid.

lisp/server.el: Automatically delete the client frame when done editing.
(server-frames): New variable.
(server-process-filter, server-sentinel, server-buffer-done): Use it.
(server-process-filter): Do a redisplay before evaluating other
parameters.  (Prevents "emacsclient -h -e '(delete-frame)'" from
messing up the system.

src/dispextern.h: Update prototypes.

src/dispnew.c (window_change_signal): Do nothing if !term_initted.
(init_display): Set the frame size from the tty data after term_init.

src/emacs.c (main): Make sure things that init_sys_modes needs are 
initialized before init_display (which calls init_sys_modes now).
(sort_args): Use xfree, not free.
(shut_down_emacs) [!EMACS_HAVE_TTY_PGRP]: Use reset_all_sys_modes
instead of reset_sys_modes.

src/frame.c (make_terminal_frame): Sigh. Move terminal initialization
back to the middle of frame setup.  Handle errors by making sure that
the delete_tty() called from term_init() will see and delete this
frame.
(Fdelete_frame): Kill the frame before calling delete_tty().  Fix
condition for tty deletion.

src/keyboard.c (Fset_input_mode): Use reset_sys_modes on the current
terminal only.

src/lisp.h: Remove duplicate prototypes.

src/msdos.c (croak): use reset_all_sys_modes().

src/sysdeps.c (init_baud_rate): Added tty parameter, use it instead of CURTTY.
(child_setup_tty): Reset sigio on stdin, not CURTTY().
(reset_sigio): Added fd parameter, put explicit fcntl there.
(request_sigio, unrequest_sigio)[FASYNC]: Simply block/unblock the
SIGIO signal, don't touch the file params.  There are multiple ttys
now, and we can't disable the SIGIO from emacsclient.
(get_tty_size)[VMS]: Use tty_out instead of CURTTY().
(reset_sys_modes): Don't call cursor_to, clear_end_of_line; call
cmgoto and tty_clear_end_of_line instead.  The frame may already be
dead.  Updated reset_sigio call.

src/term.c (clear_and_of_line): Separate tty-dependent stuff to
tty_clear_end_of_line() for reset_sys_modes.
(tty_clear_end_of_line): New function.
(term_init): Added frame parameter, don't use selected_frame.
Set the frame's output_data.tty value (in case there is an error
later).  Set the frame size in Wcm, not in the frame.  Only free the
termcap buffer if there is a termcap-related error.  Call
init_sys_modes last, not first.
(deleting_tty): New variable.
(delete_tty): Use it for handling recursive calls.  Free deleted tty,
except its Wcm (there is still a dangling reference somewhere).

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-19
2003-12-29 07:16:26 +00:00
Karoly Lorentey
8303ba32ba Implemented automatic deletion of terminals.
lisp/server.el (server-process-filter): Switch to the new terminal frame.

src/frame.c (Fdelete_frame): Delete the tty if this was its the last frame.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-12
2003-12-27 13:55:54 +00:00
Karoly Lorentey
fca177d467 Fully eliminated global tty state variables.
lib-src/emacsclient.c (main.c): Fix error message.

lisp/frame.el (make-frame-on-tty): New function.

lisp/server.el (server-process-filter): Notify emacsclient if there
was on error during evaluation.

src/cm.c: Fix remaining cases of direct Wcm references.

src/dispextern.h: Updated prototypes.

src/dispnew.c (Fredraw_frame): Fix set_terminal_modes call.
(init_display): Remove reference to meta_key.

src/frame.c (make_terminal_frame): Renamed first parameter to
tty_name.  Call term_init before creating the frame.
(Fmake_terminal_frame): Look up the `tty' and `tty-type' frame
parameters from the currently selected terminal before the global
default.
(Fdelete_frame): Make sure that the new selected frame is live.

src/keyboard.c (meta_key): Moved to struct tty_output.
(read_avail_input): Fix C syntax.  Update references to meta_key.
(Fsuspend_emacs): pass current tty to init_sys_modes via
record_unwind_protect.
(Fset_input_mode): Update references to meta_key.
(Fcurrent_input_mode): Ditto.

src/sysdep.c (init_sys_modes): Updated old_tty and meta_key
references.  Don't call set_terminal_modes, it needs termcap strings.
(reset_sys_modes): Call tty_reset_terminal_modes instead of
reset_terminal_modes.  Updated old_tty references.

src/term.c: Massive updates throuout the file.
(TS_*, TN_*): Moved to struct tty_output.
(RPov, delete_in_insert_mode se_is_so, costs_set, insert_mode): Ditto.
(standout_mode, specified_window, tty_cursor_hidden): Ditto.
(tty_set_terminal_modes, tty_reset_terminal_modes): New functions.
(turn_on_insert, turn_off_insert): Added tty parameter.
(turn_on_highlight, turn_off_highlight, toggle_highlight): Added tty parameter.
(tty_hide_cursor, tty_show_cursor): Ditto.
(background_highlight, highlight_if_desired): Ditto.
(tty_capable_p): Changed first parameter to tty_output.
(term_init): Make sure top_frame is initialized.  Don't exit on errors
if this would have been a secondary terminal.  Call set_terminal_modes
on the end.
(delete_tty): New function.
(delete_tty_1): New function.
(print_all_frames): New function, marginally useful for debugging.

src/termchar.h (struct tty_output): Changed old_tty to be a pointer.
Removed old_tty_valid member.  Added tty-specific variables from term.c.

src/xfaces.c (Ftty_supports_face_attributes_p): Update for new
tty_capable_p.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-9
2003-12-27 10:00:19 +00:00
Karoly Lorentey
6548cf002c Full support for multiple terminal I/O (with some rough edges).
lib-src/emacsclient.c (emacs_pid): New variable.  
(window_change): Forward the SIGWINCH signal to the Emacs process
after copying the size parameters to the proxy terminal.
(copy_from_to): New parameter (sigio), kill Emacs with SIGIO if it is
nonzero.
(main): Set emacs_pid.

lisp/server.el (server-process-filter): Send the pid of Emacs to emacsclient.

src/cm.c: Added tty parameters to all functions and all Wcm macro calls.

src/cm.h: Added tty parameters to all macros.   Updated function prototypes.
(Wcm): Moved to struct tty_output.

src/dispextern.h: Updated function prototypes.

src/dispnew.c: Added tty parameters to all Wcm macro calls.
(do_switch_frame): Make old frame obscured, not invisible, to solve
problems with other-frame.
(Wcm): Moved to struct tty_output.

src/keyboard.c (read_avail_input): Select the frame corresponding to
the tty that was read.  Slight rearrangement of tty loop.

src/lisp.h (tabs_safe_p): Removed duplicate prototype.

src/sysdep.c (hft_init, hft_reset): Added tty_output parameter.
(discard_tty_input): Discard input from all ttys on APOLLO, too.
Whatever it is.
(narrow_foreground_group, widen_foreground_group): Added tty parameter
(not really useful, the functions only work on the controlling tty.)
(tabs_safe_p): Added tty parameter.

src/term.c Added tty parameters to all Wcm macro calls.
Standardised updating_frame vs. selected frame and tty_output access.
(term_init): Allocate Wcm.
(syms_of_term): Provide the `multi-tty' feature.

src/termchar.h (struct tty_output): Added Wcm.

src/xdisp.c (try_window_id): Make sure we use the tty device
corresponding to the current frame.

git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-8
2003-12-27 01:12:57 +00:00
Karoly Lorentey
9628b8878f lib-src/emacsclient.c: Implemented --here option (open a new Emacs tty). Needs more work.
(here): New variable.
(decode_options): Use it.
(ec_get_tty, ec_set_tty, init_tty, window_change, hang_up_signal): New functions.
(window_change_signal, init_signals, reset_tty, init_pty, copy_from_to): Ditto.
(pty_conversation): Ditto.
(main): Use them.
(master, pty_name, old_tty, tty, old_tty_valid, tty_erase_char): New variables.
(flow_control, meta_key, _sobuf, in_conversation, quit_conversation): Ditto.

lisp/server.el (server-process-filter): Added support for opening a new terminal frame.

dispextern.h (get_frame_size): Renamed to get_tty_size, added tty_output parameter.

dispnew.c (Fredraw_frame): fflush the current terminal instead of stdout.
(direct_output_for_insert, direct_output_forward_char, update_frame_1): Ditto.
(Fding, bitch_at_user): Ditto.
(update_frame_1): Count pending output for current terminal instead of stdout.
(window_change_signal): Resize all terminals.
(change_frame_size): Don't resize all terminals to the same size.

frame.c (Vterminal_frame): Removed.
(syms_of_frame): Removed declaration of Vterminal_frame.
(make_terminal_frame): Set the top frame of the terminal to the new frame.
(Fmake_terminal_frame): Get a new frame size from get_tty_size, don't copy it.
(do_switch_frame): Handle terminal frame visibility.
(next_frame, prev_frame): Skip over frames on different terminals.

frame.h (Vterminal_frame): Removed.

keyboard.c (input_fd): Removed.
(read_avail_input): Removed first argument from read_socket_hook.
Try to read from each available tty, until one succeeds.
(Fsuspend_emacs): Don't suspend if there are multiple terminals.

lisp.h (get_frame_size): Removed superflous declaration.

xterm.c (Xtread_socket): Removed first parameter.
macterm.h (XTread_socket): Ditto.
w32inevt.c (w32_console_read_socket): Ditto.
w32term.c (w32_read_socket): Ditto.

sysdep.c (input_fd): Removed.
(change_input_fd): Removed.
(discard_tty_input): Discard pending input on _all_ input descriptors.
(stuff_char, tabs_safe_p): Use current terminal instead of input_fd.
(init_baud_rate, request_sigio, unrequest_sigio): Ditto.
(init_sys_modes, reset_sys_modes): Ditto.
(narrow_foreground_group, widen_foreground_group): Use stdin.
(init_sys_modes, reset_sys_modes): otty parameter renamed to tty_out.
(get_frame_size): Renamed to get_tty_size, added tty_out parameter.

term.c (read_socket_hook): Removed first parameter.
(clear_end_of_line): Use updating_frame, if possible.
(write_glyphs, insert_glyphs, ins_del_lines): Ditto.
(term_init): Renamed get_frame_size to get_tty_size.

termchar.h (struct tty_output): New entries: top_frame,
previous_terminal_frame.

termhooks.h (read_socket_hook): Removed first parameter.

window.c (init_window_once): Removed reference to Vterminal_frame.

xdisp.c (previous_terminal_frame): Moved to struct tty_output.
(redisplay_internal): Updated to use previous_terminal_frame in tty_output.
Allow for simultaneous refresh of multiple ttys.


git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-5
2003-12-26 04:24:54 +00:00
Miles Bader
ab5796a9f9 Add arch taglines 2003-09-01 15:45:59 +00:00
John Paul Wallington
60f8ea5349 (server-start): Check `server-process' is non-nil
before killing it to avoid killing current buffer's process.
2003-07-25 12:16:18 +00:00
Stefan Monnier
e5576936b9 (server-start): Use letf. 2003-04-12 19:05:41 +00:00
Stefan Monnier
724629d2c2 (server-socket-name): Use new safe location for socket.
(server-ensure-safe-dir): New fun.
(server-start): Use it.
(server-process-filter): Re-enable the -eval feature.
2003-04-12 19:04:11 +00:00
Stefan Monnier
3f7ef08ebd (server-previous-strings): Remove.
(server-process-filter): Use (process-get 'previous-string) instead.
(server-sentinel): Remove code made superfluous.
2003-02-10 21:44:24 +00:00
Dave Love
33186f32d8 (server-window): Customize.
(server-mode): New.
(server-unload-hook): Call server-start.
2003-01-15 17:49:32 +00:00
John Paul Wallington
64f511342e (server-process-filter): Use `minibufferp' to test
whether we are inside a minibuffer.
(server-process, server-kill-new-buffers): Doc fixes.
2003-01-13 16:44:07 +00:00
Richard M. Stallman
cf1175df2a (server-process-filter): Comment out -eval.
Don't switch buffers if inside isearch or minibuffer.
2003-01-13 08:04:17 +00:00
Stefan Monnier
408784a7d5 (server-sentinel): Kill buffers if applicable.
(server-temp-file-p): Make arg optional.
(server-done): Use it to simplify.
(server-switch-buffer): If server-window is a function, use it.
2002-11-02 05:29:13 +00:00
Richard M. Stallman
90ee5627ad (server-switch-buffer): Say when no server buffers remain. 2002-10-29 18:17:46 +00:00
Stefan Monnier
15d40fa454 (server-socket-name): Always use /tmp and non-qualified hostname. 2002-09-27 22:06:02 +00:00
Stefan Monnier
44a56b29e7 (server-select-display): New function.
(server-process-filter): Add support for `-display' and `-eval' args.
(server-visit-files): Use save-current-buffer, push, and dolist.
Add server-kill-buffer to kill-buffer-hook.
(kill-buffer-hook): Don't modify globally.
(server-switch-buffer): Be a bit more careful with multiple displays.
2002-09-27 17:43:29 +00:00
Stefan Monnier
0c851d7872 Use built-in network primitives.
(server-program, server-previous-string): Remove.
(server-previous-strings): New var.
(server-socket-name): New var.
(server-log): Minor change to the output format.
(server-sentinel): Clean up global state when a client disconnects.
(server-unquote-arg): New fun.
(server-start): Use server-socket-name and make-network-process.
(server-process-filter): Now talks to the clients directly.
Normalize file name after unquoting and decoding.
(server-buffer-done): Just close the connection.
(server-switch-buffer): Handle the case where all windows are
dedicated or minibuffers.
2002-09-25 19:54:13 +00:00
Stefan Monnier
ca0c725020 (server-done): Fix harmlessly wrong arg to save-buffer.
(server-switch-buffer): Only select a different window if
next-buffer is non-nil.  Don't switch in a dedicated window.
If next-buffer is already displayed, reuse that window.
2002-09-18 12:19:57 +00:00
Stefan Monnier
8b3e840e95 (server-log): Add `client' arg.
(server-start): Don't bother canceling the sentinel.
(server-process-filter): Use replace-regexp-in-string and
handle the new &n quoting.  Use push.  Use server-log's new arg.
Don't output the C-x # message if `nowait'.
(server-buffer-done): Use server-log's new arg.
2002-09-18 02:10:18 +00:00
Richard M. Stallman
6b98185f8b (server-process-filter): Simplify code.
(server-goto-line-column): New function.
(server-visit-files): Use server-goto-line-column.
Offer to revert only if file has changed.
2002-08-15 20:13:48 +00:00
Dave Love
df4e8a1129 (server-unload-hook): New function. 2001-12-18 16:42:38 +00:00
Stefan Monnier
1cd04440b5 (server-process-filter): Run pore/post-comment-hook
before/after visiting the file.
2001-11-15 12:19:08 +00:00
Richard M. Stallman
ed9ae328c1 (server-edit, server-done): Doc fix. 2001-11-13 03:14:23 +00:00
Richard M. Stallman
4dd04714eb (server-buffer-done): Test of server-existing-buffer was backwards.
(server-existing-buffer): Doc fix.
2001-11-11 17:56:23 +00:00
Gerd Moellmann
35f01a9505 (server-switch-buffer): Use get-window-with-predicate. 2001-09-07 11:35:49 +00:00
Stefan Monnier
0582471880 (server-visit-files): Fix variable name typo. 2001-07-20 22:46:18 +00:00
Gerd Moellmann
8c49357098 (server-visit-files): Handle the case the specified
column number is <= 0.

(command-line-1): Add support for +LINE:COLUMN
command line argument.

(server-process-filter, server-visit-files): Add
support for +LINE:COLUMN style emacsclient calls.
2001-07-17 10:55:28 +00:00
Pavel Janík
5553563924 Some fixes to follow coding conventions in files maintained by FSF. 2001-07-15 16:15:35 +00:00
Eli Zaretskii
b5a9911c41 (server-process, server-buffer-clients): Doc fix.
From Pavel Janik <Pavel@Janik.cz>.
2001-06-10 08:45:41 +00:00
Gerd Moellmann
92a6563f8d (server-visit-files): Set server-existing-buffer
correctly.
(server-visit-files): Run server-visit-hook after going to
line 1 so that the hook can set point as it sees fit.
2001-04-09 14:29:56 +00:00
Stefan Monnier
39b557e891 (server-switch-buffer): Only switch window if the current one is dedicated. 2001-02-22 20:14:45 +00:00
Gerd Moellmann
8363063ec7 (server-switch-buffer): Choose a window on a visible
frame.
2000-12-21 15:57:01 +00:00
Gerd Moellmann
3d2a0e0b7b (server-buffer-done): Bury the buffer before
killing it.
2000-12-18 17:01:16 +00:00
Gerd Moellmann
0f5f7c3eb6 (server-visit-files): Push files on file-name-history. 2000-12-07 13:53:21 +00:00
Gerd Moellmann
c6a117f07b (server-kill-new-buffers): New user option.
(server-existing-buffer): New buffer-local variable.
(server-visit-files): When using an existing buffer, set
server-existing-buffer to t.
(server-buffer-done): If server-kill-new-buffers is t, kill the
buffer, unless it was already present before visiting it with
Emacs server.
2000-08-21 15:26:01 +00:00
Gerd Moellmann
6d4dd88504 (server-switch-buffer): Use some-window instead of
cycling through windows with next-window.
2000-07-03 09:13:42 +00:00
Karl Heuer
0c40a645af (server-process-filter): If a client visits no buffers,
close it immediately before recording it.
1999-08-16 03:15:11 +00:00
Kenichi Handa
6b7430a8ac (server-start): Set coding system for the server
process to raw-text.
(server-process-filter): Decode file names if necessary.
1999-03-13 00:21:24 +00:00
Richard M. Stallman
599f9a5c4c (server-buffer-done): Bind server-kill-buffer-running
around places that might kill the buffer.
Do something reasonable if server-done-hook kills the buffer.
(server-kill-buffer-running): Doc fix.
(server-kill-buffer): Do nothing unless server-buffer-clients.
(server-done): Doc fix.

(server-buffer-done): Test of for-killing was backwards.
1998-05-05 00:39:35 +00:00
Richard M. Stallman
ab1c7f3527 Customized. 1997-08-18 20:01:25 +00:00
Richard M. Stallman
fb873cfcb6 (server-kill-buffer): Prevent infinite recursion.
(server-kill-buffer-running): New variable.
1997-05-31 00:31:40 +00:00
Richard M. Stallman
e4874521bb Comment change. 1997-05-27 15:32:03 +00:00
Richard M. Stallman
1da54e584e (server-kill-buffer): Act only when there is a server process. 1997-05-14 18:42:57 +00:00
Richard M. Stallman
b392bac9b9 (server-buffer-done): New arg FOR-KILLING.
(server-kill-buffer): New fn, to inform clients when buffer is killed.
1997-05-10 00:37:24 +00:00
Richard M. Stallman
ffdd27965e (server-done): If buffer visits no file, don't offer save. 1997-04-13 06:12:34 +00:00