[oedit]行を上下に移動
oedit上で、行を上下に移動するマクロです。
;; ================================================================== ;; move line ;; (caution:改行のない最終行で移動させると、最終行に改行を追加します) ;; ================================================================== (app-set-key "Ctrl+UP" ;上に移動 (lambda() (if (> (editor-get-cur-row) 0) (begin (define text (editor-get-row-string-cr (editor-get-cur-row))) (editor-delete-row (editor-get-cur-row)) (editor-previous-line 1 #f) (editor-paste-string text) (editor-previous-line 1 #f))))) (app-set-key "Ctrl+DOWN" ;下に移動 (lambda() (if (<= (editor-get-cur-row) (editor-get-row-cnt)) (begin (define text (editor-get-row-string-cr (editor-get-cur-row))) (editor-delete-row (editor-get-cur-row)) (editor-next-line 1 #f) (editor-paste-string text) (editor-previous-line 1 #f))))) (define (editor-delete-row x) (begin (editor-set-select-row x) (editor-delete-selected-string) (editor-delete-char))) (define (editor-set-select-row x) (editor-set-select-area x 0 x (editor-get-col-cnt x))) (define (editor-get-col-cnt x) (string-length (editor-get-row-string x))) (define (editor-delete-char) (begin (editor-forward-char 1 #t) (editor-replace-selected-string ".|\\n" ""))) (define (editor-get-row-string-cr x) (begin (editor-set-select-row x) (string-append (editor-get-selected-string) "\n")))
標準で準備されている関数でなんとかかんとかやっています。文末の改行の削除をする方法がわからず大変でした。そのため妙な方法をとっています。
editor-関数をいくつか作ってしまっているので、今後正式なものが用意された場合関数名は要変更。