]> git.eshelyaron.com Git - emacs.git/commitdiff
(hexl-isearch-search-function): Fix regexp-building code to
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 11 Apr 2006 16:48:17 +0000 (16:48 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 11 Apr 2006 16:48:17 +0000 (16:48 +0000)
quote special chars, and make the trick work on the hex part of the
buffer as well.
(hexl-mode, hexl-save-buffer, hexl-mode-exit)
(hexl-maybe-dehexlify-buffer): Use restore-buffer-modified-p.

lisp/ChangeLog
lisp/hexl.el

index 13f26abcbfd47602c95098fb5536793f8a2e284b..747781efcb6b9d80d42a6f6fd69edc24ea3fb6e2 100644 (file)
@@ -1,5 +1,11 @@
 2006-04-11  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * hexl.el (hexl-isearch-search-function): Fix regexp-building code to
+       quote special chars, and make the trick work on the hex part of the
+       buffer as well.
+       (hexl-mode, hexl-save-buffer, hexl-mode-exit)
+       (hexl-maybe-dehexlify-buffer): Use restore-buffer-modified-p.
+
        * startup.el (normal-splash-screen): Fix last change so we don't wait
        2 minutes if we don't show the splash screen.
 
index bdece19f96b339fdd1fd6183f2bd01721d48263d..1e724aa418ac82c6081816af9a22c79399b52c39 100644 (file)
@@ -38,7 +38,7 @@
 ;; grouping.
 ;;
 ;; -iso in `hexl-options' will allow iso characters to display in the
-;; ASCII region of the screen (if your emacs supports this) instead of
+;; ASCII region of the screen (if your Emacs supports this) instead of
 ;; changing them to dots.
 
 ;;; Code:
@@ -62,7 +62,7 @@ and \"-de\" when dehexlifying a buffer."
   :group 'hexl)
 
 (defcustom hexl-iso ""
-  "If your emacs can handle ISO characters, this should be set to
+  "If your Emacs can handle ISO characters, this should be set to
 \"-iso\" otherwise it should be \"\"."
   :type 'string
   :group 'hexl)
@@ -229,7 +229,7 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode.
                                  original-point))
          (or (bolp) (setq original-point (1- original-point))))
         (hexlify-buffer)
-        (set-buffer-modified-p modified))
+        (restore-buffer-modified-p modified))
       (make-local-variable 'hexl-max-address)
       (setq hexl-max-address max-address)
       (condition-case nil
@@ -300,9 +300,16 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode.
       (lambda (string &optional bound noerror count)
        (funcall
         (if isearch-forward 're-search-forward 're-search-backward)
-        (if (> (length string) 80)
-            (regexp-quote string)
-          (mapconcat 'string string "\\(?:\n\\(?:[:a-f0-9]+ \\)+ \\)?"))
+         (let ((textre
+                (if (> (length string) 80)
+                    (regexp-quote string)
+                  (mapconcat (lambda (c) (regexp-quote (string c))) string
+                             "\\(?:\n\\(?:[:a-f0-9]+ \\)+ \\)?"))))
+           (if (string-match "\\` ?\\([a-f0-9]+ \\)*[a-f0-9]+ ?\\'" string)
+               (concat textre "\\|"
+                       (mapconcat 'regexp-quote (split-string string " ")
+                                  " \\(?: .+\n[a-f0-9]+: \\)?"))
+             textre))
         bound noerror count))
     (let ((isearch-search-fun-function nil))
       (isearch-search-fun))))
@@ -318,34 +325,33 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode.
   "Save a hexl format buffer as binary in visited file if modified."
   (interactive)
   (if hexl-in-save-buffer nil
-    (set-buffer-modified-p (if (buffer-modified-p)
-                              (save-excursion
-                                (let ((buf (generate-new-buffer " hexl"))
-                                      (name (buffer-name))
-                                      (file-name (buffer-file-name))
-                                      (start (point-min))
-                                      (end (point-max))
-                                      modified)
-                                  (set-buffer buf)
-                                  (insert-buffer-substring name start end)
-                                  (set-buffer name)
-                                  (dehexlify-buffer)
-                                  ;; Prevent infinite recursion.
-                                  (let ((hexl-in-save-buffer t))
-                                    (save-buffer))
-                                  (setq modified (buffer-modified-p))
-                                  (delete-region (point-min) (point-max))
-                                  (insert-buffer-substring buf start end)
-                                  (kill-buffer buf)
-                                  modified))
-                            (message "(No changes need to be saved)")
-                            nil))
+    (restore-buffer-modified-p
+     (if (buffer-modified-p)
+         (let ((buf (generate-new-buffer " hexl"))
+               (name (buffer-name))
+               (start (point-min))
+               (end (point-max))
+               modified)
+           (with-current-buffer buf
+             (insert-buffer-substring name start end)
+             (set-buffer name)
+             (dehexlify-buffer)
+             ;; Prevent infinite recursion.
+             (let ((hexl-in-save-buffer t))
+               (save-buffer))
+             (setq modified (buffer-modified-p))
+             (delete-region (point-min) (point-max))
+             (insert-buffer-substring buf start end)
+             (kill-buffer buf)
+             modified))
+       (message "(No changes need to be saved)")
+       nil))
     ;; Return t to indicate we have saved t
     t))
 
 ;;;###autoload
 (defun hexl-find-file (filename)
-  "Edit file FILENAME in hexl-mode.
+  "Edit file FILENAME in `hexl-mode'.
 Switch to a buffer visiting file FILENAME, creating one in none exists."
   (interactive
    (list
@@ -367,7 +373,7 @@ With arg, don't unhexlify buffer."
            (original-point (1+ (hexl-current-address))))
        (dehexlify-buffer)
        (remove-hook 'write-contents-functions 'hexl-save-buffer t)
-       (set-buffer-modified-p modified)
+       (restore-buffer-modified-p modified)
        (goto-char original-point)
        ;; Maybe adjust point for the removed CR characters.
        (when (eq (coding-system-eol-type buffer-file-coding-system) 1)
@@ -403,7 +409,7 @@ Ask the user for confirmation."
            (original-point (1+ (hexl-current-address))))
        (dehexlify-buffer)
        (remove-hook 'write-contents-functions 'hexl-save-buffer t)
-       (set-buffer-modified-p modified)
+       (restore-buffer-modified-p modified)
        (goto-char original-point))))
 
 (defun hexl-current-address (&optional validate)
@@ -917,14 +923,14 @@ Customize the variable `hexl-follow-ascii' to disable this feature."
            )))))
 
 (defun hexl-activate-ruler ()
-  "Activate `ruler-mode'"
+  "Activate `ruler-mode'."
   (require 'ruler-mode)
   (set (make-local-variable 'ruler-mode-ruler-function)
        'hexl-mode-ruler)
   (ruler-mode 1))
 
 (defun hexl-follow-line ()
-  "Activate `hl-line-mode'"
+  "Activate `hl-line-mode'."
   (require 'frame)
   (require 'hl-line)
   (with-no-warnings
@@ -1071,5 +1077,5 @@ This function is assumed to be used as call back function for `hl-line-mode'."
 
 (provide 'hexl)
 
-;;; arch-tag: d5a7aa8a-9bce-480b-bcff-6c4c7ca5ea4a
+;; arch-tag: d5a7aa8a-9bce-480b-bcff-6c4c7ca5ea4a
 ;;; hexl.el ends here