Fedora」タグアーカイブ

shell

ブックマークの整理をしていて素晴らしいページを発見。
って、つまり一年以上前にブックマークして華麗に忘れていたんだけど。

スマートな紳士のためのシェルスクリプト – @IT

この人は経験値があって話が上手いな、真似したい。
筆者が自分のことを筆者と書いているのはそういう人達の真似だったり…
でも一番素敵と思ったのは (2) で駄目と書かれた

if type logger > /dev/null 2>&1; then
    LOGGER="logger -s -p user.notice -t dhclient"
else
    LOGGER=echo
fi

で。

いや、絶対パスに入っているかどうかはディストリビューション側の仕事で。
サードパーティ側はコマンドが使えるかどうか「だけ」が重要ですんで。

いやまて…
コレってインタラクティブシェルだとどうなる?
面白そうなので早速。

dev_null

インタラクティブシェルでもやはり何も出力されない。
>>> の PS2 変数さえ無視される、打ち込んだキー以外は完全破棄のようだ。
だけど exit() 等の関数は普通に通用されてしまう、面白い。
なので、gedit や gnome-terminal は問題なく起動できてしまう。

でも eog はどうやっても駄目、あぁなるほど。
eog って GNOME Project の中でもかなり特殊と感じていたのはコレか。
もの凄く優秀なアプリなんだけど GNOME の思想と何か違う、みたいな。
それが何かはまだ解らないけど、まあそれは別の話で。

あぁそういう手があったのか、みたいな。
mac でも当然使えるしシェルスクリプト覚書に追記しようかと。

Mac and Linux user-dir

Linux の sh でユーザーディレクトリのパスを得るのは簡単だ。
最近のバージョンであれば XDG 関連が最初から入っている(と思う)
詳しいことは man xdg-user-dir で。
たとえばドキュメントディレクトリなら

echo xdg-user-dir DOCUMENTS

「そんなコマンドネェよ」という人も大丈夫。
xdg-user-dir の中身は単純なシェルスクリプトなので自作も簡単。

#!/bin/sh

test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && . ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
if [ "x$1" = "xDESKTOP" ]; then
  eval echo \${XDG_${1}_DIR:-$HOME/Desktop}
else
  eval echo \${XDG_${1}_DIR:-$HOME}
fi

何をやっているか理解できれば素敵。
デフォルト引数はこんな場合に使うのか、ふむふむ。

Mac では、困った user-dirs.dirs が無いぞ。
xdg-open には open_darwin() という関数があるのにな。

open_darwin

シェルから得る手段を探しているけど見つからない。
Mac って本当に sh ではたいしたことができないなぁ。
AppleScript か JXA を使いなさいということか。

って、だったら AppleScript を sh から使えばいいんでね?

#!/bin/sh

doc=`osascript -e "POSIX path of (path to documents folder)"`
echo Documents Path: $doc

おぉ!

user_dir

Mac や Linux ではやはり US キーボードでないと駄目だね。
バックコーテーションとチルダはシェルでよく使うから。
コレが日本語キーボードだと嫌がらせとしか思えない位置にある。

おまけ、Visual Studio Code で今頃知った。
command+shift+C でソース位置をカレントに terminal.app が開く。
拡張スクリプトを書こうとしたけど必要無かったYO!

United RPMS

Fedora に新しいリポジトリができたんだね。
数はまだ少ないけど。

United RPMS by UnitedRPMs

RPM Fusion から何故か無くなった unrar がこっちにはある。
Atom や Opera やよくワカランのやら、ふむふむ。
mplayer 等のマルチメディア系は RPM Fusion と被りまくっているような。

unitedrpms.github.io/README.md at master ? UnitedRPMs/unitedrpms.github.io ? GitHub

インストールは上記、GPG キーのインストールを忘れずに。
gnome-softwere のソフトウエアソースを確認。

unitedrpms1

うん登録されているね。
これで Atom とかはインストールできるけど被っているものはどうなるの?

gaburi

普通にどちらか一方が入るということのようだ。
これなら導入しても特に問題はなさそうだ。

今後どうなるか解らないけど面白いものが登録されるといいな。
まあ筆者の場合は使うアプリがほぼ固定しちゃってるんで意味ないんですけどね。

Fedora 24 rar, cbr

CBZ ビューアを作っているけど CBR はどうしよう?
筆者自信は cbr ファイルを一つも持っていないし。
まあそりゃ rar 自体が超マイナーだし。

てゆーか Fedora 24 にしてから RPM Fusion で unrar が見つからない。
と思ったけど手持ちにあった rar ファイルを file-roller で開くことができる。
これって自前対応になったってこと?
いや圧縮はできないし、今度ソースでも落として調べてみよう。

自前になったとしても MComix 等は unrar を使うんだよなぁ。
筆者はいらないけど rar で圧縮したい人もいるだろう。

WinRAR archiver, a powerful tool to process RAR and ZIP files

なんだ、RARLAB で普通に Linux x64 バイナリが落とせるじゃん。
せっかくなので現在最新の 5.40 beta3 を落として

sudo make install

rar

あれ、Makefile は先頭を大文字にしなくても使えるのね。
まあいい、バイナリだからこれだけでインストール完了。
早速 Nautilus のコンテキストメニューから[圧縮]をば。

rar_cbr

おお増えた、と思ったら cbr, cbz まで何故か増えた!
これで ZIP 圧縮した後で拡張子を変更する手間が省ける、少し嬉しい。

GTK+ 3.20 GtkHeaderBar and CSS

GTK+ 3.20 で GtkHeaderBar を使う場合の注意。
GtkWindow のリサイズがクライアント領域に変更されたようです。
というか GtkHeaderBar があってもなくても同じ扱いということ。

let w = 320;
let h = 240;
/* under 3.18 in GtkHeaderBar
let diff_x = window.get_allocated_width() - window.vbox.get_allocated_width();
let diff_y = window.get_allocated_height() - window.vbox.get_allocated_height();
window.resize(w + diff_x, h + diff_y);
*/
window.resize(w, h); // 3.20

3.18 以前にも対応させるには振り分け処理が必要。
我がアプリは GtkShortcutWindow を使う予定なので 3.20 専用にする。

*****

GStreamer に変更があったのか他の要因か解らないけど。
皮肉なことに Y901x 1.1.3 で動画がリサイズできるようになった。
せっかく ClutterGst で丸ごと作り替えはじめたのにな。

ただ CSS の仕様が 3.20 で丸々変更されている。
3.18 以前で Style Properties を使っていた場合は WARNING だらけに。

gtk_style

こいつは 3.18 以前との振り分けは無理っぽいな。
詳しいことは今度調べる。

*****

Gjs で ARGV の仕様は変わっていないみたい。
相変わらず Clutter を使って多重起動すると落ちる。
つまり Gjs は筆者の解る範囲では何も変わっていない。

ClutterGst Aspect Rate | PaePoi

多重起動で不具合が出まくるなら原点に戻って多重起動防止だ!
って Totem も多重起動防止だった、知らなかった…

つか、多重起動って実は問題があるのよね。
設定を変更した時に既に起動しているウインドウへの適用をどうするか。
今の GNOME アプリは GSettings を使って見事に適用させている。
ini ファイルの奴でも手段はあるけど、ほぼ誰もやっていない。

まあそれはいいとして、大ボケに気が付いた。
y901x beta ではインストールする起動スクリプトをこうしていた。

#!/bin/sh
cd /usr/share/y901x
gjs y901main.js $*

これだと端末で cd 移動からの起動がおかしいジャン。
引数がファイル名だけだと[カレントディレクトリ + ファイル名]だよ。

#!/bin/sh
gjs /usr/share/y901x/y901main.js $*

に変更してソースには以下を追記。

imports.searchPath.unshift("/usr/share/y901x");

うん、大ボケはとりあえずなんとかなった。
もう少し調べて明日には 3.20 対応版を出そう。