[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-関数をいくつか作ってしまっているので、今後正式なものが用意された場合関数名は要変更。