;;; longlines.el --- automatically wrap long lines
-;; Copyright (C) 2000, 2001, 2004, 2005 by Free Software Foundation, Inc.
+;; Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
;; Authors: Kai Grossjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE>
;; Alex Schroeder <alex@gnu.org>
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-;; Boston, MA 02111-1307, USA.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
;;; Commentary:
:type 'boolean)
(defcustom longlines-show-hard-newlines nil
- "*Non-nil means each hard newline is marked with a symbol.
+ "*Non-nil means each hard newline is marked on the screen.
+\(The variable `longlines-show-effect' controls what they look like.)
You can also enable the display temporarily, using the command
`longlines-show-hard-newlines'"
:group 'longlines
`fill-column'. The soft newlines used for line wrapping will not
show up when the text is yanked or saved to disk.
-If `longlines-auto-wrap' is non-nil, lines are automatically
+If the variable `longlines-auto-wrap' is non-nil, lines are automatically
wrapped whenever the buffer is changed. You can always call
`fill-paragraph' to fill individual paragraphs.
-If `longlines-show-hard-newlines' is non-nil, hard newlines will
-be marked by a symbol."
+If the variable `longlines-show-hard-newlines' is non-nil, hard newlines
+are indicated with a symbol."
:group 'longlines :lighter " ll"
(if longlines-mode
;; Turn on longlines mode
(add-to-list 'buffer-file-format 'longlines)
(add-hook 'change-major-mode-hook 'longlines-mode-off nil t)
(make-local-variable 'buffer-substring-filters)
+ (set (make-local-variable 'isearch-search-fun-function)
+ 'longlinges-search-function)
(add-to-list 'buffer-substring-filters 'longlines-encode-string)
(when longlines-wrap-follows-window-size
(set (make-local-variable 'fill-column)
(add-hook 'window-configuration-change-hook
'longlines-window-change-function nil t))
(let ((buffer-undo-list t)
+ (inhibit-read-only t)
(mod (buffer-modified-p)))
;; Turning off undo is OK since (spaces + newlines) is
;; conserved, except for a corner case in
(setq buffer-file-format (delete 'longlines buffer-file-format))
(if longlines-showing
(longlines-unshow-hard-newlines))
- (let ((buffer-undo-list t))
+ (let ((buffer-undo-list t)
+ (inhibit-read-only t))
(longlines-encode-region (point-min) (point-max)))
(remove-hook 'change-major-mode-hook 'longlines-mode-off t)
(remove-hook 'before-kill-functions 'longlines-encode-region t)
(remove-hook 'post-command-hook 'longlines-post-command-function t)
(remove-hook 'window-configuration-change-hook
'longlines-window-change-function t)
- (kill-local-variable 'fill-column)))
+ (when longlines-wrap-follows-window-size
+ (kill-local-variable 'fill-column))
+ (kill-local-variable 'isearch-search-fun-function)
+ (kill-local-variable 'require-final-newline)
+ (kill-local-variable 'buffer-substring-filters)
+ (kill-local-variable 'use-hard-newlines)))
(defun longlines-mode-off ()
"Turn off longlines mode.
"Make hard newlines between BEG and END visible."
(let* ((pmin (min beg end))
(pmax (max beg end))
- (pos (text-property-any pmin pmax 'hard t)))
+ (pos (text-property-not-all pmin pmax 'hard nil)))
(while pos
(put-text-property pos (1+ pos) 'display
(copy-sequence longlines-show-effect))
- (setq pos (text-property-any (1+ pos) pmax 'hard t)))))
+ (setq pos (text-property-not-all (1+ pos) pmax 'hard nil)))))
(defun longlines-unshow-hard-newlines ()
"Make hard newlines invisible again."
(interactive)
(setq longlines-showing nil)
- (let ((pos (text-property-any (point-min) (point-max) 'hard t)))
+ (let ((pos (text-property-not-all (point-min) (point-max) 'hard nil)))
(while pos
(remove-text-properties pos (1+ pos) '(display))
- (setq pos (text-property-any (1+ pos) (point-max) 'hard t)))))
+ (setq pos (text-property-not-all (1+ pos) (point-max) 'hard nil)))))
;; Wrapping the paragraphs.
(longlines-wrap-region (point-min) (point-max))
(set-buffer-modified-p mod))))
+;; Isearch
+
+(defun longlinges-search-function ()
+ (cond
+ (isearch-word
+ (if isearch-forward 'word-search-forward 'word-search-backward))
+ (isearch-regexp
+ (if isearch-forward 're-search-forward 're-search-backward))
+ (t
+ (if isearch-forward
+ 'longlines-search-forward
+ 'longlines-search-backward))))
+
+(defun longlines-search-forward (string &optional bound noerror count)
+ (let ((search-spaces-regexp "[ \n]+"))
+ (re-search-forward (regexp-quote string) bound noerror count)))
+
+(defun longlines-search-backward (string &optional bound noerror count)
+ (let ((search-spaces-regexp "[ \n]+"))
+ (re-search-backward (regexp-quote string) bound noerror count)))
+
;; Loading and saving
(add-to-list