X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/8f1d2ef658f95549eb33fe5265f8f11c5129bece..da35c2b26f55a329329792f21a297aa8ad08fb95:/src/terminal.c
diff --git a/src/terminal.c b/src/terminal.c
index 09c57bc2b0..20cfb78198 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -1,5 +1,5 @@
/* Functions related to terminal devices.
- Copyright (C) 2005-2011 Free Software Foundation, Inc.
+ Copyright (C) 2005-2013 Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -17,8 +17,10 @@ You should have received a copy of the GNU General Public License
along with GNU Emacs. If not, see . */
#include
+
+#define TERMHOOKS_INLINE EXTERN_INLINE
+
#include
-#include
#include "lisp.h"
#include "frame.h"
@@ -39,6 +41,13 @@ struct terminal *initial_terminal;
static void delete_initial_terminal (struct terminal *);
+/* This setter is used only in this file, so it can be private. */
+static void
+tset_param_alist (struct terminal *t, Lisp_Object val)
+{
+ t->param_alist = val;
+}
+
void
@@ -109,7 +118,7 @@ void
raw_cursor_to (struct frame *f, int row, int col)
{
if (FRAME_TERMINAL (f)->raw_cursor_to_hook)
- (*FRAME_TERMINAL (f)->raw_cursor_to_hook) (f, row, col);
+ (*FRAME_TERMINAL (f)->raw_cursor_to_hook) (f, row, col);
}
/* Erase operations */
@@ -223,22 +232,35 @@ struct terminal *
create_terminal (void)
{
struct terminal *terminal = allocate_terminal ();
+ Lisp_Object terminal_coding, keyboard_coding;
- terminal->name = NULL;
terminal->next_terminal = terminal_list;
terminal_list = terminal;
terminal->id = next_terminal_id++;
- terminal->keyboard_coding =
- (struct coding_system *) xmalloc (sizeof (struct coding_system));
- terminal->terminal_coding =
- (struct coding_system *) xmalloc (sizeof (struct coding_system));
+ terminal->keyboard_coding = xmalloc (sizeof (struct coding_system));
+ terminal->terminal_coding = xmalloc (sizeof (struct coding_system));
+
+ /* If default coding systems for the terminal and the keyboard are
+ already defined, use them in preference to the defaults. This is
+ needed when Emacs runs in daemon mode. */
+ keyboard_coding =
+ find_symbol_value (intern ("default-keyboard-coding-system"));
+ if (NILP (keyboard_coding)
+ || EQ (keyboard_coding, Qunbound)
+ || NILP (Fcoding_system_p (keyboard_coding)))
+ keyboard_coding = Qno_conversion;
+ terminal_coding =
+ find_symbol_value (intern ("default-terminal-coding-system"));
+ if (NILP (terminal_coding)
+ || EQ (terminal_coding, Qunbound)
+ || NILP (Fcoding_system_p (terminal_coding)))
+ terminal_coding = Qundecided;
+
+ setup_coding_system (keyboard_coding, terminal->keyboard_coding);
+ setup_coding_system (terminal_coding, terminal->terminal_coding);
- setup_coding_system (Qno_conversion, terminal->keyboard_coding);
- setup_coding_system (Qundecided, terminal->terminal_coding);
-
- terminal->param_alist = Qnil;
return terminal;
}
@@ -271,7 +293,7 @@ delete_terminal (struct terminal *terminal)
for (tp = &terminal_list; *tp != terminal; tp = &(*tp)->next_terminal)
if (! *tp)
- abort ();
+ emacs_abort ();
*tp = terminal->next_terminal;
xfree (terminal->keyboard_coding);
@@ -388,7 +410,7 @@ possible return values. */)
case output_ns:
return Qns;
default:
- abort ();
+ emacs_abort ();
}
}
@@ -427,13 +449,13 @@ selected frame's terminal). */)
/* Set the value of terminal parameter PARAMETER in terminal D to VALUE.
Return the previous value. */
-Lisp_Object
+static Lisp_Object
store_terminal_param (struct terminal *t, Lisp_Object parameter, Lisp_Object value)
{
Lisp_Object old_alist_elt = Fassq (parameter, t->param_alist);
if (EQ (old_alist_elt, Qnil))
{
- t->param_alist = Fcons (Fcons (parameter, value), t->param_alist);
+ tset_param_alist (t, Fcons (Fcons (parameter, value), t->param_alist));
return Qnil;
}
else
@@ -496,7 +518,7 @@ struct terminal *
init_initial_terminal (void)
{
if (initialized || terminal_list || tty_list)
- abort ();
+ emacs_abort ();
initial_terminal = create_terminal ();
initial_terminal->type = output_initial;
@@ -515,7 +537,7 @@ static void
delete_initial_terminal (struct terminal *terminal)
{
if (terminal != initial_terminal)
- abort ();
+ emacs_abort ();
delete_terminal (terminal);
initial_terminal = NULL;
@@ -536,10 +558,8 @@ Each function is called with argument, the terminal.
This may be called just before actually deleting the terminal,
or some time later. */);
Vdelete_terminal_functions = Qnil;
- Qdelete_terminal_functions = intern_c_string ("delete-terminal-functions");
- staticpro (&Qdelete_terminal_functions);
- Qrun_hook_with_args = intern_c_string ("run-hook-with-args");
- staticpro (&Qrun_hook_with_args);
+ DEFSYM (Qdelete_terminal_functions, "delete-terminal-functions");
+ DEFSYM (Qrun_hook_with_args, "run-hook-with-args");
defsubr (&Sdelete_terminal);
defsubr (&Sframe_terminal);
@@ -552,4 +572,3 @@ or some time later. */);
Fprovide (intern_c_string ("multi-tty"), Qnil);
}
-