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))
     {