# HG changeset patch # User Roland McGrath # Date 682281010 0 # Node ID dce611246f597929994e02b4debd41feba0f4312 # Parent 4b1d2362775933c2b9797b53a880a109e4e3c70c *** empty log message *** diff -r 4b1d23627759 -r dce611246f59 src/buffer.c --- a/src/buffer.c Wed Aug 14 22:50:16 1991 +0000 +++ b/src/buffer.c Thu Aug 15 18:30:10 1991 +0000 @@ -93,6 +93,7 @@ int check_protected_fields; Lisp_Object Fset_buffer (); +void set_buffer_internal (); /* Alist of all buffer names vs the buffers. */ /* This used to be a variable, but is no longer, @@ -306,12 +307,16 @@ *(Lisp_Object *)(offset + (char *)&buffer_defaults); } -DEFUN ("generate-new-buffer", Fgenerate_new_buffer, Sgenerate_new_buffer, +/* We split this away from generate-new-buffer, because rename-buffer + and set-visited-file-name ought to be able to use this to really + rename the buffer properly. */ + +DEFUN ("generate-new-buffer-name", Fgenerate_new_buffer_name, Sgenerate_new_buffer_name, 1, 1, 0, - "Create and return a buffer with a name based on NAME.\n\ -If there is no live buffer named NAME, then one is created.\n\ + "Return a string that is the name of no existing buffer based on NAME.\n\ +If there is no live buffer named NAME, then return NAME.\n\ Otherwise modify name by appending `', incrementing NUMBER\n\ -until an unused name is found, and then create a buffer.") +until an unused name is found, and then return that name.") (name) register Lisp_Object name; { @@ -323,7 +328,7 @@ tem = Fget_buffer (name); if (NULL (tem)) - return Fget_buffer_create (name); + return name; count = 1; while (1) @@ -332,14 +337,14 @@ gentemp = concat2 (name, build_string (number)); tem = Fget_buffer (gentemp); if (NULL (tem)) - return Fget_buffer_create (gentemp); + return gentemp; } } DEFUN ("buffer-name", Fbuffer_name, Sbuffer_name, 0, 1, 0, "Return the name of BUFFER, as a string.\n\ -Wyth no argument or nil as argument, return the name of the current buffer.") +With no argument or nil as argument, return the name of the current buffer.") (buffer) register Lisp_Object buffer; { @@ -490,27 +495,38 @@ return make_number (BUF_MODIFF (buf)); } -DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 1, +DEFUN ("rename-buffer", Frename_buffer, Srename_buffer, 1, 2, "sRename buffer (to new name): ", "Change current buffer's name to NEWNAME (a string).\n\ -It is an error if a buffer named NEWNAME already exists.\n\ +If second arg DISTINGUISH is nil or omitted, it is an error if a\n\ +buffer named NEWNAME already exists.\n\ +If DISTINGUISH is non-nil, come up with a new name using\n\ +`generate-new-buffer-name'.\n\ +Return the name we actually gave the buffer.\n\ This does not change the name of the visited file (if any).") - (name) - register Lisp_Object name; + (name, distinguish) + register Lisp_Object name, distinguish; { register Lisp_Object tem, buf; CHECK_STRING (name, 0); tem = Fget_buffer (name); + if (XBUFFER (tem) == current_buffer) + return current_buffer->name; if (!NULL (tem)) - error ("Buffer name \"%s\" is in use", XSTRING (name)->data); + { + if (!NULL (distinguish)) + name = Fgenerate_new_buffer_name (name); + else + error ("Buffer name \"%s\" is in use", XSTRING (name)->data); + } current_buffer->name = name; XSET (buf, Lisp_Buffer, current_buffer); Fsetcar (Frassq (buf, Vbuffer_alist), name); if (NULL (current_buffer->filename) && !NULL (current_buffer->auto_save_file_name)) call0 (intern ("rename-auto-save-file")); - return Qnil; + return name; } DEFUN ("other-buffer", Fother_buffer, Sother_buffer, 0, 1, 0, @@ -1104,7 +1120,10 @@ sym = XCONS (XCONS (alist)->car)->car; tem = Fget (sym, Qpermanent_local); if (! NULL (tem)) - Fmake_local_variable (sym, XCONS (XCONS (alist)->car)->cdr); + { + Fmake_local_variable (sym); + Fset (sym, XCONS (XCONS (alist)->car)->cdr); + } } /* Force mode-line redisplay. Useful here because all major mode @@ -1515,7 +1534,7 @@ /*DEFVAR_LISP ("debug-check-symbol", &Vcheck_symbol, "Don't ask."); */ - DEFVAR_LISP ("bgfore-change-function", &Vbefore_change_function, + DEFVAR_LISP ("before-change-function", &Vbefore_change_function, "Function to call before each text change.\n\ Two arguments are passed to the function: the positions of\n\ the beginning and end of the range of old text to be changed.\n\ @@ -1572,7 +1591,7 @@ defsubr (&Sget_buffer); defsubr (&Sget_file_buffer); defsubr (&Sget_buffer_create); - defsubr (&Sgenerate_new_buffer); + defsubr (&Sgenerate_new_buffer_name); defsubr (&Sbuffer_name); /*defsubr (&Sbuffer_number);*/ defsubr (&Sbuffer_file_name);