Created
June 16, 2018 02:54
-
-
Save aaronjensen/5f77055b95ae74d50dae59b43e19755d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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