Question

The screenshot below was generated using visual-line-mode. I am seeking to test whether a particular line could not be wrapped at word-end because the entire word exceeded the width of a window.

For example:  if the cursor is anywhere on line number 1, I would like to return t if point-at-bol to point-at-eol is both one long word that cannot be broken and it exceeds the window-width.

The same test should return nil if the cursor is anywhere on line 3.

I tried placing the cursor immediately before and immediately after the \ symbol in the right-hand margin and attempting to identify that character with what-cursor-position but that particular symbol is not reachable with that function. In other words, \ doesn't seem to occupy a (point) in the usual sense of testing a point at window edge.

Example
(source: lawlist.com)

Was it helpful?

Solution

The following function tests if the last word on the line is longer than the window width.

(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))))

And here's a version that addresses the "both" issue you raised, but I suspect the former may be closer to what you want.

(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)))))

In response to the comments, try this one (although I can't recall if tabs break lines, so you may need to edit the regexp):

(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)))))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top