oeditでEmacs風キーバインドな話(その2)

日本語とか見たいな文字(2バイト文字っていうのか)の場合に上手く移動しなかったのに気づいたので変えてみた話。

;; カーソル移動
;; C-fで右へ
(define (forward-char)
		(let ((row (editor-get-cur-row))
			  (col (editor-get-cur-col)))
		  (editor-set-row-col row (+ col 1))
		  (if (= col (editor-get-cur-col))
			  (editor-set-row-col row (+ col 2)))))

;; C-bで左へ
(define (backward-char)
		(let ((row (editor-get-cur-row))
			  (col (editor-get-cur-col)))
		  (editor-set-row-col row (- col 1))
		  (if (= col (editor-get-cur-col))
			  (editor-set-row-col row (- col 2)))))

;; C-pで上へ
(define (previous-line)
		(let ((row (editor-get-cur-row))
			  (col (editor-get-cur-col)))
		  (editor-set-row-col (- row 1) col)
		  (if (= row (editor-get-cur-row))
			  (editor-set-row-col (- row 2) col))))

;; C-nで下へ
(define (next-line)
		(let ((row (editor-get-cur-row))
			  (col (editor-get-cur-col)))
		  (editor-set-row-col (+ row 1) col)
		  (if (= row (editor-get-cur-row))
			  (editor-set-row-col (+ row 2) col))))

;; カーソルキー キーバインド
(app-set-key "Ctrl+f" forward-char)
(app-set-key "Ctrl+b" backward-char)
(app-set-key "Ctrl+p" previous-line)
(app-set-key "Ctrl+n" next-line)

上下の移動は関係ないので実は必要ないかもしれないけど。

;簡易でも特に問題ないかも
(define (next-line)
		  (editor-set-row-col (+ (editor-get-cur-row) 1)
							  (editor-get-cur-col)))

前に適当に試したのはこっち
http://d.hatena.ne.jp/himadatanode/20071106/p2

カーソル移動は基本的にマクロでやる必要はないので、キー割り当てで設定した方がよさげ。実用よりも試してみたと言う感じ。