Mercurial > emacs
changeset 20280:7916c0d8f2ae
(frame_name_fnn_p, set_term_frame_name): New functions.
(store_frame_param): When the property name is "name", set the
name of the frame to its value.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Thu, 20 Nov 1997 15:50:59 +0000 |
parents | 69a6030e443a |
children | 799de2d79c64 |
files | src/frame.c |
diffstat | 1 files changed, 67 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/frame.c Wed Nov 19 21:36:56 1997 +0000 +++ b/src/frame.c Thu Nov 20 15:50:59 1997 +0000 @@ -21,6 +21,9 @@ #include <config.h> #include <stdio.h> +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif #include "lisp.h" #include "charset.h" #ifdef HAVE_WINDOW_SYSTEM @@ -1757,6 +1760,64 @@ Fsetcdr (tem, val); } +static int +frame_name_fnn_p (str, len) + char *str; + int len; +{ + if (len > 1 && str[0] == 'F') + { + char *end_ptr; + long num = strtol (str + 1, &end_ptr, 10); + + if (end_ptr == str + len) + return 1; + } + return 0; +} + +/* Set the name of the terminal frame. Also used by MSDOS frames. + Modeled after x_set_name which is used for WINDOW frames. */ + +void +set_term_frame_name (f, name) + struct frame *f; + Lisp_Object name; +{ + f->explicit_name = ! NILP (name); + + /* If NAME is nil, set the name to F<num>. */ + if (NILP (name)) + { + char namebuf[20]; + + /* Check for no change needed in this very common case + before we do any consing. */ + if (frame_name_fnn_p (XSTRING (f->name)->data, XSTRING (f->name)->size)) + return; + + terminal_frame_count++; + sprintf (namebuf, "F%d", terminal_frame_count); + name = build_string (namebuf); + } + else + { + CHECK_STRING (name, 0); + + /* Don't change the name if it's already NAME. */ + if (! NILP (Fstring_equal (name, f->name))) + return; + + /* Don't allow the user to set the frame name to F<num>, so it + doesn't clash with the names we generate for terminal frames. */ + if (frame_name_fnn_p (XSTRING (name)->data, XSTRING (name)->size)) + error ("Frame names of the form F<num> are usurped by Emacs"); + } + + f->name = name; + update_mode_lines = 1; +} + void store_frame_param (f, prop, val) struct frame *f; @@ -1780,8 +1841,12 @@ f->buffer_predicate = val; if (! FRAME_WINDOW_P (f)) - if (EQ (prop, Qmenu_bar_lines)) - set_menu_bar_lines (f, val, make_number (FRAME_MENU_BAR_LINES (f))); + { + if (EQ (prop, Qmenu_bar_lines)) + set_menu_bar_lines (f, val, make_number (FRAME_MENU_BAR_LINES (f))); + else if (EQ (prop, Qname)) + set_term_frame_name (f, val); + } if (EQ (prop, Qminibuffer) && WINDOWP (val)) {