File: egg-quail.el

package info (click to toggle)
xemacs20 20.4-13
  • links: PTS
  • area: main
  • in suites: slink
  • size: 67,324 kB
  • ctags: 57,643
  • sloc: lisp: 586,197; ansic: 184,662; sh: 4,296; asm: 3,179; makefile: 2,021; perl: 1,059; csh: 96; sed: 22
file content (91 lines) | stat: -rw-r--r-- 2,824 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
;;; Quail <-> EGG interface

(require 'quail)

(or (featurep 'egg)
    (error "You don't have EGG feature."))

(defconst quail-mode-egg-map (make-keymap))
(set-keymap-parents quail-mode-egg-map (list quail-mode-map))
(define-key quail-mode-egg-map " " 'quail-henkan-region)

(defvar quail-henkan-start nil)
(make-variable-buffer-local 'quail-henkan-start)

(defvar quail-henkan-start-char ?◇)

(defconst quail-henkan-mode-map (make-keymap))
(set-keymap-parents quail-henkan-mode-map (list henkan-mode-map))

(substitute-key-definition 'self-insert-command
			   'quail-henkan-kakutei-and-self-insert
			   quail-henkan-mode-map)

(define-key quail-henkan-mode-map "\C-k" 'quail-henkan-kakutei)
(define-key quail-henkan-mode-map "\C-l" 'quail-henkan-kakutei)
(define-key quail-henkan-mode-map "\C-m" 'quail-henkan-kakutei)
(define-key quail-henkan-mode-map "\C-c" 'quail-henkan-quit)
(define-key quail-henkan-mode-map "\C-g" 'quail-henkan-quit)
(define-key quail-henkan-mode-map "\177" 'quail-henkan-quit)
(define-key quail-henkan-mode-map "\eg" 'quail-henkan-quit)

(defun quail-henkan-mark ()
  "Set mark at the current position to indicate starting point of henkan."
  (interactive)
  (quail-delete-region)
  (quail-init-state)
  (setq quail-henkan-start (point-marker))
  (insert quail-henkan-start-char))

(defun quail-henkan-region ()
  (interactive)
  (quail-delete-region)
  (quail-init-state)
  (if quail-henkan-start
      (let ((pos (point-marker)))
	(goto-char quail-henkan-start)
	(if (and (= (following-char) quail-henkan-start-char)
		 (progn (delete-char 1)
			(< quail-henkan-start pos)))
	    (let ((henkan-mode-map quail-henkan-mode-map))
	      (henkan-region quail-henkan-start pos))
	  (goto-char pos))
	(setq quail-henkan-start nil))))

(defun quail-henkan-kakutei-and-self-insert ()
  (interactive)
  (setq unread-command-events (list last-command-event))
  (quail-henkan-kakutei))

(defun quail-henkan-reset ()
  (egg:bunsetu-attribute-off bunsetu-number)
  (egg:henkan-attribute-off)
  (goto-char egg:region-start)
  (delete-region (- egg:region-start (length egg:henkan-open))
		 (+ egg:region-end (length egg:henkan-close)))
  (set-marker egg:region-start nil) 
  (set-marker egg:region-end nil) 
  (setq quail-henkan-start nil)
  (quail-init-state)
  (use-local-map (quail-mode-map))
  (egg:mode-line-display))

(defun quail-henkan-kakutei ()
  (interactive)
  (quail-henkan-reset)
  (let ((i 0) (max (wnn-server-bunsetu-suu)))
    (while (< i max)
      (insert (car (wnn-server-bunsetu-kanji i )))
      (if (not overwrite-mode)
	  (undo-boundary))
      (setq i (1+ i))
      ))
  (wnn-server-hindo-update)
  (egg:mode-line-display))

(defun quail-henkan-quit ()
  (interactive)
  (quail-henkan-reset)
  (insert egg:kanji-kanabuff)
  (wnn-server-henkan-quit)
  (egg:mode-line-display))