Paepoi

Paepoi » Gedit Tips » Gedit でスクリプトを debug

Gedit でスクリプトを debug

Python スクリプトを書くのに私はすべて Gedit で行っている。
スニペットがあるのでコード補完はいらない、けど F5 でデバッグ開始くらいはやりたい。
VC++ のデフォルトが F5 だったので...
ということで外部ツールを設定してみました、gedit って本当に高機能。
2018.07.22 : JavaScript 関連の追記
2017.03.16 : シバン実行の追加、画像の最新版化
2014.01.04 : Python 関連記述を Python3 に変更
2012.03.04 : 画像を GNOME3 に変更とコードをシンプル化

設定

アプリケーションメニューで設定ダイアログを開き「プラグイン」タブを選択。
「 外部ツール 」を有効にして設定ダイアログを閉じます。

アプリケーションメニューに [Manage External Tools...] が追加されているはず。
ツールを登録したい拡張子のファイル(*.py)を開いた状態でそのメニューを選択。
ダイアログの「+」ボタンを押しテキトーな名前を指定、そしてコマンドに
#!/bin/sh
python3 $GEDIT_CURRENT_DOCUMENT_PATH
を Python, Python3 の所に登録。
他の言語も同様に追加していきます、これが正攻法手段。

ただこの手段だと JavaScript のように実行エンジンが複数ある場合に困る。
ということで筆者はシバンによって実行エンジンを振り分けするようにしています。
#!/bin/sh

# シバンがあるならソレで起動、無いなら ContentType 判別

h=`head -n1 $GEDIT_CURRENT_DOCUMENT_PATH`
if [[ $h = \#\!* ]]; then
    app=${h#*\!}
    echo $app $GEDIT_CURRENT_DOCUMENT_PATH
    $app $GEDIT_CURRENT_DOCUMENT_PATH
else
    echo @ContentType $GEDIT_CURRENT_DOCUMENT_TYPE
    if [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *python ]]; then
        python3 $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *javascript ]]; then
        gjs $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *shellscript ]]; then
        sh $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *vala ]]; then
        vala $GEDIT_CURRENT_DOCUMENT_PATH
    elif [[ $GEDIT_CURRENT_DOCUMENT_TYPE = *csrc ]]; then
        src=`head $GEDIT_CURRENT_DOCUMENT_PATH`
        case $src in
            *gtk.h*)
                echo "Gtk Build"
                gcc $GEDIT_CURRENT_DOCUMENT_PATH `pkg-config --cflags --libs gtk+-3.0` ;;
            *glib.h*)
                echo "GLib Build"
                gcc $GEDIT_CURRENT_DOCUMENT_PATH `pkg-config --cflags --libs glib-2.0` ;;
            *)
                echo "Gcc Build"
                gcc $GEDIT_CURRENT_DOCUMENT_PATH ;;
        esac
    else
        echo Non Support File
    fi
fi

を書き込み残りは下記のように指定する、Shortcut Key は F5 ね。
$GEDIT_CURRENT_DOCUMENT_PATH
$GEDIT_CURRENT_DOCUMENT_TYPE
についてはヘルプをお読みください。

img/gedit_debugging.png

コレを閉じてデバッグ用設定はおしまい。

動作

Ctrl+F9 でボトムペインを表示切り替えができます、Wayland で動作しませんが...
F5 を叩くと勝手に表示されるので閉じたままでかまいません。

さて外部ツールを使ってみます。
普段は Gjs なのにたまに Node.js を試している場合。
#!/usr/bin/env node

console.log("Node.js で Debug!");
print("node.js なのに gjs のつもりで print にしてもーた");
console.log("コレは表示されない");

実行したいコードをアクティブにした状態で先ほど指定した F5 を押す。

img2/nodejs.png

のようにボトムペインが標準出力先になり端末上で行うのと同様に表示されます。
例外になるとシェルの出力に例外情報が出力されます。
無理に端末と行ったり来たりしなくても gedit のみでこれが可能である。
ただし入力はできませんのであしからず。

次に GUI アプリではどうなるか。
私が公開している Comipoli で試してみる、実行ファイルである comipoli を開いて F5

img/gedit_debugging3.png
見事ウインドが表示され待機状態になりました。
この状態でコードを編集しても反映されませんので注意。
ウインドウを閉じて終了させると done が出力されます。

他に私がよく利用するのは PyGObject でメソッドのチェック。
#!/usr/bin/env python3

from gi.repository import Gtk
print(dir(Gtk.Window))
PyGObject から Gtk はドキュメントが無いので GTK+ 3 Reference Manual が頼り。
PyGObject でどう書けばいいかは dir() で辿って調べていく、私はそうやった。
Python の print はとりあえず何でも文字列で出力できるので可能な技である。
Copyright(C) sasakima-nao All rights reserved 2002 --- 2020.