列相关函数可在字符位置(从缓冲区开头开始统计字符数)与列位置(从行开头开始统计屏幕字符数)之间进行转换。
这些函数会根据每个字符在屏幕上占据的列数来统计字符。这意味着控制字符会被计为占据 2 列或 4 列(取决于 ctl-arrow 的值),制表符占据的列数则取决于 tab-width 的值以及制表符起始的列位置。See 常规显示规则。
列号计算会忽略窗口宽度和水平滚动量。因此,列值可以是任意大的数值。第一列(最左侧列)的编号为 0。除不可见性外,这些计算也会忽略覆盖层和文本属性。
不可见文本被视为宽度为 0,除非 buffer-invisibility-spec 指定不可见文本应显示为省略号(see 不可见文本)。
该函数返回光标(point)的水平位置(以列为单位),从左边界的 0 开始计数。列位置是当前行开头到光标之间所有字符的显示形式宽度之和。
该函数将光标移动到当前行的 column 列位置。column 的计算会考虑行开头到光标之间字符显示形式的宽度。
以交互方式调用时,column 为前缀数值参数的值。若 column 不是整数,会触发错误。
如果因 column 列落在制表符等多列字符中间而无法移动到该列,光标会移至该字符末尾。但如果 force 非 nil,且 column 列落在制表符中间,则 move-to-column 会将制表符转换为空格(当 indent-tabs-mode 为 nil 时),或在制表符前插入足够的空格(其他情况),使光标能够精确移动到 column 列。尽管指定了 force,其他多列字符仍可能导致异常,因为无法拆分这类字符。
如果行长度不足以到达 column 列,参数 force 也会产生作用;若其值为 t,表示在行尾添加空白字符以达到该列位置。
返回值为实际移动到的列号。