emacs/sekka.el in sekka-0.9.0 vs emacs/sekka.el in sekka-0.9.1
- old
+ new
@@ -728,12 +728,14 @@
(define-key map [f1] 'popup-help)
(define-key map (kbd "\C-?") 'popup-help)
(define-key map "\C-s" 'popup-isearch)
(define-key map "\C-g" 'popup-close)
+ (define-key map "\C-r" 'popup-select)
map))
+
;; 選択操作回数のインクリメント
(defun sekka-select-operation-inc ()
(incf sekka-select-operation-times)
(when (< 3 sekka-select-operation-times)
(sekka-select-operation-reset)
@@ -854,20 +856,21 @@
(push x lst))))
sekka-henkan-kouho-list)
(sekka-debug-print (format "filtered-lst = %S\n" (reverse lst)))
(if (null lst)
nil
- (car (reverse lst)))))
+ (reverse lst))))
+
;; 指定された type の候補が存在するか調べる
(defun sekka-include-typep ( _type )
(sekka-select-by-type-filter _type))
;; 指定された type の候補に強制的に切りかえる
;; 切りかえが成功したかどうかを t or nil で返す。
(defun sekka-select-by-type ( _type )
- (let ((kouho (sekka-select-by-type-filter _type)))
+ (let ((kouho (car (sekka-select-by-type-filter _type))))
(if (not kouho)
(progn
(cond
((eq _type 'j)
(message "Sekka: 漢字の候補はありません。"))
@@ -924,19 +927,20 @@
;; UNDO再開
(sekka-enable-undo))
;; 登録語リストからユーザーに該当単語を選択してもらう
-(defun sekka-add-new-word-sub (yomi lst)
+(defun sekka-add-new-word-sub (yomi lst hiragana-lst)
(let* ((etc "(自分で入力する)")
(lst (if (stringp lst)
(progn
(message lst) ;; サーバーから返ってきたエラーメッセージを表示
'())
lst))
(result (popup-menu*
- (append lst `(,etc))
+ (append hiragana-lst
+ (append lst `(,etc)))
:margin t
:keymap sekka-popup-menu-keymap))
(b (copy-marker sekka-fence-start))
(e (copy-marker sekka-fence-end)))
(let ((tango
@@ -946,10 +950,15 @@
result)))
;; 新しい単語で確定する
(sekka-replace-kakutei-word (marker-position b)
(marker-position e)
tango)
+
+ (when (member result hiragana-lst) ;; 平仮名フレーズの場合
+ (setq yomi result)
+ (setq tango ""))
+
;; .sekka-jisyoとサーバーの両方に新しい単語を登録する
(let ((added (sekka-add-new-word-to-jisyo sekka-jisyo-filename yomi tango)))
(if added
(progn
(sekka-register-userdict-internal t)
@@ -959,19 +968,44 @@
(defun sekka-add-new-word ()
"変換候補のよみ(平仮名)に対応する新しい単語を追加する"
(interactive)
(setq case-fold-search nil)
- (when (sekka-select-by-type 'h)
+ (let ((type
+ (cond
+ ((string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)
+ (if (sekka-select-by-type 'h) ;; 平仮名候補に自動切り替え
+ 'H
+ nil))
+ ((string-match-p "^[a-z][^A-Z]+$" sekka-last-roman)
+ 'h)
+ (t
+ nil))))
(let* ((kouho (nth sekka-cand-cur sekka-henkan-kouho-list))
(hiragana (car kouho)))
(sekka-debug-print (format "sekka-register-new-word: sekka-last-roman=[%s] hiragana=%s result=%S\n" sekka-last-roman hiragana (string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)))
- (when (string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)
+ (cond
+ ;; 漢字語彙をgoogleimeで取得
+ ((eq 'H type)
(sekka-select-kakutei)
(sekka-add-new-word-sub
hiragana
- (sekka-googleime-request hiragana))))))
+ (sekka-googleime-request hiragana)
+ '()))
+ ;; 平仮名フレーズから選択
+ ((eq 'h type)
+ (sekka-select-kakutei)
+ (let ((kouho (sekka-select-by-type-filter 'h)))
+ (sekka-debug-print (format "sekka-register-new-word: kouho=%S\n" kouho))
+ (sekka-add-new-word-sub
+ hiragana
+ '()
+ (cons
+ hiragana ;; 確定値の平仮名文言を先頭に追加。
+ (mapcar
+ (lambda (x) (car x)) kouho))))))
+ )))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 変換履歴操作関数
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -1143,15 +1177,20 @@
(goto-char b)
(insert (sekka-get-display-string))
(setq e (point))
(sekka-display-function b e nil)
(sekka-select-kakutei)
- (when sekka-use-googleime
- (when (not (sekka-include-typep 'j))
- (sekka-add-new-word)))
- )))))
-
+ (cond
+ ((string-match-p "^[A-Z][^A-Z]+$" sekka-last-roman)
+ ;; 漢字語彙
+ (when sekka-use-googleime
+ (if (not (sekka-include-typep 'j))
+ (sekka-add-new-word))))
+ (t
+ ;; 平仮名フレーズはGoogleIMEの問い合わせの自動起動はしない
+ )))))))
+
((sekka-kanji (preceding-char))
(sekka-debug-print (format "sekka-kanji(%s) => t\n" (preceding-char)))
;; カーソル直前が 全角で漢字以外 だったら候補選択モードに移行する。
;; また、最後に確定した文字列と同じかどうかも確認する。
@@ -1293,32 +1332,33 @@
nil))))
sticky-list)
(define-key sticky-map sticky-key '(lambda ()(interactive)(insert sticky-key))))
+(defun sekka-insert-space (times)
+ (if (null times)
+ (insert " ")
+ (dotimes(i times)
+ (insert " "))))
+
(defun sekka-spacekey-init-function ()
(define-key global-map (kbd "SPC")
'(lambda (&optional arg)(interactive "P")
(cond ((and (< 0 sekka-timer-rest)
sekka-kakutei-with-spacekey)
(cond
((string= " " (char-to-string (preceding-char)))
- (insert " "))
+ (sekka-insert-space arg))
((eq 10 (preceding-char)) ;; 直前に改行があった
- (insert " "))
+ (sekka-insert-space arg))
((string= "/" (char-to-string (preceding-char)))
(delete-region (- (point) 1) (point))
- (insert " "))
+ (sekka-insert-space arg))
(t
(sekka-rK-trans))))
(t
- (cond
- ((null arg)
- (insert " "))
- (t
- (dotimes(i arg)
- (insert " ")))))))))
+ (sekka-insert-space arg))))))
(defun sekka-realtime-guide ()
"リアルタイムで変換中のガイドを出す
sekka-modeがONの間中呼び出される可能性がある。"
@@ -1488,10 +1528,10 @@
;; input-method として登録する。
(set-language-info "Japanese" 'input-method "japanese-sekka")
(setq default-input-method "japanese-sekka")
(defconst sekka-version
- "0.9.0" ;;SEKKA-VERSION
+ "0.9.1" ;;SEKKA-VERSION
)
(defun sekka-version (&optional arg)
"入力モード変更"
(interactive "P")
(message sekka-version))