测试一个大于窗口宽度的长字

时间:2014-05-06 18:34:48

标签: emacs elisp

下面的屏幕截图是使用visual-line-mode生成的。我试图测试一个特定的行是否无法在word-end包装,因为整个单词超出了窗口的宽度。

例如:如果光标位于第1行的任何位置,如果tpoint-at-bol 两个一个长字,我想返回point-at-eol不能被破坏且超过window-width

如果光标位于第3行的任何位置,则同一测试应返回nil

我尝试将光标放在右边距的\符号之前和之后,并尝试用what-cursor-position标识该字符,但该特定符号无法通过该功能到达。换句话说,\似乎没有占据通常意义上的(point)来测试窗口边缘的点。

Example http://www.lawlist.com/images/example_05_06_2014_a.png

1 个答案:

答案 0 :(得分:1)

以下函数测试行上的最后一个字是否长于窗口宽度。

(defun too-long-p ()
  "Returns t if last word on the line is longer than the window's
column width."
  (save-excursion
    (end-of-line)
    (> (length (thing-at-point 'word))
       (window-total-width))))

这是一个解决你提出的“ both ”问题的版本,但我怀疑前者可能更接近你想要的。

(defun too-long-p ()
  "Returns t if last word on the line is longer than the window's
column width."
  (save-excursion
    (beginning-of-line)
    (forward-word)
    (and (eolp)
         (> (length (thing-at-point 'word))
            (window-total-width)))))

在回复评论时,试试这个(虽然我不记得tab是否会破坏行,所以你可能需要编辑正则表达式):

(defun too-long-p ()
  "Returns t if last word on the line is longer than the window's
column width."
  (save-excursion
    (beginning-of-line)
    (unless (re-search-forward "[ \t]"
                               (+ (point-at-bol) (window-total-width)) t)
      (> (length (thing-at-point 'line)) (window-total-width)))))