Geany テキストエディタ

Gedit が死亡してテキストエディタ難民になっている皆さん。
筆者は Kate を騙し騙し使っていました、でもやっと本命を見つけました。
Geany というアプリです、IDE と解説されていますが普通の編集もできます。

サイドバーやツールバーを消せば普通に軽量なテキストエディタです。
ただ開発者はハンバーガーメニューが嫌いなのか古くさいメニューバーです。

geany

GTK3 アプリですが各言語の最新仕様な色分けは独自に対応しています。
スクリプト言語であれば F5 キーで独自窓にて実行結果を表示できます。
その窓は Enter キーで閉じる、Gedit のボトムパネルより便利じゃん。
JavaScript は未定義なので Gjs あたりをビルドコマンドに設定する。

gjs "%f"

Ctrl+D で行の複製が最初から可能、Gedit では自作したのに。
他の文書を閉じる機能も最初からある、Gedit では自作したのに。

コードスニペットはデフォルトで有効、設定は snippets.conf にて。
各言語で for とかタイプした後に Tab キーを叩いてみてください。
Kate では Tab キーじゃないのが地味に苦痛だったので嬉しい。

snippets.conf に追記すれば独自スニペットも可能。
Gedit ほど柔軟ではなくデフォルトも指定できないし $0 も無いのが残念。
スニペットにカーソルを移動にキー割り当てがされていないので自分で設定。
筆者は Ctrl+Tab にしてみた。

geany

snippets.conf にこんな感じで追記していきます。
コメントアウトはデフォルトなのでデフォルトを変更したい場合に外して書き換え。
[Keybindings] でショートカット指定も可能、Kate はコレもできないんだよな。
変数は使えないみたい、%selection% が欲しいんですけど。

そして筆者には絶対に必要な機能。
Gedit プラグインまで自作してしまった html タグのエスケープ。
Python は使えないけど選択範囲を stdout に送る機能はある、ならば。

編集::書式::選択範囲を送る::カスタムコマンドを設定。

python -c 'import sys, html; sys.stdout.write(html.escape(sys.stdin.read(), quote=False))'

コレでイケるじゃないの。
ちなみに登録順に Ctrl+1 から自動で割り当てされる。

# アンエスケープ
python -c 'import sys, html; sys.stdout.write(html.unescape(sys.stdin.read()))'
# 赤文字にする
python -c "import sys; sys.stdout.write(f'<span style=\"color: red\">{sys.stdin.read()}</span>')"

どんどん登録しよう、プログラミングって楽しいよね。

世の中にはプログラミングのためのエディタを探しているはずなのに。
何故かプラグインを探してばかりで自力で拡張をちっとも書かない人が沢山いる。
そういう人って実はプログラミングなんて全然していないんだろうね。

シンボルを補完をオフ、自動補完はイライラするだけなんだよ。
行の入れ替えは Alt+Up(Down) に変更、何故 SourceView から変えた?
それだけで十分使えるな、プログラミングを本当にしている人なら気に入るはず。

ただ今は ibus の調子が悪いな、これは Fedora 側の問題なのかな?
多分そのうち修正されるだろう、ということで。

コスモス

大口某所のコスモス畑が満開でした。
先週の花公園では茎が折れていましたがこちらは無事です。

cosmos

赤い花なので今回は LUMIX G99 を持って。
元メイン機なのに使い方のほとんどを忘れているのって怖い。

cosmos

でも使いやすさには定評がある LUMIX なのですぐに馴染む。
赤桃白がくっきり、LUMIX の赤はやっぱりイイね。

cosmos

レンズは M.Zuiko 12-40 というあまり見ない組み合わせ。
問題ないどころか解像スゲェ、中古でゴロゴロあるレンズなのに。

cosmos

コスモスは単体の花で見ると別に綺麗ではないんだけど。
大きく多色な花が密集して咲くのがいい、薔薇と真逆かな。

cosmos

この組み合わせでもよくあるツマラナイ写真も撮れます。
ボケが主役で花が引き立て役です、レンズのレビューですか?
マイクロフォーサーズだってここまでボケさせることができる。
やらないだけです、いや高感度耐性は評判どおりですけど。

コゲラ

macOS Sequoia を 15.1 にアップデート。
OM SYSTEM の RAW(*.ORF) のサムネイルバグが修正されました。

前々回にヤルと書いた Adw のページ書き換えました。
AboutDialog は継承元を変えるだけでほとんど同じでした。

GTK4(Python) Tips | Adw – Paepoi

お知らせ以上、今日は公園へ。
留鳥しかいなかったし天気が厳しかった。

kogera

コゲラ、すべて -2ev 状態で iso3200 になってしまいました。
なので更に AI ノイズリダクションを掛けています。

mejiro

メジロ、-2ev の技を知らなきゃ塗り絵だったなって。
もしくは盛大な被写体ブレ、どっちも修正なんて無理だ。

yamagara

ヤマガラ、条件が悪くてもこれくらいはという例でした。
AI ノイズリダクションが無い環境だと、今じゃありえない。
とりあえず一日ムダになってしまうより全然いいよね。

クサシギ

本日は快晴、よし今日こそジョウビタキのオスを撮るぞい。
ってメスすら出ない、筆者の前にちっとも出てくれない。

kusashigi

代わりに本日もクサシギがいた、なんと二羽もおる。
筆者が知らないだけで今までも普通に来ていたのかな。

kawasemi

カワセミは遠かった、まあメスだとはっきり判る程度には。
久々にホバリングをしてくれたけどピントが合わず。

mozu

モズのメスがミミズらしきものを食っています。
フォーカス激甘だけどこんなのしかいなかったので。

olympus blue

午後は花公園へ移動、そういえばコスモスの時期だった。
近影は茎が倒れて酷いことになっていたので風景写真風に。

jyoubitaki

やっと見つけたジョビ男、オリンパスブルーバックありがとう。
この公園は毎年オスが縄張りにするのを覚えていてよかった。

ちなみに小牧の某公園等はオスになったりメスになったり。
毎年バトルして勝ったほうが住み着くみたいです。

ベニマシコを昨年見た場所にも行ったけど、舗装工事をしてる。
今年はダメかな、まあまだカシラダカも来ていないようだし。
野鳥撮影が捗る季節ですがどうなることやら。

Adw.AlertDialog

本日は休日出勤無しだが雨、野鳥撮影ヤメにしてプログラミングでも。
とりあえず Adw.AlertDialog を試しに書いてみることにした。

#!/usr/bin/env python3

import gi, sys
gi.require_version('Gtk', '4.0')
gi.require_version('Adw', '1')
from gi.repository import Gtk, Adw

class Win(Adw.ApplicationWindow):
    '''
        Gtk.ApplicationWindow is Gtk-CRITICAL
        Widget of type “AdwAlertDialog” already has an accessible role of type “GTK_ACCESSIBLE_ROLE_GENERIC”
    '''
    def __init__(self, a):
        # Set Adwaita Style
        manager = Adw.StyleManager.get_default()
        manager.set_color_scheme(Adw.ColorScheme.DEFAULT)
        # init
        Adw.ApplicationWindow.__init__(self, application=a)
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        # Header
        title = Adw.WindowTitle(title='test')
        header = Adw.HeaderBar(title_widget=title)
        vbox.append(header)
        for s in ('Simple', 'Yes No', 'Vertical'):
            # Button
            button = Gtk.Button(label=s)
            button.connect('clicked', self.on_button_clicked, s)
            vbox.append(button)
        # self
        self.set_content(vbox)
        self.set_default_size(600, 500)

    def on_button_clicked(self, button, text):
        match text:
            case 'Simple':
                alert = Adw.AlertDialog(body='Same for ESC')
                alert.add_response('close', 'OK')
                alert.present(self)
            case 'Yes No':
                alert = Adw.AlertDialog(body='Close to the Edge')
                # add_responces is no...
                alert.add_response('close', 'No')
                alert.add_response('yes', 'Yes')
                alert.set_response_appearance('yes', Adw.ResponseAppearance.SUGGESTED)
                alert.choose(self, None, self.on_dialog_responce)
            case 'Vertical':
                alert = Adw.AlertDialog(heading='Head', body='body', prefer_wide_layout=True)
                alert.add_response('close', 'Cancel')
                alert.add_response('no', 'Destroy this document')
                alert.add_response('ok', 'Save this document')
                alert.set_response_appearance('ok', Adw.ResponseAppearance.SUGGESTED)
                alert.set_response_appearance('no', Adw.ResponseAppearance.DESTRUCTIVE)
                alert.choose(self, None, self.on_dialog_responce)
            case _:
                alert = Adw.AlertDialog(body='???')
                alert.add_response('close', 'ok')
                alert.present(self)

    def on_dialog_responce(self, alert, res):
        text = alert.choose_finish(res)
        match text:
            case 'ok':
                print('Saved')
            case 'no':
                print('Discarded')
            case 'yes':
                print("You're a fan of Yes")
            case 'close':
                print('Oh my good!')

app = Gtk.Application()
app.connect('activate', lambda a: Win(a).present())
app.run()

GtkAlertDialog

Gtk.ApplicationWindow から呼び出ししても普通に動くんだけど。
Gtk-CRITICAL エラーを stdout に吐くのを気にしなければ、ですけど。
素直に Adw.ApplicationWindow から呼び出したほうが無難。

それと呼び出し Window より Dialog のほうが大きいと Warning になる。
ボタンは基本が横並びで横幅がはみ出しする場合は自動的に縦並びになる。
強制縦並びにしたければ prefer-wide-layout プロパティで可能。

id の文字列は日本語でも使えた、Python だからかもだけど。
外国人も検索で来るかもだからここでは英語にしましたけど。

Adw.MessageDialog 同様に Widget を載せることもできる。
gnome-text-editor で変更破棄すればどんな感じなのかは見れます。

Adw も洗練された Widget という謳い文句らしくなってきましたね。
というのを Kate というダサい Qt のエディタで書いているのがなんとも。
gnome-text-editor に拡張機能付けてくれないかなぁ、見た目はいいのに。
スニペットのショートカット挿入と html のエスケープ機能だけでもいいのに。