New QX アルファ版公開

時々エイプリルフールの日に存在がほのめかされていた New QX が、Ver. 0.1 のアルファ版ながら、とうとう 一般公開 されました。

アルファ版でヘルプもありませんし、設定変更も INI ファイルの編集をしなければできない部分がほとんどです(色設定は内部から設定したものがちゃんと記憶されているようです)。それでも以前にひっそり予告されていたように、常駐リストを複数表示でき、アウトライン機能も実装ずみです。マクロ言語は VBScript に変更になりました。

VBScript でのマクロの書き方など、まだまったくわかっていないので、あまりカスタマイズを進めているわけではありませんが、せっかくの「複数常駐リスト」の表示方法について書いておきます。下が両側に常駐リストを表示し、編集中のファイルを二段組みにした例(クリックで拡大)。

New QX Screen

以下、常駐リストの追加の手順です。

  1. New QX は終了しておく。
  2. 他のテキストエディタで New QX フォルダの中の qxdata/ini/ にある qxProf.ini を開く。
  3. [rebar2] というセクションを探す。最初の状態ではここは空。
  4. ここに、「0=binder」という項目と「1=filelist」という項目を追加する。(たぶん)ウィンドウのサイズと位置の数値も「rebar1」の例にならって適当に入れておく。
  5. この設定ファイルを保存して閉じてから New QX を起動。

さて、うまくいったでしょうか。あくまでもまだアルファ版なので、readme.txt にもあるとおり、編集ファイルが消えてもよい覚悟で試してみてください。

| | コメント (0) | トラックバック (0)

コピー時の選択範囲解除 ON/OFF

QX エディタは大きいバージョンアップが止まったままになっていますが、メーリングリストで要望が出たものについて、それに応えるかたちで追加された要素もあります。Ver. 6 になってからもすでの長い時間が経過しており、設定ダイアログは変わらないのに、設定できる項目は裏では増えているという状況が続いています。

このような「後づけの設定や機能」の一部は QX の「New」というメニューからアクセスできますが、ここに「コピー時の選択範囲解除の ON/OFF」がありません。そこでマクロです。スイッチの切替だけなのでシンプルです。

マクロを実行すると、選択範囲解除が ON になったのか OFF になったのかが、ステータスバーに表示されます。

proc main
    if @@BlockCopyReset = 0 then
        @@BlockCopyReset = 1
        print "BlockCopy Reset ON"
    else
        @@BlockCopyReset = 0
        print "BlockCopy Reset OFF"
    end if
end proc

| | コメント (0) | トラックバック (0)

クリップボードの各行先頭に付加

最近 DokuWiki というのを見つけて、これはけっこう好みかも、と試用を始めました。ファイルベースの Wiki がほしい、という条件で探していたのですが、これなら使い勝手もそこそこよいみたいです。「そこそこ」というのは、サーバーに置いてると手元のテキストエディタよりは反応が悪いあたりが、非常にはがゆいので。この DokuWiki では、スクリプトなどをブロックで引用するのに、各行の先頭に半角スペース2つ入れる、という書式になっていますが、まとめて貼り付けるときにスペースを入れるのが面倒。

そこで、まずクリップボード関連ツールを当たってみたのですが、ちょうどよいのが見つかりませんでした。さらに探す努力をするよりは、いつもの QX エディタのマクロで……、と作ってみました。

メニューを表示して選択させる、というのは QX マクロの定番ですが、メニューアイテムにショートカットキーをつける、というのと、実際に付加する文字列のほかに、それぞれの解説も用意してわかりやすく、という構成になっています。解説文字列の前に「タブ文字(chr$(&h09))」をはさんであります。

選択肢は初期状態で 18 個まで増やせます。もっと増やしたいときは [20] という部分の数を増やしてください。クリップボードの処理が完了してもダイアログなどは出ません。QX エディタのステータスバーに「done!」と表示されるだけ。

proc main
    'ショートカットキー用文字列
    const key$ = "abcdefghijklmnopqrstuvwxyz"
    '変数設定 選択肢メニュー と クリップボードバッファ 他
    dim add$[20], tag$[20],item$[20], clip$, clipall$, sel, i, j, k, n
    '先頭に付加する文字列の選択肢設定 (mainly for dokuwiki)
    i = 1
    add$[i++] = "  "
    add$[i++] = "  * "
    add$[i++] = "    * "
    add$[i++] = "> "
    '選択肢についての解説文字列
    i = 1
    tag$[i++] = "半角スペース2つ"
    tag$[i++] = "箇条書き"
    tag$[i++] = "箇条書き2"
    tag$[i++] = "引用"
    'メニュー表示
    j = 1
    item$[j++] = "[ESC] 終了"
    item$[j++] = "-"
    for k = 1 to i-1
        item$[j++] = "&" + mid$(key$,j-3,1) + ". " + add$[j-3] \
        + chr$(&h09) + tag$[j-3]
    next
    sel = popupmenu(item$)
    if sel < 3 then exit proc
    'クリップボード行数取得
    n = val(clipboard$(-2))
    'クリップボードを行ごとに取得して処理
    for i = 1 to n
        clip$ = add$[sel-2] + clipboard$(i)
        clipall$ = clipall$ + clip$
    next
    clipboard$ = clipall$
    print "done!"
end proc

| | コメント (0) | トラックバック (0)

ルビ入りテキストの印刷

QX エディタには縦書き編集および縦書き印刷機能があり、さらに「特殊メモ」という機能によるルビ印刷ができます。しかし、このルビ印刷の文字サイズは別途指定できません。

QX はテキストエディタとしてじゅうぶんに高機能なので、印刷くらいは別ツールで補完してもよいだろう、という視点でちょっと探してみたところ、「紙蚊帳釣」というフリーウェアを見つけました。窓の杜の “青空文庫”をルビ付きで縦書き印刷できるテキスト印刷ソフト「紙蚊帳釣」 という記事に紹介があります。作者サイトは 鴉の巣

この印刷ツールは「扉」というビューアから派生したようですが、必要な設定が揃っているのがうれしいです。ただし、この設定はプリンタ設定の用紙設定(サイズ・縦横)に依存しますので、用紙を横に使って縦書き印刷したいときは、最初にプリンタ設定で横置きを指定してから設定を行う必要があります。また、行のジャスティフィケーションはありませんので、禁則文字は「はみ出す」か「次の行に送られて行末が欠ける」ことになります。そこまで求めるのであれば、市販ソフトが必要になると思います。

| | コメント (0) | トラックバック (0)

行頭タブの ON/OFF その2

QXエディタには「選択行全体にわたって行頭にタブを挿入する」という基本コマンド BlockIndent があることに、今日になって気がつきました。というわけで、複数行をまとめてインデントするには、このコマンドを何かのキーに割り当てればよいわけですが、この基本コマンドは選択範囲がないと動作しません。そこで、選択範囲がないときは単純にタブコードを挿入するように、マクロで組み合わせてみました。

ついでに、前回のマクロを Tab キーに割り当てたら、なぜか Shift キーでの切替がうまくいかないので、別マクロにして、Tab と Shift + Tab にも確実に割り当てられるようにしてみました。

proc writetab
    if @Select > 0 then '選択がある場合
        @BlockIndent
    else
        @CharTab
    end if
end proc

proc deletetab
    if @Select > 0 then '選択がある場合
        @BlockUnindent
    else
        if @Code = KEY_TAB then @DeleteChar
    end if
end proc

| | コメント (0) | トラックバック (0)

行頭タブの ON/OFF

文書の一部分が選択されていれば、選択行のみに対して、そうでなければカーソルがある行だけに対して、行頭にタブを挿入、もしくは、Shift キーを押し下げつつ実行したときは、行頭がタブならそれを削除、というマクロです。何かキーを割り当てて使用することを想定しています。t$ に代入している部分は、タブコードそのものに置き換えてください。

proc main
    if @hwnd = 0 then exit proc
    dim i, m, n, t$
    t$ = "    "
    @Redraw = 0
    @UndoBlock = 1
    if @Select > 0 then '選択がある場合
        m = @SelectStartLine
        n = @SelectEndLine
        @Select = 0 '選択解除しないと文字列書換えができない
        for i = n-1 to m
            @MoveBeginningLine
            if iskeydown(KEY_SHIFT) then
                if left$(@TextCr$(i),1) = t$ then @Change i, 0, 1, ""
            else
                @Change i, 0, 0, t$
            end if
            @MoveUpChar
        next
        @Line = n
    else
        if iskeydown(KEY_SHIFT) then
            if left$(@TextCr$(@Line),1) = t$ then @Change @Line, 0, 1, ""
        else
            @Change @Line, 0, 0, t$
        end if
    end if
    @UndoBlock = 0
    @Redraw = 1
end proc

| | コメント (0) | トラックバック (0)

編集ウィンドウ二重化

編集中のファイルの編集ウィンドウを二重化し、さらに縦あるいは横に並べて配置します。同じファイルの別の場所を参照しながら編集したいときに。

proc double_tate
    if @hwnd = 0 then exit proc
    @WindowNew
    @WindowChange
    @WindowTileTate2
end proc

proc double_yoko
    if @hwnd = 0 then exit proc
    @WindowNew
    @WindowChange
    @WindowTileYoko2
end proc

| | コメント (0) | トラックバック (0)

«コメント行 ON/OFF