メモ帳で使えるキー

Ctrl+ 機能
A 全選択
C コピー
F 検索
G 行へ移動(使えない?)
H 置換
I Tab
J Enter
M Enter
N 新規作成
O 開く
P 印刷
S 保存
V ペースト
X カット
Z 元に戻す
Del カット
Ins コピー
Home 文頭へ移動
End 文末へ移動
Bs CHR(127)
Shift+ 機能
Ins ペースト
(アクセラレータなし) 機能
F1 ヘルプ
F3 次を検索
F5 時刻、日付を挿入
F10 メニューにフォーカス

たいがいのテキストエディタはこれに準拠。
置換のCTRL+HはOfficeから発祥し、WindowsXPでメモ帳に取り入れられたようで、ソフトによってばらつきがある。(CTRL+Rを置換とし、CTRL+HをTABとしているソフトが結構ある)

W-ZERO3[es]でchumbyのwidgetを動かす

実はW-ZERO3[es]ユーザなのですが、WILLCOM回線は解約してて本体だけ残っており、何かに使えないかなと。

1.以下をダウンロードし、zipからcabを取り出してW-ZERO3[es]へインストール。

Adobe AIR | Deploy applications across platforms and devices
Flash Lite 3.1 Distributable Player
Download the Developer edition for Windows Mobile 5.0 Pocket PC (ZIP, 930 KB)

2.chumbywidgetをもらってくる。

Chumby
widgetsのswfファイルをダウンロードし、W-ZERO3[es]へ。

3.swfファイルの関連付け

GSFinderで、*.SWFをappzone.exeに関連付ける。
Windows Mobile用のFlash Lite 3.1プレーヤー | トドのつまりは・・・ - 楽天ブログ

4.swfファイルを実行!
Fullscreen表示にすると、こんな感じになります。

flashplayerがよくできていて、縦横の表示切替に対応していました。

※本物のchumbyみたいにいくつかのswfを切り替えられれば…

eeePCとHHKPro2

うちにはEeePC 901とHappy Hacking Keyboard Professional2があります。
ASUSTek ノートPC EeePC 901-X パールホワイト EeePC901-X PWPFU Happy Hacking Keyboard Professional2 白 英語配列 USBキーボード 静電容量無接点 UNIX配列 WINDOWS/MAC両対応 ホワイト PD-KB400W

しかし、HHKPro2は英語配列のため、eeePCにそのままつないでも、日本語配列として扱われてしまい、入力とキーボードのキー表記が合わないという悲しい事態が発生します。

さりとて、以下のように英語配列にしてしまうと、HHKPro2を外した時に本体のキーボードで入力とキーボードのキー表記が合わないこととなります。

1. \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters\LayerDriver JPN の値を KBD106.DLL → KBD101.DLL
2. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E0010411\Layout File の値を KBDJPN.DLL → KBDUS.DLL
3. 再起動

はたまた、USJPProというソフトウェアを使用すると、\1980かかります。

USJPPro 英語配列エミュレーション
http://www.trinityworks.co.jp/software/USJPPro/index.php

そこで、配列が違うキーボードを同時に使う方法を調べました。

配列が違うキーボードを同時に使う方法
配列の異なるキーボードを同時に使う方法 - forPCActionGamer Wiki*

方法は上記のとおりですが、設定値はそのまま使えなかったため、自分で調べる必要がありました。

  • KeyboardTypeOverride=4
  • KeyboardSubtypeOverride=0

scheduleマクロ修正

曜日計算がたまに動作しないバグを修正、うるう年対応はあいかわらず省略。

oedit.scmに以下追加。キーは適当に。

;; schedule

(define (schedule)
  (lambda()
    (begin
      (define weekday (list "日" "月" "火" "水" "木" "金" "土"))
      (define lastday (list 31 28 31 30 31 30 31 31 30 31 30 31))

      (define tm (sys-localtime (sys-time)))
      (define tm-year (+ 1900 (slot-ref tm 'year)))
      (define tm-mon  (+ 1 (slot-ref tm 'mon)))

      (define dt (app-input-box "yyyy/mm" (string-append (number->string tm-year) "/" (number->string tm-mon) )))
      (if (not dt) 
        () ;cancel
        (begin
          (if (>= (string-length dt) 6) 
            (begin
              (define year (substring dt 0 4))
              (define month (substring dt 5 (string-length dt)))
              (define tm-year (string->number year))
              (define tm-mon (string->number month))
            )
            (begin
              (app-status-bar-msg "入力エラー")
              (exit)
            )
          )
        )
      )

      ;タイトル行
      (editor-paste-string  (string-append ";----- " year "年" month "月 -----" "\n"))

      ;月の一日の曜日計算
      ; ツェラーの公式 w = y+[y/4]+[h/4]-2h+[13(m+1)/5]+d , 曜日=(w mod 7) , 1:日〜6:金 0:土 , []...floor
      ; oeditでは "- 数字型は32bit整数値のみサポート" なのでfloorはとりあえずなし
      ; 負の値への対応、sys-tmの曜日と同じ値を出すために調整 … 曜日=((w+6) mod 7)
      (define H (string->number (substring year 0 2)))
      (define Y (string->number (substring year 2 4)))
      (define M (string->number month))
      (define D 1)
      (define wday (remainder (+ Y (/ Y 4) (/ H 4) (* -2 H) (/ (* 13 (+ M 1)) 5) D 6) 7))

      ;日の一覧
      (do ((i 1 (+ i 1))) ((> i (list-ref lastday (- tm-mon 1))) ())
        (begin
          (define pr-day (number->string i))
          (if (>= 9 i) (set! pr-day (string-append " " pr-day)))
          (editor-paste-string (string-append pr-day "(" (list-ref weekday wday) "):" "\n"))
          (set! wday (remainder (+ wday 1) 7))
        )
      )
    )
  )
)

scheduleマクロ改版

年月指定ができるように。とりあえず使えるので入力チェック、うるう年対応は省略。

oedit.scmに以下追加。キーは適当に。

;; schedule
(require "schedule")
(app-set-key "Ctrl+T" (lambda() ((schedule))))

schedule.scm

;; schedule

(define (schedule)
  (lambda()
    (begin
      (define weekday (list "日" "月" "火" "水" "木" "金" "土"))
      (define lastday (list 31 28 31 30 31 30 31 31 30 31 30 31))

      (define tm (sys-localtime (sys-time)))
      (define tm-year (+ 1900 (slot-ref tm 'year)))
      (define tm-mon  (+ 1 (slot-ref tm 'mon)))

      (define dt (app-input-box "yyyy/mm" (string-append (number->string tm-year) "/" (number->string tm-mon) )))
      (if (not dt) 
        () ;cancel
        (begin
          (if (>= (string-length dt) 6) 
            (begin
              (define year (substring dt 0 4))
              (define month (substring dt 5 (string-length dt)))
              (define tm-year (string->number year))
              (define tm-mon (string->number month))
            )
            (begin
              (app-status-bar-msg "入力エラー")
              (exit)
            )
          )
        )
      )

      ;タイトル行
      (editor-paste-string  (string-append ";----- " year "年" month "月 -----" "\n"))

      ;月の一日の曜日計算
      ; ツェラーの公式 w = y+[y/4]+[h/4]-2h+[13(m+1)/5]+d , 曜日=(w mod 7) , 1:日〜6:金 0:土 , []...floor
      ; oeditでは "- 数字型は32bit整数値のみサポート" なのでfloorはとりあえずなし
      ; 負の値への対応、sys-tmの曜日と同じ値を出すために調整 … 曜日=((w-1) mod 7) + 7
      (define H (string->number (substring year 0 2)))
      (define Y (string->number (substring year 2 4)))
      (define M (string->number month))
      (define D 1)
      (define wday (+ (remainder (+ Y (/ Y 4) (/ H 4) (* -2 H) (/ (* 13 (+ M 1)) 5) D -1) 7) 7))

      ;日の一覧
      (do ((i 1 (+ i 1))) ((> i (list-ref lastday (- tm-mon 1))) ())
        (begin
          (define pr-day (number->string i))
          (if (>= 9 i) (set! pr-day (string-append " " pr-day)))
          (editor-paste-string (string-append pr-day "(" (list-ref weekday wday) "):" "\n"))
          (set! wday (remainder (+ wday 1) 7))
        )
      )
    )
  )
)

changelogmemoマクロ改版

oeditでchangelog*1形式でメモを取りたいとき、Ctrl+3で日付、アイテムの追加。

とりあえず動くマクロを2008/12に作っていましたが、今日の日付が文頭から遠くにある場合に時間がかかる欠点がありました。ver.7.0.5.1でそれを解消できそうなeditor-search-string関数が追加になったので、改版。ソースが短くなりました。

ちなみに、editor-search-stringは見つかると0、見つからないと1を返すようです。

oedit.scm

(app-set-key "Ctrl+3" (lambda() (chlog-add)))

; changelogmemo 追加
(define (chlog-add)
  (begin
    (define chlog-user "testuser")
    (define chlog-email-address "testuser@aaa.bbb.ccc")
    (define today (sys-strftime "%Y-%m-%d" (sys-localtime (sys-time))))
    (define chlog-date (string-append today "  " chlog-user "  <" chlog-email-address ">\n"))
    (define chlog-item "\t*  :\n")
    ;search today
    (if (= (editor-search-string (string-append "^" today)) 0)
      (begin ;found
        (editor-next-line 1 #f)
        (editor-paste-string "\n"))
      (begin ;not found
        ;insert date
        (editor-set-row-col 0 0)
        (editor-paste-string chlog-date)
        (editor-paste-string "\n\n")
        (editor-previous-line 1 #f)))
    ;insert item
    (editor-paste-string chlog-item)
    (editor-previous-line 1 #f)
    (editor-forward-char 3 #f)))

ユーザ名(testuser)、メールアドレス(testuser@aaa.bbb.ccc)は適当に。