Skip to content

Instantly share code, notes, and snippets.

@aaronjensen
Created June 16, 2018 02:54
Show Gist options
  • Save aaronjensen/5f77055b95ae74d50dae59b43e19755d to your computer and use it in GitHub Desktop.
Save aaronjensen/5f77055b95ae74d50dae59b43e19755d to your computer and use it in GitHub Desktop.
diff --git a/src/buffer.c b/src/buffer.c
index 653e3fe..c8cec8c 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -287,6 +287,8 @@ static void
bset_name (struct buffer *b, Lisp_Object val)
{
b->name_ = val;
+ if (!NILP (val))
+ b->live_name_ = val;
}
static void
bset_overwrite_mode (struct buffer *b, Lisp_Object val)
@@ -415,6 +417,21 @@ followed by the rest of the buffers. */)
return general;
}
+DEFUN ("killed-buffer-names", Fkilled_buffer_names, Skilled_buffers_names, 0, 0, 0,
+ doc: /* Return list of names of killed buffers that have not been recycled yet. */)
+ ()
+{
+ struct buffer *b;
+ Lisp_Object val = Qnil;
+
+ FOR_EACH_BUFFER (b)
+ if (NILP (b->name_))
+ val = Fcons (b->live_name_, val);
+
+ return val;
+}
+
+
/* Like Fassoc, but use Fstring_equal to compare
(which ignores text properties),
and don't ever QUIT. */
@@ -1103,6 +1120,14 @@ Return nil if BUFFER has been killed. */)
return BVAR (decode_buffer (buffer), name);
}
+DEFUN ("buffer-live-name", Fbuffer_live_name, Sbuffer_live_name, 0, 1, 0,
+ doc: /* Return the name of BUFFER when it was live, as a string.
+ BUFFER defaults to the current buffer. */)
+ (register Lisp_Object buffer)
+{
+ return BVAR (decode_buffer (buffer), live_name);
+}
+
DEFUN ("buffer-file-name", Fbuffer_file_name, Sbuffer_file_name, 0, 1, 0,
doc: /* Return name of file BUFFER is visiting, or nil if none.
No argument or nil as argument means use the current buffer. */)
@@ -6278,12 +6303,14 @@ Functions running this hook are, `get-buffer-create',
defsubr (&Sbuffer_live_p);
defsubr (&Sbuffer_list);
+ defsubr (&Skilled_buffers_names);
defsubr (&Sget_buffer);
defsubr (&Sget_file_buffer);
defsubr (&Sget_buffer_create);
defsubr (&Smake_indirect_buffer);
defsubr (&Sgenerate_new_buffer_name);
defsubr (&Sbuffer_name);
+ defsubr (&Sbuffer_live_name);
defsubr (&Sbuffer_file_name);
defsubr (&Sbuffer_base_buffer);
defsubr (&Sbuffer_local_value);
diff --git a/src/buffer.h b/src/buffer.h
index 5783bfb..24bbcb3 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -500,6 +500,9 @@ struct buffer
/* The name of this buffer. */
Lisp_Object name_;
+ /* The name of this buffer when it was live. */
+ Lisp_Object live_name_;
+
/* The name of the file visited in this buffer, or nil. */
Lisp_Object filename_;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment