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); } -