You can use the function kill-current-buffer from simple.el. The docstring says:
kill-current-buffer is an interactive compiled Lisp function in
Kill the current buffer.
When called in the minibuffer, get out of the minibuffer
This is like ‘kill-this-buffer’, but it ...
Short answer: (kill-buffer (current-buffer)) works fine.
Longer answer: My init.el has
;; kill the current buffer instead of choosing
;; except that kill-this-buffer may break if menus are not available:
The following code renames the buffer to the value of #+TITLE: when you open the Org file. This is the most simple version. It does not update the buffer name when you add or change the title. But in that case you can call org+-buffer-name-to-title directly if you really need it.
(defun org+-buffer-name-to-title ()
"Rename buffer to value of #+TITLE:."
"Newly opened" can only mean relative to a state when the buffer didn't exist. Every time prior to when it came into being it didn't exist.
So yes, you need to take a snapshot of the list of existing buffers at some point prior to creating the new buffer, in order to later check whether the buffer is "new" - compared to that prior snapshot moment.
Save the ...
The question is not too clear.
But I think maybe what you're saying is that you want to:
Show message one.
Let the user start doing some arbitrary editing, in any buffer. No limits on what she can do.
Let the user indicate when she's done.
Show message two.
If that, or similar, is the case, then one way to realizes steps 2 and 3 is to use a recursive edit.