投稿者「sasakima-nao」のアーカイブ

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() がエラーになるのよね何故か。

macOS: Get UTI (Ventura)

macOS 13 Ventura で以下の関数が使えなくなった件。

# Deprecated
UTTypeCreatePreferredIdentifierForTag

UTI を調べる方法にて検索するとメッチャ見つかります。
でももう使えません、別の方法を探す。

UTType | Apple Developer Documentation

UTType クラスに typeWithFilenameExtension メソッドがある。
+ だから static method ですね、これ使えるかも。
以下 PyObjC です、他言語の人は変換してね。

#!/usr/bin/env python3

'''
    PyObjC @ Get UTI
'''

import sys, UniformTypeIdentifiers

for filename in sys.argv[1:]:
    n = filename.rfind('.') + 1
    if n > 0:
        ext = filename[n:]
        uti = UniformTypeIdentifiers.UTType.typeWithFilenameExtension_(ext)
        print(f'{ext}: {uti}')


''' Deprecated

import sys, CoreServices

for ext in sys.argv[1:]:
    uti = CoreServices.UTTypeCreatePreferredIdentifierForTag(
        CoreServices.kUTTagClassFilenameExtension, ext, None)
    arr = CoreServices.UTTypeCopyDeclaration(uti)['UTTypeConformsTo']
    con = ','.join(arr)
    print(f'{ext}: {uti} [{con}]')
'''

# ex: ft=py

get uti

よしデジカメ RAW ファイルでも問題なく UTI が得られるぞと。
本サイトのほうも書き換えしておきます。
しかし以前貼ったスクリプトで WebP 化したけど文字がチト見づらいな。
これも要改良かな、ということで。

aoji

今日はアオジが撮れました。

Kawasemi

今日もキジポイントへ、いや勝手に名付けているだけです。
いい天気だ、カワセミが道中の五条川で大サービスしてくれた。

kawasemi

トリミング無し、いや 300 万画素に縮小しましたけど。
これだけ綺麗に撮影できると雌だとはっきり解ります。

kawasemi

LUMIX の「生命力・生命美」な絵作りはカワセミにぴったり。
でも LUMIX G99 なのでプロキャプチャが使えず。

kawasemi

連写じゃコレが精一杯、いやヘタクソなだけですけど。
AF が最初に合った時点で MF に切り替えたほうがいいのかな?

kawasemi

ボディを E-M5 に換装、プロキャプチャ様様です。
場所が悪く枝の前ボケが入ってしまったけどやっぱりコレだよ。

G99 と E-M5、一長一短で困る。
Dual I.S. と使いやすいボタン配置と Luminar Neo との相性。
小型軽量とプロキャプチャと AI ノイズリダクション。

G9pro や OM-1 を手に入れても一長一短は解決しないっていう。
いっそ EOS R7、いやなんでもない。
ついでに、オリンパスレンズの MF クラッチは LUMIX でも有効なのね。
今年の桜は LUMIX で撮影してみるか。

ところで Luminar neo を 1.6.4 にアップデート。
[L, T, E] キーでビューを切り替えできるようになった。
やっぱりアレはバグだったのか、変だなと思っていた。

今日もキジは現れず。

Hibari

昨日の遅番出勤中に田圃にてキジを発見、当然カメラは無い。
今日も来るかもしれない、と同じ田圃で張り込みをすることに。

sekirei

出待ち中に LUMIX G99 の追尾 AF ターゲットを試してみる。
EVF を覗いた状態でタッチパネルでターゲットを指定、簡単だね。
このサイズ以上ならしっかり追尾してくれる、オリンパスは…
ターゲット枠より小さいと容赦無く背景に抜けるのはしかたがない。
大きめで動き回る被写体には使えるかも。

hibari

ヒバリ、E-M5 ボディにて少しクロップ。
G99 の直後に使うとやはりグリップが欲しくなる、てか持ちづらい。
完全に慣れなんだけど G99+100-400 を持つと「コレコレ」ってなる。
OM-1 とかでも「コレコレ」感が出るのかな?いやまだ買わないけど。
てかもうヒバリがいるのか、今までドコにいっていたんだろう?

hibari

別の場所でこれもヒバリ、G99 ボディにて少しクロップ。
今更だけど Dual I.S. ってスゲェな、E-M5 手ぶれ補正よりいい。
補正自体はどっこいだけどコッチはレンズを振っている時にも補正するのが。
これが本当にありがたい、比べないと気にしないかもだけど。

Luminar Neo 現像はやっぱり LUMIX のほうが綺麗に、Standard が選べるし。
キジは現れず、明日はどうしよう。

Escape

INI ファイルの読み書きページを更新しました。
INI ファイルの読み書き – Paepoi

セクションを見つける正規表現に最初戸惑った。

EXP = r'^\[\w+\]$'

でイケると思ったけど文字列に半角スペースがあると認識できない。
半角スペースを使うなで済ませようとも思ったけど。

EXP = r'^\[[^\]]+\]$'

そうだ「閉じブラケット以外の文字列なら何でもいい」にすれば!
こんなアホな思いつきに対応できる正規表現ってやはり面白い。

とほほの正規表現入門 – とほほのWWW入門
ところで、とほほさんで見た「ブラケット内は記号の意味を失う」なんですが。

#! /usr/bin/env python3

import re

# [..] にマッチさせる正規表現
EXP = r'^\[[^\]]+\]$'
# EXP = r'^\[[^]]+\]$' # Python OK

a = ['[test]', '[test2]', '[test3] ', ' [test4]', '[test 5]']

for s in a:
    if re.search(EXP, s):
        print(s)

Python

#! /usr/bin/env php

<?php

// [..] にマッチさせる正規表現
$EXP = '/^\[[^\]]+\]$/';
// $EXP = '/^\[[^]]+\]$/'; # PHP OK

$a = ['[test]', '[test2]', '[test3] ', ' [test4]', '[test 5]'];

foreach ($a as $s) {
    if (preg_match($EXP, $s))
        echo $s.PHP_EOL;
}
?>

PHP

#! /usr/bin/gjs

// [..] にマッチさせる正規表現
const EXP = /^\[[^\]]+\]$/;
//const EXP = /^\[[^]]+\]$/; // Gjs NO

let a = ['[test]', '[test2]', '[test3] ', ' [test4]', '[test 5]'];

for (let s of a) {
    if (EXP.test(s)) {
        print(s)
    }
}

Gjs ダメだった。

JavaScript エンジンは複数あるので全部かどうかは試していないけど。
エスケープすれば全部イケたのでブラケット内もエスケープしたほうがいいかと。