分享一些小功能:mode-line 右對齐、閃烁光標位置、dired 排序、固定窗口

mode-line 右對齐

Right-aligned Mode Line Elements

需要 Emacs 30+

(setq-default mode-line-format
              '("%e" mode-line-front-space
                mode-line-mule-info
                mode-line-modified
                " "
                mode-line-buffer-identification
                mode-line-format-right-align ;; <--- 加上它,后面的都會靠右
                mode-line-modes
                mode-line-misc-info
                mode-line-end-spaces))

閃烁光標位置

Pulsar (pulsar.el)

這個包可以讓光標變化時閃烁一下,例如在兩個 window 之間切換時,可能不容易看到當前 point 的位置,閃烁一下就更容易定位。

我的配置

增加了 winum、flymake、pop-to-mark 的閃烁,閃烁我設置得更緩慢。

(use-package pulsar
  :bind
  ( :map global-map
    ("C-x l" . pulsar-pulse-line)
    ("C-x L" . pulsar-highlight-temporarily))
  :init
  (pulsar-global-mode 1)
  :config
  (setq pulsar-delay 0.05)
  (setq pulsar-iterations 10)
  (let ((pulsar-pulse-functions-list '(pop-to-mark-command
                                       winum-select-window-1
                                       winum-select-window-2
                                       winum-select-window-3
                                       winum-select-window-4
                                       winum-select-window-5
                                       winum-select-window-6
                                       winum-select-window-7
                                       winum-select-window-8
                                       winum-select-window-9
                                       winum-select-window-0-or-10
                                       flymake-goto-prev-error
                                       flymake-goto-next-error)))
    (dolist (f pulsar-pulse-functions-list)
      (add-to-list 'pulsar-pulse-functions f)))
  (add-hook 'next-error-hook #'pulsar-pulse-line))

dired 排序

Borrowing from Jasspa MicroEmacs : Dired Sort Keybindings

dired 默認的排序比較簡單,只會按日期排序。可以擴展一下:

(defun my/dired-sort-by-size ()
  "Sort Dired buffer by file size."
  (interactive)
  (dired-sort-other "-alGghS"))

(defun my/dired-sort-by-date ()
  "Sort Dired buffer by last modification date."
  (interactive)
  (dired-sort-other "-alGght"))

(defun my/dired-sort-by-name ()
  "Sort Dired buffer alphabetically by name."
  (interactive)
  (dired-sort-other "-alGgh"))

(defun my/dired-sort-by-extension ()
  "Sort Dired buffer by file extension."
  (interactive)
  (dired-sort-other "-alGghX"))

(with-eval-after-load 'dired
  (define-key dired-mode-map (kbd "3") #'my/dired-sort-by-size)
  (define-key dired-mode-map (kbd "4") #'my/dired-sort-by-date)
  (define-key dired-mode-map (kbd "5") #'my/dired-sort-by-name)
  (define-key dired-mode-map (kbd "6") #'my/dired-sort-by-extension))

不知道為什麼要從 3 開始而不是從 1 開始 = =

如果是用 use-pacage 配置

我改成了 use-package 的綁定語法,增加了 message 提示當前的排序方法。

(use-package dired
  :straight nil
  :hook ((dired-mode . diff-hl-dired-mode))
  :bind (:map ctl-x-map
	      ("C-j" . dired-jump)
	      :map ctl-x-4-map
	      ("C-j" . dired-jump-other-window)
	      :map dired-mode-map
	      ("C-c C-q" . wdired-change-to-wdired-mode)
              ("A" . spike-leung/handle-album-cover)
              ("1" . spike-leung/dired-sort-by-size)
              ("2" . spike-leung/dired-sort-by-date)
              ("3" . spike-leung/dired-sort-by-name)
              ("4" . spike-leung/dired-sort-by-extension))
  :config
  (setq-default dired-dwim-target t)
  (setq dired-recursive-deletes 'top)

  ;; borrow from: https://emacs.dyerdwelling.family/emacs/20260721093224-emacs--borrowing-from-jasspa-microemacs-dired-sort-keybindings/
  (defun spike-leung/dired-sort-by-size ()
    "Sort Dired buffer by file size."
    (interactive)
    (dired-sort-other "-alGghS")
    (message "dired sort by SIZE."))

  (defun spike-leung/dired-sort-by-date ()
    "Sort Dired buffer by last modification date."
    (interactive)
    (dired-sort-other "-alGght")
    (message "dired sort by DATE."))

  (defun spike-leung/dired-sort-by-name ()
    "Sort Dired buffer alphabetically by name."
    (interactive)
    (dired-sort-other "-alGgh")
    (message "dired sort by NAME."))

  (defun spike-leung/dired-sort-by-extension ()
    "Sort Dired buffer by file extension."
    (interactive)
    (dired-sort-other "-alGghX")
    (message "dired sort by EXTENSION.")))

固定窗口

Dedicate Windows with toggle-window-dedicated

需要 Emacs 30+

有時你在一個 window 中編輯,要打開另一個 buffer,這個 buffer 可能會出現在你的 window 中挤占了位置,影响了你主要使用的 window。

面對這種情况,可以調用 C-x w d (toggle-window-dedicated),固定常用的 window,這樣其他 buffer 的出現就不會占用這個被固定的 window。相當於固定了某個 window 的布局。

如果加上 prefix,即 C-u C-x w d,除了固定 window,還會固定 buffer。

3 个赞

如果只是偶尔需要改变排序,不用这个扩展;可以在dired mode里 C-u s 然后输入任何 ls 选项: ls switches (must contain -l): -al

是可以,但 ls 的排序參數我記不住,文章分享的方法還是挺方便的。

固定窗口这个确实不知道