ivy-richのivy-rich--switch-buffer-root-and-filename の動作がどうも怪しく、ivy-rich-switch-buffer-pathで空の文字列が出力されるためにバッファのパスが表示されない。
なので、関数を再定義したというわけ。
(defun ivy-rich--switch-buffer-root-and-filename (candidate) (let* ((buffer (get-buffer candidate)) (truenamep t)) (cl-destructuring-bind (filename directory mode) (ivy-rich--local-values buffer '(buffer-file-name default-directory major-mode)) ;; Only make sense when `filename' and `root' are both not `nil' (unless (and filename directory (if (file-remote-p filename) ivy-rich-parse-remote-buffer t) (not (eq mode 'dired-mode))) (setq truenamep nil)) (when (and truenamep (ivy-rich-switch-buffer-in-project-p candidate)) ;; Find the project root directory or `default-directory' (setq directory (cond ((bound-and-true-p projectile-mode) (or (ivy-rich--local-values buffer 'projectile-project-root) (with-current-buffer buffer (projectile-project-root)))) ((require 'project nil t) (with-current-buffer buffer (setq truenamep nil) (car (project-roots (project-current)))))))) (if truenamep (progn (setq filename (or (ivy-rich--local-values buffer 'buffer-file-truename) (file-truename filename))) (cons (expand-file-name directory) (expand-file-name filename))))))) (defun ivy-rich-switch-buffer-path (candidate) (if-let ((result (ivy-rich--switch-buffer-root-and-filename candidate))) (cl-destructuring-bind (root . filename) result (cond ;; Case: absolute ((or (memq ivy-rich-path-style '(full absolute)) (and (null ivy-rich-parse-remote-file-path) (or (file-remote-p root)))) (or filename root)) ;; Case: abbreviate ((memq ivy-rich-path-style '(abbreviate abbrev)) (abbreviate-file-name (or filename root))) ;; Case: relative ((or (eq ivy-rich-path-style 'relative) t) ; make 'relative default (if (and filename root) (let ((relative-path (string-remove-prefix root filename))) (if (string= relative-path candidate) (concat (file-name-as-directory (file-name-nondirectory (directory-file-name (file-name-directory filename)))) relative-path) relative-path)) "")))) ""))