summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2003-12-28 22:28:52 +0000
committerKaroly Lorentey <lorentey@elte.hu>2003-12-28 22:28:52 +0000
commit04c3243c2a25812c6d0a324d29b8fd1d5acaa715 (patch)
treefa237cda8cf320b2cbcc9eedccaaf60eb9d5acb5
parent8ed48c277afad174675b3d6dcb8e7b00a4bcc97d (diff)
downloademacs-04c3243c2a25812c6d0a324d29b8fd1d5acaa715.tar.gz
Trivial changes
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-18
-rw-r--r--README.multi-tty24
-rw-r--r--src/cm.c3
-rw-r--r--src/cm.h6
-rw-r--r--src/term.c59
4 files changed, 51 insertions, 41 deletions
diff --git a/README.multi-tty b/README.multi-tty
index a4bbb52f62f..5abb9fafd15 100644
--- a/README.multi-tty
+++ b/README.multi-tty
@@ -28,7 +28,8 @@ Basic multi-tty support is there; there are some rough edges, but it
already seems to be usable. Emacsclient has been extended to support
opening a new terminal frame.
-To try it out, compile Emacs with the following commands
+To try it out, compile the multi-tty branch with the following
+commands:
mkdir +build
cd +build
@@ -38,17 +39,24 @@ To try it out, compile Emacs with the following commands
then start up the emacs server (src/emacs, M-x server-start), and then
(from a shell prompt on another terminal) start emacsclient with
- lib-src/emacsclient -h
+ lib-src/emacsclient -h /optional/file/names...
-You'll hopefully have two fully working frames on separate terminals.
-If you exit emacs, both terminals should be restored to their previous
-states. You can close the newly opened frame and return to the shell
-without exiting Emacs by pressing C-x 5 0, i.e., delete-frame.
+You'll hopefully have two fully working, independent frames on
+separate terminals. (This seems to be very useful, emacsclient starts
+up even faster than vi!) :-) You can close the newly opened frame and
+return to the shell without exiting Emacs by pressing C-x 5 0, i.e.,
+delete-frame. (Note that this does not seem to work yet on the
+original terminal.) Creating new frames on the same tty with C-x 5 2
+works exactly as before. Suspending Emacs is disabled at the moment.
+If you exit emacs, all terminals should be restored to their previous
+states.
X, Mac, Windows and DOS support is broken, probably doesn't even
-compile -- this will be solved later.
+compile -- this will be solved later. Please see the attached README
+for other issues, implementation notes and sub-TODO items.
+
+Only tested on my GNU/Linux box.
-Tested under GNU/Linux only.
NEWS
----
diff --git a/src/cm.c b/src/cm.c
index d1deb12f690..95aa6afdcd6 100644
--- a/src/cm.c
+++ b/src/cm.c
@@ -134,8 +134,7 @@ addcol (tty, n) {
* after we reach the last column; this takes us to a known state.
*/
void
-cmcheckmagic (tty)
- struct tty_output *tty;
+cmcheckmagic (struct tty_output *tty)
{
if (curX (tty) == FrameCols (tty))
{
diff --git a/src/cm.h b/src/cm.h
index de78ed2ef88..e71859c1a64 100644
--- a/src/cm.h
+++ b/src/cm.h
@@ -166,10 +166,10 @@ extern int evalcost ();
extern struct tty_output *current_tty;
extern void cmcheckmagic P_ ((struct tty_output *));
extern int cmputc P_ ((int));
-extern void cmcostinit P_ ((struct tty_output *tty));
+extern void cmcostinit P_ ((struct tty_output *));
extern void cmgoto P_ ((struct tty_output *, int, int));
-extern void Wcm_clear P_ ((struct tty_output *tty));
-extern int Wcm_init P_ ((struct tty_output *tty));
+extern void Wcm_clear P_ ((struct tty_output *));
+extern int Wcm_init P_ ((struct tty_output *));
/* arch-tag: acc1535a-7136-49d6-b22d-9bc85702251b
(do not change this comment) */
diff --git a/src/term.c b/src/term.c
index 53171e92369..63b198bbf2a 100644
--- a/src/term.c
+++ b/src/term.c
@@ -917,18 +917,19 @@ insert_glyphs (start, len)
{
char *buf;
struct glyph *glyph = NULL;
- struct frame *f = (updating_frame ? updating_frame : XFRAME (selected_frame));
+ struct frame *f;
struct tty_output *tty;
if (len <= 0)
return;
- if (insert_glyphs_hook && ! FRAME_TERMCAP_P (f))
+ if (insert_glyphs_hook)
{
(*insert_glyphs_hook) (start, len);
return;
}
+ f = (updating_frame ? updating_frame : XFRAME (selected_frame));
tty = FRAME_TTY (f);
if (tty->TS_ins_multi_chars)
@@ -2156,11 +2157,9 @@ term_init (name, terminal_type)
tty_list = tty;
}
- if (tty->Wcm)
- Wcm_clear (tty);
- else
- tty->Wcm = (struct cm *) xmalloc (sizeof (struct cm));
-
+ if (! tty->Wcm)
+ tty->Wcm = (struct cm *) xmalloc (sizeof (struct cm));
+
if (name)
{
int fd;
@@ -2676,24 +2675,6 @@ delete_tty (struct tty_output *tty)
{
Lisp_Object tail, frame;
- FOR_EACH_FRAME (tail, frame)
- {
- struct frame *f = XFRAME (frame);
- if (FRAME_LIVE_P (f) && FRAME_TTY (f) == tty)
- {
- Fdelete_frame (frame, Qt);
- f->output_data.tty = 0;
- }
- }
-
- /* Close the terminal and free memory. */
- delete_tty_1 (tty);
-}
-
-static void
-delete_tty_1 (struct tty_output *tty)
-{
-
if (tty == tty_list)
tty_list = tty->next;
else
@@ -2709,13 +2690,25 @@ delete_tty_1 (struct tty_output *tty)
p->next = p->next->next;
}
+ FOR_EACH_FRAME (tail, frame)
+ {
+ struct frame *f = XFRAME (frame);
+ if (FRAME_LIVE_P (f) && FRAME_TTY (f) == tty)
+ {
+ Fdelete_frame (frame, Qt);
+ f->output_data.tty = 0;
+ }
+ }
+
/* This hangs. */
- /* reset_sys_modes (tty); */
+ /*
+ reset_sys_modes (tty);
- if (tty->name)
+ if (tty->name)
xfree (tty->name);
if (tty->type)
xfree (tty->type);
+ */
if (tty->input)
fclose (tty->input);
if (tty->output)
@@ -2723,9 +2716,19 @@ delete_tty_1 (struct tty_output *tty)
if (tty->termscript)
fclose (tty->termscript);
+ tty->input = 0;
+ tty->output = 0;
+ tty->termscript = 0;
+
/*
if (tty->old_tty)
- xfree (tty->old_tty);
+ {
+ memset (tty->old_tty, 'Z', sizeof (struct emacs_tty));
+ tty->old_tty = 0;
+ }
+
+
+ /* xfree (tty->old_tty);
if (tty->Wcm)
{