Emacs treats buffers whose names begin with a space as internal buffers.
To avoid confusion when visiting a file whose name begins with a space,
this function prepends a \"|\" to the final result if necessary."
- (let ((lastname (file-name-nondirectory filename)))
- (if (string= lastname "")
- (setq lastname filename))
- (generate-new-buffer (if (string-prefix-p " " lastname)
- (concat "|" lastname)
- lastname))))
+ (let* ((lastname (file-name-nondirectory filename))
+ (lastname (if (string= lastname "")
+ filename lastname))
+ (buf (generate-new-buffer (if (string-prefix-p " " lastname)
+ (concat "|" lastname)
+ lastname))))
+ (uniquify--create-file-buffer-advice buf filename)
+ buf))
(defcustom automount-dir-prefix (purecopy "^/tmp_mnt/")
"Regexp to match the automounter prefix in a directory name."
;; rename-buffer and create-file-buffer. (Setting find-file-hook isn't
;; sufficient.)
-(advice-add 'rename-buffer :around #'uniquify--rename-buffer-advice)
-(defun uniquify--rename-buffer-advice (rb-fun newname &optional unique &rest args)
+;; (advice-add 'rename-buffer :around #'uniquify--rename-buffer-advice)
+(defun uniquify--rename-buffer-advice (newname &optional unique)
+ ;; BEWARE: This is called directly from `buffer.c'!
"Uniquify buffer names with parts of directory name."
- (let ((retval (apply rb-fun newname unique args)))
(uniquify-maybe-rerationalize-w/o-cb)
- (if (null unique)
+ (if (null unique)
;; Mark this buffer so it won't be renamed by uniquify.
(setq uniquify-managed nil)
(when uniquify-buffer-name-style
;; Rerationalize w.r.t the new name.
(uniquify-rationalize-file-buffer-names
- newname
+ newname
(uniquify-buffer-file-name (current-buffer))
- (current-buffer))
- (setq retval (buffer-name (current-buffer)))))
- retval))
+ (current-buffer)))))
-(advice-add 'create-file-buffer :around #'uniquify--create-file-buffer-advice)
-(defun uniquify--create-file-buffer-advice (cfb-fun filename &rest args)
+;; (advice-add 'create-file-buffer :around #'uniquify--create-file-buffer-advice)
+(defun uniquify--create-file-buffer-advice (buf filename)
+ ;; BEWARE: This is called directly from `files.el'!
"Uniquify buffer names with parts of directory name."
- (let ((retval (apply cfb-fun filename args)))
- (if uniquify-buffer-name-style
- (let ((filename (expand-file-name (directory-file-name filename))))
- (uniquify-rationalize-file-buffer-names
- (file-name-nondirectory filename)
- (file-name-directory filename) retval)))
- retval))
+ (when uniquify-buffer-name-style
+ (let ((filename (expand-file-name (directory-file-name filename))))
+ (uniquify-rationalize-file-buffer-names
+ (file-name-nondirectory filename)
+ (file-name-directory filename)
+ buf))))
(defun uniquify-unload-function ()
"Unload the uniquify library."
(set-buffer buf)
(when uniquify-managed
(push (cons buf (uniquify-item-base (car uniquify-managed))) buffers)))
- (advice-remove 'rename-buffer #'uniquify--rename-buffer-advice)
- (advice-remove 'create-file-buffer #'uniquify--create-file-buffer-advice)
(dolist (buf buffers)
(set-buffer (car buf))
(rename-buffer (cdr buf) t))))
/* Catch redisplay's attention. Unless we do this, the mode lines for
any windows displaying current_buffer will stay unchanged. */
- update_mode_lines = 11;
+ bset_update_mode_line (current_buffer);
XSETBUFFER (buf, current_buffer);
Fsetcar (Frassq (buf, Vbuffer_alist), newname);
run_buffer_list_update_hook (current_buffer);
+ call2 (intern ("uniquify--rename-buffer-advice"),
+ BVAR (current_buffer, name), unique);
+
/* Refetch since that last call may have done GC. */
return BVAR (current_buffer, name);
}