表紙 へ

[PREV][QX TIPS INDEX]

HTML ファイルのリンクでジャンプ

ウェブブラウザで何が便利か、というと筆頭は「リンク」ではないでしょうか。HTML ファイルとブラウザの組合せでは、ウェブサイトではなくじぶんのパソコンのローカルなファイルでも、リンクを使って、いわゆる「ハイパーテキスト」を作ることができます。紙メディアでは関連項目に飛ぶのに自力でその項目を探して移動しなければならないのと違って、関連項目のリンクをクリックするだけでジャンプしてくれるという、構造化されたドキュメントになるわけですね。

ブラウザを離れて、QXで HTML ファイルを編集しているときも、同じようにダブルクリックでリンク先にジャンプできれば、相互にリンクしたファイルをアップデートするのが楽になります。(このサイトもそれなりにファイルが増えてきて、そういう操作が切実に必要になってきました。)

すでに「単語からファイルを開く」というマクロを作ってあったので、このマクロの HTML 関連部分を以下のようにQXの自動マクロの動作に追加移植してみました。結果 ― おお、ちゃんとダブルクリックでファイルやラベルに飛べる。便利です。そして、気がつきました。QXでは HTML のローカルリンクの書式で書いたファイルの所在を、ちゃんとパスとして認識してくれるんです。すなわち、「../index.htm」、とか、「sub/index.htm」、とかいう表記です。

通常のファイルではダブルクリックは「単語選択」の動作をさせたいので、拡張子に HTM が含まれているときだけ、この動作が実行されるようになっています。

HTML ファイル以外でも同じような考えかたでハイパーリンクをはることができます。それについては「マクロ倉庫」の 【 カーソル位置単語でファイルを開くマクロ 】 の項をごらんください。

proc AutoDoubleClicked
    if @@ClickableURL then
        if fdbl <> 0 then httpJump
    end if

    'HTMLファイルならダブルクリックでファイルを開く
    dim i, word$, file$, name$, path$, find1, find2
    if instr(lcase$(@Filename$), ".htm") = 0 then exit proc
    word$ = @GetCursorWord3$("/:#@.~-_!?\|") 'ここで文字種を設定
    @@MacroReturnStatus = 1

    i = instr(word$, "#")
    if i > 0 then
        file$ = mid$(word$, 1, i-1)
        name$ = mid$(word$, i+1)
    else
        file$ = word$
        name$ = ""
    end if

    '別ファイルを開く場合
    if file$ <> "" then
        if dir$(file$) <> "" then 'ファイルの存在をチェック
            call @@OpenFile(file$)
        else
            'カレントディレクトリにないときは、カレントファイルのパスで探す
            path$ = left$(@Pathname$, inrstr(@Pathname$, "\"))
            if dir$(path$ + file$) <> "" then 'ファイルの存在をチェック
                call @@OpenFile(path$ + file$)
            else
                print cformat$("%s というファイルがみつかりません",file$)
                exit proc
            end if
        end if
    end if

    'HTML ファイルで NAME タグ指定のとき、ファイル内で移動
    if name$ = "" then exit proc
    find1 = @@FindCaseSensitive
    find2 = @@FindLongestMatch
    @@FindRegExp = 1
    @@FindRegExp = -2
    @@FindCaseSensitive = 0
    @@FindLongestMatch = 0
    @Redraw = 0
    @MoveFileTop
    @FindStringBottom "<a +name *= *""?" + name$ + """? *>"
    @Redraw = 1
    if @@SearchFound = 0 then
        print cformat$("ラベル [ %s ] がありません",name$)
    end if
    @@FindCaseSensitive = find1
    @@FindLongestMatch = find2
end proc

上記のコードは別ファイルとしても用意しました。使ってみるときはこれをダウンロードしてください ⇒ 【 qaclick.lzh 】 既存の QACLICK.MAC の proc AutoDoubleClicked の項目の部分をこのコードと差替えます。すでに別の設定がされているときは、条件分岐などを加えてください。

上のコードの、ラベルを正規表現で検索する部分は、ねこみみ さんの「リンクリスト」マクロからの借用です。「フリーウェア」宣言がされていますが、ここで感謝を述べさせていただきます。

[PREV][QX TIPS INDEX]