Emacs 下minimap的使用分享

以前觉得 sublime text中的minimap 是个蛮不错的设计,最近突然想看看Emacs有什么类似方案,发现有好几个(minimap.el, sublimity-mode, demap),用下来minimap.el总体体验最好,就是有个小问题minimap生成后宽度没有固定,修一下就好了,有兴趣的可以试试看

(use-package minimap
  :preface
  (defun minimap--fix-width ()
    (with-current-buffer minimap-buffer-name
      (setq window-size-fixed 'width)))
  :init (setq minimap-window-location 'right)
  :hook (after-init . minimap-mode)
  :config
  (advice-add #'minimap-new-minimap :after #'minimap--fix-width))

最后来张效果图

4 个赞

minimap-minimum-width 不起作用吗?

它会在创建minimap buffer的时候设置好宽度,但是我使用下来 只要 split-window-horizontally 就会被重置,变成三个等分的buffer :sob:

1 个帖子被拆分为一个新话题:哪个编辑器/IDE 最早引入 minimap?

看代码,宽带是取 minimap-minimum-width(* (window-width) minimap-width-fraction) 的最大值。我用这个简单的配置就行了

(use-package minimap
  :init (setq minimap-width-fraction 0.10
              minimap-minimum-width 10
              minimap-window-location 'right)
  :hook (after-init . minimap-mode))
3 个赞

日常写代码的时候会分个两三屏,感觉 minimap 太占空间了

水平的话 两屏还可以,三屏的话 的确就很小了,可以考虑新开个frame

类似地糊了一个去掉左右两边换行箭头的函数,不知为何并不生效?

(use-package minimap
  :init
  (setq minimap-width-fraction 0.10
        minimap-minimum-width 10
        minimap-window-location 'right)
  (defun minimap--disable-fringe-indicator nil
    (with-current-buffer minimap-buffer-name
      (setq-local fringe-indicator-alist (append '((continuation nil nil)) fringe-indicator-alist))))
  :hook (after-init . minimap-mode)
  :config
  (advice-add #'minimap-new-minimap :after #'minimap--disable-fringe-indicator))

另外想问问怎样在所有模式下启用minimap?默认的minimap-major-modes只能手动一个个添加吗?

set-window-fringes 设置fringe会立即刷新buffer,更新显示,你可以试试 , 我是这么设置的

  (defun minimap--fix-width ()
    (with-current-buffer minimap-buffer-name
      (setq window-size-fixed 'width)
      (set-window-fringes (minimap-get-window) 0 1 nil)))
(advice-add #'minimap-new-minimap :after #'minimap--fix-width)

至于模式的话,的确是在 minimap-major-modes 里添加自己需要的

谢谢!成功了:

(use-package minimap
  :init
  (setq minimap-width-fraction 0.10
        minimap-minimum-width 10
        minimap-window-location 'right)
  (setq minimap-major-modes '(prog-mode text-mode))
  (defun minimap--customize nil
    (with-current-buffer minimap-buffer-name
      (setq-local fringe-indicator-alist (append '((continuation nil nil)) fringe-indicator-alist))
      (setq-local window-size-fixed 'width)
      (set-window-fringes (minimap-get-window) 1 1 nil)))
  :hook (after-init . minimap-mode)
  :config
  (advice-add #'minimap-new-minimap :after #'minimap--customize))

另外我可能知道这个问题的原因了

我遇到的情况是,在balance-window的时候,minimap这个window也会被拉宽,添上了你的代码之后就正常了。我怀疑是你的配置中,有在split-window-below或者split-window-right之后自动balance-window的行为。像你这样的方法确实从根本上解决了问题。

1 个赞