EMACS::linum模式和字体大小(无法读取的行号)

EMACS::linum模式和字体大小(无法读取的行号),emacs,font-size,Emacs,Font Size,当在emacs中使用linum模式时,当字体增加M-x文本比例增加时,有一件事困扰着我。行号的字体大小与读取的字体大小相同,并且不适合缓冲区左侧的左边距 正常字体大小,好吗 字体大小增加,不再可读 我真正想要的: 当增加/减少字体时我希望其中一个能起作用 然后,相应地增加/减少左边缘的宽度(分别为左边缘) 然后不要更改左边距的字体,而是增加/减少行号之间的间距 有人有什么建议吗? 谢谢,伙计们 请查看以下两个链接: 它很好地满足了我的需要 示例: 1. 如果可以的话,我会根据自定义面

当在emacs中使用linum模式时,当字体增加
M-x文本比例增加
时,有一件事困扰着我。行号的字体大小与读取的字体大小相同,并且不适合
缓冲区左侧的
左边距

正常字体大小,好吗

字体大小增加,不再可读


我真正想要的:

增加/减少字体时我希望其中一个能起作用

  • 然后,相应地增加/减少左边缘的宽度(分别为左边缘)
  • 然后不要更改左边距的字体,而是增加/减少行号之间的间距

    有人有什么建议吗? 谢谢,伙计们


  • 请查看以下两个链接:

  • 它很好地满足了我的需要

    示例:

    1.

    如果可以的话,我会根据
    自定义面部
    对解决方案进行评论。它对我很有效。实际面是
    linum
    而不是
    linum模式
    ,至少在我的
    emacs-24.3.1
    中是这样。在自定义缓冲区中,我单击“显示所有属性”,然后将面高度设置为十分之一点的100。如果您(和我一样)可以接受行号的固定大小面,那么基于
    自定义面
    的解决方案非常简单。

    我想我可以用以下代码解决该问题:

    (require 'linum)
    (defun linum-update-window-scale-fix (win)
      "fix linum for scaled text"
      (set-window-margins win
              (ceiling (* (if (boundp 'text-scale-mode-step)
                      (expt text-scale-mode-step
                        text-scale-mode-amount) 1)
                  (if (car (window-margins))
                      (car (window-margins)) 1)
                  ))))
    (advice-add #'linum-update-window :after #'linum-update-window-scale-fix)
    

    至少在24.5版本中,这似乎是可行的。

    我见过的最简单、最直接的解决方案是将行号设置为固定高度。根据客户的回答,这可以很容易地完成:

    也就是说,在emacs配置中添加以下行(如果您正在使用SpaceMac,则添加到
    dotSpaceMac/user config
    函数中):


    您可以禁用
    linum模式
    并改用
    显示行号模式
    ,这是自版本26以来Emacs的一部分,并且在增加字体大小时可以很好地缩放

    例如,您的配置可以如下所示:

    ;;(全局linum模式1)
    (全局显示行号模式)
    
    +1我很满意。这绝对是个好办法,
    但这方面存在一些问题。例如,行号并不总是减小其大小。我不理解所有的代码,它可能是可以解决的,但不知道如何解决。彼得,我现在没有把这个答案标记为“接受”。以后可能会。谢谢。该方法基于固定因子1.04(选择为合理值)的缩放。这种线性减少并不总是与下一个可用的字体大小匹配,因此您需要再次按键,直到它缩放到下一个可用的大小。当字体变小时,这种情况会更频繁地发生。我通过经验构建一个直接跳转到下一个字体所需的缩放步长增量列表,来解决放大的问题。这个列表适合我的字体,但正如我在一个链接中提到的,我不知道如何确定下一个可用字体的大小。PS:你可以在列表
    sub zoom ht
    中看到,这是一个针对给定数量缩放(索引)的字体大小列表,其中有很多重复的字体大小。“放大”逻辑使用此列表,但“缩小”没有等效列表。。这不值得操心,因为这不是一种“正确”的方式,而且非常耗时,而且很有效。。有一天我可能会无意中发现如何直接访问字体信息……我还没有找到更好的方法:-)。我想我现在明白了;感谢您的解释。在Emacs26.1上,这会不断增加行号列的宽度,最终使窗口无法使用。
    (require 'linum)
    (defun linum-update-window-scale-fix (win)
      "fix linum for scaled text"
      (set-window-margins win
              (ceiling (* (if (boundp 'text-scale-mode-step)
                      (expt text-scale-mode-step
                        text-scale-mode-amount) 1)
                  (if (car (window-margins))
                      (car (window-margins)) 1)
                  ))))
    (advice-add #'linum-update-window :after #'linum-update-window-scale-fix)
    
    (eval-after-load "linum"
      '(set-face-attribute 'linum nil :height 100))