Gedit」タグアーカイブ

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

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

Gedit Mode

GNOME アプリの C ソース先頭にある

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */

って何?
多分 vim, emacs 等で使うんだろうと今迄思っていた。
けれどたまに「あれ?」と思うことがあったので実験してみた。

#!/bin/sh

cat << _EOS_ > test.java
#!/usr/bin/env python3
#! -*- Mode: C; indent-tabs-mode: 2; tab-width: 2 -*-

import sys
_EOS_

という中身は Python モードは C 拡張子は Java というファイルを作る。
Gedit で作らないように上記のようにシェルスクリプトで作った。
まあこのスクリプトを保存した時点で結果は解ってしまったけど。

筆者の Gedit では普段の設定は Python ガイドラインに合わせている。

ind01

先程のスクリプトで作ったファイルを開いたら結果はどうなった?

ind02

C モードになりタブ幅が変更され Tab ではなく空白指定が解除された。
知らなかった、Gedit はこの指定でファイル毎にインデントを指定できるんだ。
指定方法は emacs 形式でいいみたい。

更に、書き換えると保存毎にリアルタイムで変更になる。
モードを変更してタブ幅を変えても Ctrl+S を押した時点で切り替わる。
つまり先程のスクリプトは保存した時点で C に切り替わって焦った。

ということで。
筆者のような Python ガイドライン派は C を書く時に上記を先頭に書く。

C Coding Style にしている人は

#!/usr/bin/env python3
# -*- Mode: PYTHON; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-

と書いとけば Python を書く毎に設定を弄らないですむ。

PHP は言語としては統一されていないのでお好みでいいかな。
とにかくどこかに書いてコメントにすればいいみたい。

<!-- -*- Mode: PHP; indent-tabs-mode: 4; tab-width: 4 -*- -->

他のファイルを開くと普通にデフォルトが適用されます。

他の言語はガイドラインを知らないので各自で調べてください。
ただ某言語はワンライナーしか書かないからどうでもいいだろうな。

後 SyntaxHighlighter は Tab にしても半角スペースになってまうんで。
Web に貼り付けている奴は気に入らないなら \t で全置換してNE!

追記
一番肝心なことを書き忘れていた。
[モードライン]プラグインの機能なので有効にしてね。