18195


中国語のピンインをEmacs上で打ちたくLispを書こうとしてるのですが、キーバインディングの変更程度しか書いたことがなく躓いています。

[code]

    (defun make-tone-2 ()
      (interactive)
      (insert "foo"))
    
    (define-minor-mode pinyin-mode
      "Input pinyin"
      :lighter " PinYin"
      :keymap (let ((map (make-sparse-keymap)))
                (define-key map (kbd "2") 'make-tone-2)
                map))
    
[/code]

とりあえずこのように minor-mode の定義を行い、`make-tone-2`で現在のカーソルの左方向にあるスペース以外の英文字を取得して auoi
があれば、それぞれáúóí に置換しようと考えています。(ただしカーソルに一番近い文字のみ)

どの関数を使えばよいかも全くわからない状態で、どのように実装すれば良いかヒントを頂けないでしょうか。


CC BY-SA 3.0
2015-10-29T06:51:13.687
18193
2015-10-29T07:44:50.783
3271
question
emacs elisp
Emacsでカーソルの位置から左方向に特定の文字を検索して置換する


`make-tone-2` 関数を以下の様にしてみてはどうでしょうか。

[code]

    (defun make-tone-2 ()
      (interactive)
      (save-excursion
        (let* ((tbl '(("a" "á") ("u" "ú") ("o" "ó") ("i" "í")))
               (regexp (concat "[" (mapconcat 'car tbl "") "]")))
          (and (re-search-backward regexp nil t 1)
               (replace-match (cadr (assoc (match-string 0) tbl)))))))
    
[/code]

変換する文字を変更する場合は `tbl`(assoc-list) の内容を適宜変えて下さい。


CC BY-SA 3.0
2015-10-29T07:28:29.960
18195
2015-10-29T07:44:50.783
2015-10-29T07:44:50.783
18193
answer