タグ別アーカイブ: Gedit

JXA FileList

今回は JXA でディレクトリ内容列挙でも。
まあ Objective-c での手段は検索で山ほど見つかる、しかも日本語で。
Gjs だと英語しか見つからないのに、まあ macOS と比べてもね。

変換するだけとはいえ落とし穴は幾つかある。

#!/usr/bin/osascript

ObjC.import("Cocoa");

nil = $();

let path = $("~/Desktop").stringByExpandingTildeInPath;
let nsFiles = $.NSFileManager.defaultManager.contentsOfDirectoryAtPathError(path, nil);
//$.NSLog("%@", nsFiles);
let jsFiles = nsFiles.js; // NSArray to JS Array
for (let i=0; i<jsFiles.length; i++) {
    console.log(jsFiles[i].js);
}

nil は null ではない。
そういえばデルヒャァがそうだったなぁ、もう完全に忘れたけど。

NSArray のままではループできない。
こいつの変換も *.js メソッドでイケるのか、なるほど。

次は再起のように中身まで辿っていく手段。

#!/usr/bin/osascript

ObjC.import("Cocoa");

let path = $("~/Documents").stringByExpandingTildeInPath;
let nsDirEnum = $.NSFileManager.defaultManager.enumeratorAtPath(path);
//while (let name = nsDirEnum.nextObject) {
while (true) {
    let name = nsDirEnum.nextObject;
    if (name.isNil()) break;
    let fullPath = path.stringByAppendingPathComponent(name);   // Full Path
    console.log(fullPath.js);
}
console.log("done");

if (name == $()) では認識してくれない。
つまり検索でよく見つかるコメントアウト部分は使えない。
isNil() でなんとか JavaScript の boolean 値だと認識するようだ。

Gjs や PyGObject と違って型が明確に分離している。
ってもソレさえ理解できてしまえば日本語情報があるだけ簡単だね。

どうでもいいけど Gedit は日本語入力できないまま使っている。
開き直って日本語を使わなければいいのさ、ガッハッハ!
まあ JXA 専用だね。

Gedit External Tools

Gedit で外部ツールからスクリプト実行を筆者はよく使う。
今まで ContentType で振り分けしていた。
しかしコレでは gjs, jjs や Python, Python3 で振り分けできない。

考えてみたらシバンで実行すればいいじゃん。
+x パーミッションを付けない状態でもシバンを読取りすればいいのだし。
先頭に #! があればソレで、無いなら今までどおりにすればいいかな。

#!/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

これでもし他のスクリプト言語に目覚めてもシバンだけで対応できるぞ!
無いと思うけど。

macOS Sierra in Gedit, Kate

ftp.gnome.org

Mac 版 Gedit 3.13.91 なんてモンがあるジャン!
インストール方法は普通なので省略、macOS Sierra で起動できた!

Gatekeeper があるので初回は control を押しながら起動して開くを選ぶ。
次回からは普通に起動できる、もう慣れたよね。
off にする方法を Web で紹介している人はコレのいったい何が面倒なんだろう。

~/.config/gedit ディレクトリが作られている。
Fedora から tools と snippets ディレクトリをコピー。
おぉあたりまえのように動くぞ!

macOS デフォルトには ~/.local が無いんだね。
~/.local/share/gedit/plugins ディレクトリを自分で作る。
Gedit 及び Eye of Gnome プラグイン – L’Isola di Niente
の 3.12 版をインストールしてみる。

おぉ a_href_picture まで動く!
GTK+ も Python も同梱のものを使うようだ。

~/.config/dconf/user が作られない。
~/Library/Preferences/org.gnome.Gedit.plist がソレっぽい。
Mac では dconf の設定は個別になるようだ。
smart_home_end を BEFORE にしたいんだがどうすれば…

で、ココまでやってやっと気が付いた。

日本語が入力できないジャン…

Mac OS X版GTK+の日本語入力対応 その後 – ククログ(2013-12-26)

GTK+ 3.10 から mac での日本語入力問題は解決したんじゃなかったの?
mac で Xamarin をやっている人とか多いはず、ってアレは GTK2 だっけ。
どうやらこれについてはエンドユーザーではお手上げっぽい。

あぁ日本語入力以外は何も問題無いのに。

ヤケクソだ、Kate (KDE デフォルトエディタ) をインストールしてやる!
Qt なら多分だけど大丈夫だろう。

うん、Kate なら日本語入力は問題無いぞ。
って、return と delete キーが反応しないぞ!
コイツもソレ以外は問題なさそうなのに。

どっちもアカン、オススメブログとかで名前が出ないわけだ。

Visual Studio Code を使い続けるしかないか。
コード補完機能が正直ウザいんですけど。

Gedit gcc

Gedit の外部ツールは便利だが自分で設定したショートカットキーを忘れる。
簡単なキーに割付けたくてもできないことも多いし。
特に C ビルドで GLib や Nemiver の利用を振り分けしたい場合とか。

Nemiver | PaePoi

本格的に作るものなら当然 Makefile を用意するので問題ない。
けれどチビッと試したいコードのためにそんな面倒したくないですよ。
プログラミング関連は全部 F5 キーだけでまかなえないものか。

そうだ、’GLib.h’ という文字列が含まれているかどうかで振り分けできないか?
ものは試しだ、こんなツールを作ってみた。

#!/bin/sh
PYTHON="text/x-python"
GJS="application/javascript"
HTML="text/html"
BASH="application/x-shellscript"
VALA="text/x-vala"
CSRC="text/x-csrc"
echo @MIMEtype $GEDIT_CURRENT_DOCUMENT_TYPE
if [ $GEDIT_CURRENT_DOCUMENT_TYPE = $PYTHON ]; then
    python3 $GEDIT_CURRENT_DOCUMENT_PATH
elif [ $GEDIT_CURRENT_DOCUMENT_TYPE = $GJS ]; then
    gjs $GEDIT_CURRENT_DOCUMENT_PATH
elif [ $GEDIT_CURRENT_DOCUMENT_TYPE = $HTML ]; then
    google-chrome $GEDIT_CURRENT_DOCUMENT_PATH
elif [ $GEDIT_CURRENT_DOCUMENT_TYPE = $BASH ]; 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=`cat $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

全部読み込んで case 文にしたのは inclide が一行目とは限らないので。
ぶっちゃけ効率ガン無視だがチョコッとビルド用途なのでいいよね。

ついでに Nemiver 用も

#!/bin/sh

src=`cat $GEDIT_CURRENT_DOCUMENT_PATH`
case $src in
    *gtk.h*)
        echo "Gtk Build"
        gcc -g -o debug $GEDIT_CURRENT_DOCUMENT_PATH `pkg-config --cflags --libs gtk+-3.0`
        if test $? -eq 0; then
            nemiver debug
        fi
        ;;
    *glib.h*)
        echo "GLib Build"
        gcc -g -o debug $GEDIT_CURRENT_DOCUMENT_PATH `pkg-config --cflags --libs glib-2.0`
        if test $? -eq 0; then
            nemiver debug
        fi
        ;;
    *)
        echo "Gcc Build"
        gcc -g -o debug $GEDIT_CURRENT_DOCUMENT_PATH
        if test $? -eq 0; then
            nemiver debug
        fi
        ;;
esac

gedit_tool

これで F5 を押すだけで筆者が使う言語は全部まかなえるぜ。
あと PHP があるけどこれは Apache 経由でしか使わないので。

いや、本当はモードごとに書いたほうがいいのだろうけどね。
ツールが一つで自力振り分けのほうが筆者はメンテが楽なだけ。

eog and Gedit 3.18 Plugin

うーん困った、って何が?

Eye of GNOME って見た目のショボさとは裏腹にかなり優秀である。
SVG 画像を綺麗に拡大できるだけでなく実はディレクトリ監視も行っている。

eog で画像を表示した状態で同一ディレクトリのファイルを別アプリからリネーム。
すると eog のリストへ即座に繁栄され矢印キーやスライドショーにも適用される。
ただ即時繁栄のためサムネイル画像がまだ作成されていない状態になってしまう。
サムネイル表示(F9)を出していないと気にならないけど。

なので今まで自作リネームプラグインはサムネイル画像を自前で入れ替えしていた。
それが 3.18 で上手く動作しない、仕様変更されたようだ。

どうも remove_image が無効になっているだけっぽいけどよく解らない。
とりあえず即元にもどせるようコメントアウトでしばらく様子見。

eog318_remove_image

Gedit はやはり gi.require_version 追記だけだった。
しかし eog もそうだけど Peas のバージョン指定もいるようだ。
Peas はソースで使っていないし 1.0 しかないのに、将来の伏線かな?

ついでに、筆者は Gedit Plugin を 4 つ公開しているのですが。
一つに書いただけで警告は出なくなった、おいおい…
まあ全部に書いたけどね。

gedit318_peas

というわけでプラグイン 3.18 版を公開。
最後に。

kuroe

いえーい、無課金なのにクロエ・ルメールを最終進化できるぞい!
貯めた炭酸を全部使った甲斐があった(ウチ姫はどうした!