Emacs Lisp中的缓冲区位置列是什么?

9
在Emacs Lisp中,如果您在一个变量中存储了缓冲区位置,那么如何找到它所在的列?
3个回答

18

4
我好奇为什么没有一个与line-number-at-pos相对应的column-number-at-pos函数? - wdkrnls

1

Trey已经解决了这个问题(虽然我个人没有尝试过),但是这里有一些我写的代码可以实现它。

(defun calculate-column (point)
  (save-excursion
    (goto-char point)
    (beginning-of-line)
    (- point (point))))

6
既然已经有内置函数current-column了,为什么还要自己计算呢?你只会忘记所有特殊情况,比如制表符。 - nschum
@nschum 或者像“display”属性一样。 - Clément

1
这个问题存在歧义:“它在哪一列”既可以指“它表现为哪一列字符”,也可以指“从行的开头到当前位置需要前进多少个字符”。通常情况下,这两者是相同的,但在具有文本属性的字符存在时可能会有所不同,例如“(display (space :width 7))” [它表示将具有该文本属性的字符显示为7个空格宽度]。
elisp函数“current-column”返回第1种含义,但基于(point)的值计算则返回第2种含义。在某些情况下,Trey Jackson的答案与compman的答案将因此而返回不同的值。
第2种含义的另一个可能性是“(-(point)(line-beginning-position))”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接