Author: nosuke
Date: Sat May  5 05:24:44 2007
New Revision: 4548

Modified:
   trunk/emacs/uim-candidate.el
   trunk/emacs/uim-keymap.el
   trunk/emacs/uim-var.el
   trunk/emacs/uim.el

Log:
* emacs/uim-keymap.el
* emacs/uim-var.el
* emacs/uim.el
* emacs/uim-candidate.el
 - Improve font-lock-mode support



Modified: trunk/emacs/uim-candidate.el
==============================================================================
--- trunk/emacs/uim-candidate.el        (original)
+++ trunk/emacs/uim-candidate.el        Sat May  5 05:24:44 2007
@@ -68,6 +68,11 @@
     (setq mark-base (point-marker))
     ;;(uim-debug (format "before: %s" (marker-position mark-base)))
 
+    ;; save font-lock face
+    (when uim-xemacs
+      (uim-overwrite-font-face uim-candidate-original-start
+                              uim-candidate-original-end))
+
     ;; save original string
     (setq uim-candidate-original-str
          (buffer-substring uim-candidate-original-start

Modified: trunk/emacs/uim-keymap.el
==============================================================================
--- trunk/emacs/uim-keymap.el   (original)
+++ trunk/emacs/uim-keymap.el   Sat May  5 05:24:44 2007
@@ -116,7 +116,7 @@
 
   ;; for uim-preedit-map
   ;;  menu-bar/tool-bar operation must be avoided
-  (define-key uim-preedit-map [vertical-scroll-bar] 'ignore)
+  (define-key uim-preedit-map [vertical-scroll-bar] nil)
   (define-key uim-preedit-map [mode-line] nil)
   (define-key uim-preedit-map [vertical-line] nil) 
 

Modified: trunk/emacs/uim-var.el
==============================================================================
--- trunk/emacs/uim-var.el      (original)
+++ trunk/emacs/uim-var.el      Sat May  5 05:24:44 2007
@@ -382,17 +382,13 @@
 
 (uim-deflocalvar uim-preedit-keymap-enabled nil)
 
-;; save font-lock mode
-(uim-deflocalvar uim-font-lock-mode nil)
-(uim-deflocalvar uim-font-lock-verbose nil)
+(uim-deflocalvar uim-after-change-functions nil)
+(uim-deflocalvar uim-fontification-functions nil)
 
 ;; save top point of current window to lock scroll
 (uim-deflocalvar uim-window-force-scrolled nil)
 
 (uim-deflocalvar uim-buffer-read-only nil)
-
-;; list of font faces for emulating font-lock mode looks
-(uim-deflocalvar uim-facelist nil)
 
 ;; save current menubar temporally for XEmacs
 (uim-deflocalvar uim-menubar-temp nil)

Modified: trunk/emacs/uim.el
==============================================================================
--- trunk/emacs/uim.el  (original)
+++ trunk/emacs/uim.el  Sat May  5 05:24:44 2007
@@ -792,17 +792,17 @@
        (uim-wait-recv serial))))
 
 
-;;
-;; Save face property
-;;
-(defun uim-get-face-list (start end)
+;; for XEmacs
+(defun uim-overwrite-font-face (start end)
   (let ((facelist '()) tail face)
     (catch 'face-loop
       (while t
        (setq tail
              (next-single-property-change start 'face (current-buffer) end))
        (if (setq face (get-text-property start 'face))
-           (setq uim-facelist (cons (list face start tail) uim-facelist)))
+           (if (atom face)
+               (put-text-property start tail 'face 
+                                  (cons face nil))))
        (setq start tail)
        (if (= start end)
            (throw 'face-loop t))))
@@ -810,64 +810,6 @@
   )
 
 
-
-;;
-;; Save face property of the window
-;;   Save only displayed region
-(defun uim-get-facelist-window (win)
-  (select-window win)
-  (let (end)
-    (save-excursion
-      (goto-char (window-end nil t))
-      (vertical-motion (window-height))
-      (setq end (point)))
-    (save-excursion
-      (uim-get-face-list (window-start) end)
-      )
-    ))
-
-
-;;
-;; Save face property of windows which are displaying the current buffer.
-;;
-(defun uim-get-facelist-buffer ()
-  (save-selected-window
-    (mapcar 'uim-get-facelist-window
-           (get-buffer-window-list (current-buffer) t 'visible))
-    uim-facelist))
-
-
-;;
-;; Disable font-lock mode
-;;    This function should be called only when the font-lock-mode is 
-;;   already in use
-;;
-(defun uim-disable-font-lock-mode ()
-  ;; save and disable font-lock-mode
-  (setq uim-font-lock-mode font-lock-mode)
-  (setq uim-font-lock-verbose font-lock-verbose)
-  (when font-lock-mode
-    (font-lock-mode 0)
-    (setq font-lock-verbose nil)))
-
-
-;;
-;; Eable font-lock mode
-;;
-(defun uim-enable-font-lock-mode ()
-  (when uim-font-lock-mode
-    (font-lock-mode uim-font-lock-mode)
-    (setq font-lock-verbose uim-font-lock-verbose)))
-
-
-;;
-;; Restore face property
-;;
-(defun uim-put-face (facelist)
-  (put-text-property (nth 1 facelist) (nth 2 facelist)
-                    'face (car facelist)))
-
-
 ;;
 ;; Update font 
 ;;
@@ -888,33 +830,30 @@
      uim-candidate-selected-face
      uim-candidate-nth-face)))
 
-;;
-;; Lock appearance of buffer
-;;
-(defun uim-freeze-buffer ()
-  (let (facelists)
 
-    (setq uim-facelist nil)
-    (uim-get-facelist-buffer)
-    ;(setq facelists (uim-get-face-list 1 (point-max)))
-    (if (memq 'font-lock features)          
-       (progn
-         (uim-disable-font-lock-mode)
-         (mapcar 'uim-put-face uim-facelist)))
-    )
-  (setq uim-buffer-frozen t))
+(defun uim-freeze-buffer ()
+  (when (not uim-buffer-frozen)
+    (setq uim-after-change-functions after-change-functions)
+    (setq after-change-functions nil)
+
+    (when (boundp 'fontification-functions)
+      (setq uim-fontification-functions fontification-functions)
+      (setq fontification-functions nil))
 
+    (setq uim-buffer-frozen t))
+  )
 
 
-;;
-;; Unlock appearance of buffer
-;;
 (defun uim-unfreeze-buffer ()
-  (let (facelists)
-    (if (memq 'font-lock features)
-       (uim-enable-font-lock-mode))
-    )
-  (setq uim-buffer-frozen nil))
+  (when uim-buffer-frozen ;; avoid multiple unfreeze 
+    (setq after-change-functions uim-after-change-functions)
+    (setq uim-after-change-functions nil)
+
+    (when (boundp 'fontification-functions)
+      (setq fontification-functions uim-fontification-functions)
+      (setq uim-fontification-functions nil))
+
+    (setq uim-buffer-frozen nil)))
 
  
 
@@ -1104,8 +1043,8 @@
 
 (defun uim-leave-preedit-mode ()
   (uim-disable-preedit-keymap)
-  (uim-unfreeze-buffer)
   (setq buffer-read-only uim-buffer-read-only)
+  (uim-unfreeze-buffer)
   )
 
 

Reply via email to