
                                                         (Rev.5 2012/03/21)

otbedit}N}jA

1.͂߂
 {ł́A}Ngotbeditg@܂B


2.}N̏
 otbedit͋NɈȉ̃t@CsA}N܂B

  <otbedit.exẽfBNg>\scmlib\init.scm
  <otbedit.exẽfBNg>\scmlib\otbedit.scm

 init.scmSchemeW̎葱}NLqĂ܂B̃t@C
ҏWȂŉB
 otbedit.scmɃJX^}CYp̃R[hLqĉB
 t@C̎sɃG[ꍇ́A_CAO\܂B


3.}N̎s
3-1.t@Cs
 c[j[̃}Ns(t@C)j[IA}NLqꂽ
t@CI܂B

3-2.GfB^ɋLqR[hs
 GfB^ŎsR[hIAc[j[̃}Ns(I͈)
I܂B

3-3.current-output-portւ̏o
 }NsɁAdisplayȂǂ̎葱current-output-port֏o͂ꍇ́A
}NsɃbZ[W_CAOɕ\܂B

3-4.}NsUndo
 }N̎sɁAGfB^̃eLXgɕ̍XVsꍇłA1
UndoŃ}NsȌԂɖ߂܂B

3-5.̒f
 }NsCtrl+BreakL[ŁA𒆒fł܂B
 qapp-set-cancel-keyŃL[ݒ肷邱Ƃł܂B


4.GfB^𐧌䂷葱
  sԍEԍ擾Ew肷ꍇA0n܂܂B(擪s̍sԍ0)
  
- (app-status-bar-msg <data1> ...)
  strXe[^Xo[ɕ\܂B
  () (app-status-bar-msg "AAA" 123 #f)

- (app-msg-box <data1> ...)
  bZ[W_CAO\܂B
  () (app-msg-box "ABC" 123 #f)

- (app-input-box <title> <value>)
  ͗p̃Cvbg_CAO\܂B
   title: _CAO^Cg (ȗ\)
   value: l (ȗ\)
  _CAOOK{^EnterL[ŕƁA͂ꂽԂ܂B
  _CAOLZƂ́A#fԂ܂B
  () (app-input-box "Title" "123")

- (app-get-tool-dir)
  otbedit.exet@CfBNg̕擾܂B

- (app-get-command-line-option)
  ÑR}hCIvV̕擾܂B

- (editor-get-filename)
  ݊JĂt@C̕擾܂B
  () (editor-get-filename) => "C:\tmp\aaa.txt"

- (editor-get-row-cnt)
  ݊JĂt@C̍s擾܂B
  () (editor-get-row-cnt) => 100

- (editor-get-cur-row)
  ݂̃J[\ʒu(s)擾܂B

- (editor-get-cur-col)
  ݂̃J[\ʒu()擾܂B

- (editor-get-caret-col <row> <col>)
  f[^̈ʒuAʂ̗ʒu擾܂B
  () (app-status-bar-msg (editor-get-caret-col (editor-get-cur-row) (editor-get-cur-col)))

- (editor-get-col-from-caret-col <row> <caret-col>)
  ʂ̗ʒuAf[^̗擾܂B

- (editor-set-row-col <row> <col>)
  J[\ړ܂B

- (editor-set-select-area <row1> <col1> <row2> <col2>)
  eLXg̑I͈͂ݒ肵܂B

- (editor-get-selected-area)
  I͈͂̈ʒu擾܂B
  I͈͂ꍇ(row1 col1 row2 col2)̃XgԂ܂B
  I͈͂ꍇA#fԂ܂B

- (editor-box-select?)
  I͈͂`ȈꍇA^Ԃ܂B

- (editor-get-selected-string)
  I͈͂̕擾܂B

- (editor-get-selected-string-bytes)
  I͈͂̃oCg擾܂B

- (editor-get-selected-string-chars)
  I͈͂̕擾܂B

- (editor-get-all-string)
  GfB^̑S擾܂B

- (editor-get-row-string <row>)
  w肵s̕擾܂B

- (editor-get-row-col-char <row> <col>)
  w肵sE̕擾܂B

- (editor-paste-string <str>)
  GfB^ɕ\t܂B
  () (editor-paste-string "ABC") => GfB^ABC͂܂

- (editor-search-string <regex-str>)
  K\̌s܂B (啶ʂ)
  () (editor-search-string "AAA") => AAA܂

- (editor-search-string-ci <regex-str>)
  K\̌s܂B (啶ʂȂ)

- (editor-replace-string <regex-str> <rep>)
  K\̒u@\s܂B(Su, 啶ʂ)
  ꍇAuԂ܂B
  () (editor-replace-string "<" "&lt;") => "<""&lt;"ɒu܂

- (editor-replace-string-ci <regex-str> <rep>)
  K\̒u@\s܂B(Su, 啶ʂȂ)

- (editor-replace-selected-string <regex-str> <rep>)
  I͈͂ɑ΂ĐK\̒u@\s܂B(啶ʂ)

- (editor-replace-selected-string-ci <regex-str> <rep>)
  I͈͂ɑ΂ĐK\̒u@\s܂B(啶ʂȂ)

- (editor-delete-selected-string)
  I͈͂폜܂B

- (editor-forward-char <n> <select>)
  (editor-backward-char <n> <select>)
  (editor-next-line <n> <select>)
  (editor-previous-line <n> <select>)
  J[\ړ܂B
  <n>ňړʂw肵܂B
  <select>#fȊO̒lw肷ƑI͈͂ړ܂B

- (editor-set-box-select)
  ͈̔͑I`Iɂ܂B
  ̋@\͑I͈͂ꍇ̂ݗLłB


5.Cxgnh`
 }N̏t@CɈȉ̍\ŋLq܂B

- (app-set-event-handler <eventname> <proc>)
  eventnameŎw肵CxgɁAproc蓖Ă܂B
  eventnameɂ͎̃Cxgwł܂B
   on-open-file           t@CJ
   on-close-file          t@CO
   on-selection-changed   I͈͂ύXꂽ
   on-cursor-moved        J[\ړƂ
   on-activate-app        AvP[VANeBuɂȂƂ
   on-tab-changed         ^uύXꂽƂ
   on-file-saved          t@Cۑꂽ

() ȉ̃R[hoedit.scmɋLq
(app-set-event-handler "on-open-file"
  (lambda () (app-msg-box "t@CJ܂")))

- (app-get-event-handler <eventname>)
  eventnameɎw肵Cxgnh擾܂

- (app-clear-event-handler <eventname>)
  eventnameɎw肵Cxgnh폜܂

- (app-set-timer <timer-id> <elapse> <proc>)
  ^C}[ŋNCxgo^܂
  timer-id: w
  elapse: NԊu}CNbŎw
  proc: s鏈w
()
(app-set-timer 1 1000 (lambda () (editor-paste-string "A")))
=> 1bԊuA

- (app-clear-timer <timer-id>)
  ^C}[Cxg폜܂


6.V[gJbgL[ݒ肷
6-1 V[gJbgL[̐ݒ@
 }N̏t@CɈȉ̍\ŋLq܂B

 (app-set-key <keyname> <proc> [comment])

 keynameŎw肵L[ɁAproc蓖Ă܂B
 comment(ȗ\)́Aapp-get-all-keysŃL[Xg擾鎞ɗp܂B
 c[L[蓖ăj[̐ݒA}N̐ݒ肪D悳܂B

() ȉ̃R[hotbedit.scmɋLq
(define (test-proc) (display 10))
(app-set-key "F7" test-proc)
=> F7L[ŃbZ[W_CAO10\悤ɂȂ܂B


6-2 LZL[̐ݒ@
 (app-set-cancel-key <keyname>)
 }N̎s𒆒fL[ݒ肵܂B
 ftHgCtrl+BreakL[ɐݒ肳Ă܂B
 (Ctrl+Breakŏ肭LZłȂꍇAL[ύXĂ݂ĉ)

() ȉ̃R[hotbedit.scmɋLq
(app-set-cancel-key "Ctrl+\\")
=> Ctrl+\L[ŁA}N̎s𒆒f悤ɂȂ܂B


6-3 L[̕\L
 c[L[蓖ăj[ŕ\L@ƓłB

() Alt+Ctrl+K

 Alt,Ctrl,Shift́AꂼAlt+,Ctrl+,Shift+ƋLq܂B
 At@xbg͑啶ŋLq܂B
 t@NVL[́AF1`F24g܂B
 ̑̃L[́AL[蓖ă_CAOŊmFĂB


6-4 ݂̃V[gJbgL[̎擾
 (app-get-all-keys)
 ʂ((keyname proc comment) ...)̌`̃XgŎ擾ł܂B

 
7.Tv}N
7-1.HTML̕ϊ
 I͈͓̕ɂāAȉ̒us܂B

  & => &amp;
  < => &lt;
  > => &gt;
  " => &quot;

 otbedit.scmɈȉ̃R[hLq܂B
 (ȉ̗łF6L[Ɋ蓖ĂĂ܂)

;; HTMLϊ
(app-set-key "F6"
  (lambda ()
    (define cnt
	  (apply + (map editor-replace-selected-string
                 '("&" "<" ">" "\"")
                 '("&amp;" "&lt;" "&gt;" "&quot;"))))
    (app-status-bar-msg cnt "u܂(HTMLϊ)")))


7-2.t@CJƂAÕJ[\ʒu𕜌
 otbedit.scmɈȉ̃R[hLq܂B

;; ==================================================================
;; t@CJƂAJ[\ʒu𕜌
;; ==================================================================
(let ((cursor-save-file-cnt 10)
      (cursor-save-file-name 
	    (string-append (app-get-tool-dir) "otbedit_cur_pos.txt")))

  ;; t@Ct@CƃJ[\ʒȗΉ擾
  (define (load-pos-data)
    (if (file-exists? cursor-save-file-name)
      (let loop ((r (open-input-file cursor-save-file-name)) (l '()))
        (if (eof-object? (peek-char r))
          (begin (close-input-port r) (reverse l))
          (loop r (cons (read r) l))))
      '()))

  ;; J[\ʒu𕜌
  (define (restore-cursor-pos)
    (let ((fname (editor-get-filename)))
      (if (and (string? fname) (> (string-length fname) 0))
        (let loop ((lst (load-pos-data)))
          (if (null? lst)
            #f
            (if (string=? (caar lst) fname)
              (editor-set-row-col (cadar lst) (caddar lst))
              (loop (cdr lst))))))))

  ;; ݂̃J[\ʒuۑ
  (define (save-cursor-pos)
    (let ((fname (editor-get-filename)))
      (if (and (string? fname) (> (string-length fname) 0))
        (let ((lst (load-pos-data))
              (w (open-output-file cursor-save-file-name))
              (record (list fname (editor-get-cur-row) (editor-get-cur-col))))
          (write record w)
          (let loop ((l lst) (i 0))
            (if (or (null? l) (= i cursor-save-file-cnt))
              (close-output-port w)
              (begin
                (if (not (string=? (caar l) fname))
                  (write (car l) w))
                (loop (cdr l) (+ i 1)))))))))

  ;; Cxgnh`
  (app-set-event-handler "on-open-file" restore-cursor-pos)
  (app-set-event-handler "on-close-file" save-cursor-pos))


7-3.Xe[^Xo[ɁAI͈͂̃oCgE\
 otbedit.scmɈȉ̃R[hLq܂B
;; ==================================================================
;; I͈͂̃oCgE\
;; ==================================================================
(app-set-event-handler "on-selection-changed" 
  (lambda () 
    (let ((bytes (editor-get-selected-string-bytes)) 
          (chars (editor-get-selected-string-chars)))
      (if (= bytes 0)
        (app-status-bar-msg "")
        (app-status-bar-msg bytes "bytes," chars "chars")))))


7-4.Alt+L[ŋ`Ił悤ɂ
 otbedit.scmɈȉ̃R[hLq܂B
;; ==================================================================
;; Alt+L[ŋ`I
;; ==================================================================
(app-set-key "Alt+LEFT" 
  (lambda () (editor-set-box-select) (editor-backward-char 1 #t)))
(app-set-key "Alt+RIGHT" 
  (lambda () (editor-set-box-select) (editor-forward-char 1 #t)))
(app-set-key "Alt+UP" 
  (lambda () (editor-set-box-select) (editor-previous-line 1 #t)))
(app-set-key "Alt+DOWN" 
  (lambda () (editor-set-box-select) (editor-next-line 1 #t)))

7-5.Input Boxɓ͂ꂽS]
 otbedit.scmɈȉ̃R[hLq܂B
 Input BoxɁA"(+ 2 3)"ȂǂƓ͂ČvZ邱Ƃo܂B
;; ==================================================================
;; Input Boxɓ͂ꂽS]
;; ==================================================================
(app-set-key "Ctrl+0"
  (lambda ()
    (let ((s (app-input-box "S")))
      (if (string? s)
        (display (eval (read (open-input-string s))))))))
