Gedit」タグアーカイブ

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 側の問題なのかな?
多分そのうち修正されるだろう、ということで。

PyObjC Tips 更新

そんなこんなで PyObjC Tips 更新しました。
PyObjC Tips – Paepoi

macOS には PHP を入れていないので Fedora でページ作成。
面倒だけど Fedora 内とミラーリングするほうが面倒だし。

ところで Kate でも GVFS 接続で macOS 内のファイルが編集できるのね。
コレができるならもう Gedit はいらないよな、削除するか。

と思っていたら見つけた、Gedit の Flathub 版は v47 になっている。
https://gedit-technology.github.io/blog/
rpm では v46 のままだが、もしかしたらと入れてみる。

アイコンが変わった。
ダークテーマ対応、ただし OS 連動ではない。
ローカライズされず英語のまま。
~/.local/share/gedit/plugins に自作プラグインを置いても無視。
Python の fstring や mutch 文の色分けはされないまま。
PHP のヒアドキュメントインデント判別にも未対応なまま。
他の言語は解らないけど多分中身は v46 のまま。

だめだこりゃ、管理人はプログラミングをしていないのか?
今後バージョンが進んでも見た目以外の進化はしなさそう。

Gedit 46 Syntax Highlighting

Fedora 40 の Gedit でハイライト定義の変更が無視される件。
以下に定義を入れれば摘要されるはずなんですけど。

~/.local/share/gtksourceview-4

GtkSourceView4 に何か変更があったのか?
そう思って単純なテストコードを書いてみた。

#!/usr/bin/env python3

import sys, gi
gi.require_version('Gtk', '3.0')
gi.require_version('GtkSource', '4')
from gi.repository import Gtk, GtkSource
 
TEXTVIEW_CSS = b'''
#MySourceView {
    font: 10pt Monospace;
}'''

PYTHON_CODE = '''#!/usr/bin/env python3

fst = 'fstring'
print(f'Test {fstr} Syntax Highlighi')'''
 
class Win(Gtk.ApplicationWindow):
    def __init__(self, a):
        Gtk.ApplicationWindow.__init__(self, application=a, title='SourceViewTest')
        # GtkTextView
        view = GtkSource.View(show_line_numbers=True, name='MySourceView')
        # CSS
        provider = Gtk.CssProvider()
        provider.load_from_data(TEXTVIEW_CSS)
        view.get_style_context().add_provider(provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
        # Python3 Highlighte
        lang_man = GtkSource.LanguageManager()
        lang = lang_man.guess_language(None, 'text/x-python3')
        view.props.buffer.set_language(lang)
        view.props.buffer.set_text(PYTHON_CODE)
        # GtkScrolledWindow
        sw = Gtk.ScrolledWindow(child=view)
        self.add(sw)
        self.resize(400, 100)
        self.show_all()

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

01

普通に摘要されとるじゃん。
Gedit 派生の奴も試してみよう。

って Pluma は調べてみると Gedit2 派生かよ。
プラグイン作りに Python2 や PyGtk も必要だよな、ありえん。
Xed なら Gedit3 ベースだな、ツールバーを消せばなんとか。

02

やっぱり Gedit だけ摘要されない、マジで何でだよ。
他を試すのも面倒だし、しばらく Xed に乗り換えするかな。

と思ったけどコードスニペットと外部ツールが無いやんけ。
Atom や Sublime Text は別の手段があったけど Xed には無さそう。
単語補完というプラグインがあるけど、違うそうじゃない。
自作プラグインは Gedit 3.10 以前のを小変更で使えるかもだが。
新規タブが Ctrl+N に変更されているのはなんで?

Xed って Old Gedit のふりをした vscode になりたいの?
まあナンチャッテプログラマーにはこういうのがウケるんだろうけど。

だめだ Gedit をなんとかしなきゃ。
とにかく Gedit は他アプリとは別の場所を見ているってことだよな。
もしかしてと思って /usr/share の中を探してみる。

03

あった、こんな所に。
Gedit 46 は GTK3 ライブラリでなくフォークした奴を使っているのか。

libgedit-gtksourceview 300 Reference Manual: libgedit-gtksourceview 300 Reference Manual

それだから libgedit-46.so のサイズが 583MB もあるわけだ。
静的リンクにしたほうが Mac や Windows に移植しやすいよね。
もう面倒だ、直接このディレクトリに python3.lang をコピーしちゃえ!

04

それだとエラーで python3.lang がロードできないようです。

def.lang: Update Unicode identifier regexes (!149) ? マージリクエスト ? GNOME / gtksourceview ? GitLab

Gedit が使う GtkSourceView にはこの定義が無いってことですね。
正式な GtkSourceView-4 にはメンテで追加されているという皮肉。
原因は解ったけどコレでは対策手段が無い、お手上げです。

あと関係ないけど Nautilus のリネームで日本語が打てないね。
経験上 GNOME 45 の間はこのままかと、リネームアプリでも作るか。

gnome-text-editor: snippets

gnome-text-editor には謎の設定がある。

dconf

コードスニペットの有効を切り替える設定だと思うんですけど。
F1 でのヘルプにも公式サイトにも説明が無い、いったい何なんだコレ?
試しに Gedit のスニペットファイルを同様にコピーしても動かない。

ぶっちゃけ筆者を含めて今でもほとんどの人が Gedit を使っていると思うけど。
Gedit は GTK3 だしメンテも消極的、数年前の Python2 と同じ状況。
こっちでもスニペットが使えるならいいかげんに切り替え候補にはなる。
ということで使い方を自力で調べてみる。

gio open /usr/share/gtksourceview-5/snippets

default

こんなディレクトリがあった。
licenses.snippets を Gedit とかで開いてみよう。

<?xml version="1.0" encoding="UTF-8"?>
<snippets _group="Licenses">
  <snippet _name="GPLv3 or later" trigger="gpl3" _description="File header with GPLv3+ license">
    <tooltip position="1" text="The name of the file belongs here"/>
    <tooltip position="2" text="The name of the author belongs here"/>
    <tooltip position="3" text="The email address of the author belongs here"/>
    <text languages="python;python3;"><![CDATA[# ${1:$TM_FILENAME}

あぁなるほど、こんな XML を書けば適用できるのね。
というかデフォルトでは GPL3 等のライセンスしか登録されていないってか。

とにかくデフォルトのを試す、最初の設定を true に設定しておくのを忘れずに。
python ファイルを gnome-text-editor で開く、gpl3 と打ち込み [Tab] キーを叩く。

tabkey

XML の指定が違うだけでスニペットの使い方は Gedit と同じですね。
後は名前 [Tab] 日付 [Tab] メールアドレス [Tab] で完成っと。
使い方が解ったところで追加のスニペットを登録してみる。

<?xml version="1.0" encoding="utf-8"?>
<snippets _group="Shebang">
  <snippet _name="Insert Shebang" trigger="sh" _description="pass">
    <text languages="python;python3"><![CDATA[#!/usr/bin/env python3
$0]]></text>
    <text languages="js"><![CDATA[#!/usr/bin/gjs
$0]]></text>
    <text languages="sh"><![CDATA[#!/bin/sh
$0]]></text>
  </snippet>
</snippets>

sh をトリガーにしてシバンを流し込む例。
シェバングなんて読んでは駄目ですよ、末尾の g は発音しないと中学で(以下略
コレに snippets の拡張子を付け以下に保存、ディレクトリは自分で作成。

~/.local/share/gtksourceview-5/snippets

set

後は py や sh ファイルを開いて sh と打ち込み [Tab] キーを。
こんな感じでスニペットを追加登録できるようです、チトめんどいぞ。

ところでシバンといえば。
そもそも Fedora 38 な現在 /usr/bin/python は Python3 へのリンクなんです。

link

なので今では python に 3 指定は不要なんです、ただ Gedit を使う限りは必要。
このシバンが無いと Gedit は Python2 と認識してしまう困った奴なんです。
3 指定無しで match case 文を書けば色分けされないことがすぐ解るよ。
gnome-text-editor なら 3 指定は不要なんですけど。
それがそろそろ気になってきた、ということでこんなことやってます。

いや筆者は macOS で sublime text を購入しているので Linux でも使えるんだけど。
なるべくならデフォルト (GTK4) の UI を使いたいよねって。

Gedit: fstring Highlighting

Gedit が Ctrl+Q で終了する、あれ?
今まではドキュメントを全部閉じてからでないと終了できなかったはず。
面倒だから Ctrl+W の連続押しをずっと使ってきたんだが、いつからだ?

NEWS ? master ? GNOME / gedit ? GitLab

書いていない、もしかして今まではバグだったとかだろうか。
Ctrl+F9 が Wayland では Ctrl を認識しないのは変わっていないけど。
てか GNOME 同梱から外れたのに開発は続いているみたい、GTK3 のまま。
まあいいや、今度から Ctrl+Q を使おう。

せっかくなので Gedit 小ネタ。

Gedit で Python を書いていて不満なこと。
fstring が色分けされない、いやこれは。

/usr/share/gtksourceview-4/language-specs/python3.lang

に認識する定義を書き込めば反映されるんですけど。
gnome-text-editor は色分けされるのでコレ用をそのまま反映させたい。
GTK3(GtkSource 4) と GTK4(GtkSource 5) で違うけど仕様は同じみたいですし。
GtkSource 4 の LanguageManager がドコを参照しているか調べる。

#!/usr/bin/env python3

import gi
gi.require_version('GtkSource', '4')

from gi.repository import GtkSource

man = GtkSource.LanguageManager.get_default()
print(man.props.search_path)

path

~/.local/share/gtksourceview-4/language-specs

が一番最初の参照先になる、$PATH と同じ UNIX お馴染みな仕様。
ココに GtkSource 5 用の python3.lang をコピーすればいいはず。

mkdir ~/.local/share/gtksourceview-4
cd ~/.local/share/gtksourceview-4
mkdir language-specs
cp /usr/share/gtksourceview-5/language-specs/python3.lang language-specs/

gedit

よしコレで fstring のストレスは無くなったぞい。
他の gnome-text-editor との色違いも同じ手段で同じにできるよ。

いや、本当はプラグインでやろうと思ったんだけど。
GtkSource.LanguageManager.set_search_path() がエラーになるのよね何故か。