月別アーカイブ: 2012年9月

Shell Extension

GNOME 3 は Shell Extension というものが使える。
作り方は下記の人が日本語でまとめてくれている。
GNOME Shell Extension を調べてみた – ふとしの日記

サンプルを見たい人や「自分で作るって、どこかに無い?」な人は下記。
GNOME Shell Extensions

って、全部いらネェ…

なんか UserMenu に gnome-terminal のランチャを仕込むのとかあるし。

cmd

#!/bin/sh
gnome-terminal &

なんてスクリプトを書いて $HOME/bin に突っ込んで Alt+F2 のほうが便利だろ。
余計なメニューやアイコンも増えないし三文字でイケる。

私は余計なものが無い GNOME 3 が気に入ったので Fedora を使っているのだし…
とはいえそのうち何か斬新なモノが現れるかもしれないから覚書っと。

********************

インストールしたい Extention をクリックして左上のスイッチを On にする。
するとダイアログが出てインストールするかどうかを質問される。

[インストール] を選択すると即座にインストールされ有効になる。

具体的には
$HOME/.local/share/gnome-shell/extensions/
以下に extension.js 等が展開され、更に gsettings の
org.gnome.shell enabled-extensions
に登録された状態になる。

削除は同じページの [Installed extensions] をクリック。
バッテンマークのアイコンをクリックするとファイルが削除される。
gsettings は再ログインで消えるけど残った場合は手動で消す。

gnome-shell-extension-prefs コマンドで設定もできるみたい。
簡単ですね。

面白いのはコレを絶賛するブログ主は GNOME 2 の再現ばかりやっている。
タスクバー代わりは Alt+F1 もしくは Windows キーを押せばいいし、ダイナミックワークスペースは Ctrl+Alt+上下矢印キーで切り替えできて超便利だし、メニューに至っては Alt+F2 と Tab キーを使わないの?だし。
古くさい UI に戻すためにこんな拡張方法を用意したわけじゃないだろうに。
更に gnome-tweak なんとかを必ず使っているとかetc…

********************

は、どうでもよくて。

つまり Web から $HOME のファイルにアクセスできている、驚いた。
それどころか gsettings まで弄くれてしまうってことじゃないの。

これってセキュリティ的にはどうなんだろう。
「ユーザーが明示的にボタンを押す」等の制限はあるのか?
root は保護されているだろうけど悪用は可能だよね。

よし悪用のため、ではなく…
seemex の Web 版を HTML5 で作ろうとして断念したが「方法はある」ということかも。
いや、見ての通り現在は Chrome メインなんだけど Opera はメーラーとして活躍中w
とにかく Ctrl+u でソースを調べる、Opera と同じキーなので乗り換えしやすい。

require.js を使っている、調べれば解るけどややこしい…
data-main 属性なんて無いけど main.js は見つかったので表示して…
なんとか extensions.js なるアヤシイものを見つける。

https://extensions.gnome.org/static/js/extensions.js

正直、今の私ではほとんど理解できないというオチが。
とにかく dbus を使えばこんなことが可能になるみたい。
勘違いかもしれないけど。

Web から local の設定変更とかが可能になれば色々と思いつくよね。
ということで Shell Extension とは全然関係ないお話でした。

Gst 1.0

Novacut/GStreamer1.0 – Ubuntu Wiki
~jderose/+junk/gst-examples : contents of video-player-1.0 at revision 72

こんなページを見つけた。
これでやっと Y901x の GTK3 化に進歩が…

GStreamer 1.0 用だった。
つーか今まで 1.0 パッケージが公開されたことを知らなかったという…
バージョンは 0.11 のようですけど、0.10 と共存可能らしい。

PPA for GStreamer developers : “GStreamer developers” team

Fedora 17 にデフォルトで入っている GStreamer は 0.10 だ。
0.10 用のサンプルは PyGtk コードのまま。

~jderose/+junk/gst-examples : contents of video-player-0.10 at revision 72

でも 1.0 のコードを 0.10 に書き換えすれば動くかも。
よく見たら Python も Python3 じゃないの、とにかくコピペして書き換え。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

# python2

from os import path

import gi
gi.require_version('Gst', '0.10') #'1.0')
from gi.repository import GObject, Gst, Gtk

# copy...

on_sync_message がやはり発行されない…
ということは on_message を作っても msg は空のまま。
0.10 のバインディングは Fedora 15 時と何も変わっていないということみたい。

このアプリを試すためだけに GStreamer 1.0 を導入してくれ。
なんて言えないよ、てか私も今は入れたくないし。

Fedora や Ubuntu の次期版次第だ、とりあえず覚書ということで。

しかしサンプルコードが Python3 なのも気になる。
実用では見向きもされないままで Linux ではガン無視されている Python3 は失敗作ということで Winamp のごとく Python5 が出るとばかり思っていたのだが。

とにかく文字列が Unicode だと local が utf-8 の Linux では都合が悪すぎ。
とずっと思っていたけど前回 gunichar が ucs-4 だと気がついたっけ。
検索してみる。

DSAS開発者の部屋:Python2.x/3.0のunicode内部表現について

あれ、Fedora の Python って u’str’ は UCS-4 だということなの?
おいおい、私みたいに勘違いしていた人って多くないか?
ならば端末からチト試してみよう。

普通に u” のままで日本語出力ができた、なんじゃこりゃ!
と思ったけど format で成形すると駄目。
ついでにスクリプトファイルにすると直 stdout も駄目になる。

ならばスクリプトを ucs-4 で保存、、、スルーされてしまった。
まあ ucs-4 でスクリプトを保存する人はいないし変換すればいいだけ。
まあとにかくそういう動作をするようだ。

うん、そういうことなら Python3 でも別にいいかなと。
でもデフォルトで入るようになるまで手を出したくない。
「このコードを試すためだけに Python3 を入れてくれ」なんて嫌だよね。

gunichar

C 言語で文字列メンドクサイ | PaePoi

以前こんなことを書いたけど

Eye of GNOME 3 plugin Create | PaePoi

上記をやった時に早く気がつけよ。
g_utf8_strlen なんて解りやすい関数があるじゃないの。
一文字ずつ書き出すための変換関数もあるし。

ついでに、Linux の wchar_t は 4 byte だから多分 UCS-4 だよね。
まあ GLib を使うなら gunichar になるわけだが。
typedef guint32 gunichar;
になっているけど、つまりは 4 byte ということだし。
いわゆる普通に Unicode と呼ばれているものは gunichar2 でいいみたい。

変換は UTF-16 ではなく UCS-4 にしたほうがよさげ。
g_unichar_to_utf8 なんて楽できそうな関数もあるわけで。
Unicode Manipulation

UTF-16 に変換しようと考えてしまう所はやはり Windows でしかプログラミングできなかった頃のバカな頭がまだ抜けきらないということか。
でも UCS-4 でも str[int] の添字でイケるのかな、実験だ。

test.c

#include <glib.h>
#include <string.h>

int
main (int argc, char *argv[])
{
    /* Including Japanese characters */
    gchar c[] = "Linux 勉強中";
    /* UTF-8 Length */
    g_printf ("%s is %d characters\n", c, g_utf8_strlen(c, sizeof(c)));
    /* Converted to UCS4 */
    GError * error = NULL;
    gunichar * ucs;
    glong len = sizeof(c);
    ucs = g_utf8_to_ucs4 (c, -1, NULL, &len, &error);
    if (!ucs) {
        g_print (error->message);
        int retval = error->code;
        g_error_free (error);
        return retval;
    }
    /* Export single character */
    int i = 0;
    for (i; i<len; i++) {
        gchar cc[4];
        memset(&cc, '\0', sizeof(cc));
        g_unichar_to_utf8 (ucs[i], cc);
        g_printf ("%s\n", cc);
    }
    g_free(ucs);
    return 0;
}

Makefile

ucs: test.c
	gcc -o ucs test.c `pkg-config --cflags --libs glib-2.0`

ucs.tar.gz

添字で普通に一文字づつ取り出せるみたいね。
変換エラーチェックを入れてもコレだけだ、簡単。

しかし memset しないと ‘\0’ を入れてくれない。
まあそりゃ普通に char の %c 指定ならンナモンいらないわけだし。
どうでもいいけど ZeroMemory は Windows しか使えないと今頃知った。
やっぱり Windows でしかプログラミングをやらないのではバカになる。

端末入力なら下記でイケるみたい。
\n が入ってしまうので強引に \0 を挿入とかしているけど。

#include <glib.h>
#include <stdio.h>
#include <string.h>

int
main (int argc, char *argv[])
{
    /* Including Japanese characters */
    gchar c[256];
    fgets(c, sizeof(c), stdin);
    /* Remove '\n' */
    c[strlen(c)-1] = '\0'; 
    /* Length */
    glong len = g_utf8_strlen(c, sizeof(c));
    g_printf ("%s is %d characters\n", c, len);
    /* Converted to UCS4 */
    GError * error = NULL;
    gunichar * ucs;
    ucs = g_utf8_to_ucs4 (c, -1, NULL, &len, &error);
    /* Export single character */
    int i = 0;
    for (i; i<len; i++) {
        gchar cc[4];
        memset(&cc, '\0', sizeof(cc));
        g_unichar_to_utf8 (ucs[i], cc);
        g_printf ("%s\n", cc);
    }
    g_free(ucs);
    return 0;
}

なんかもっとスマートな方法がありそうな気がするけど。

TenKey

先日 Y901x を +,- キーで再生速度変更できるようにした。
まてよ、テンキーの +,- キーの存在を忘れていた!

だってオイラの RealForce にはテンキーが無いモン。
それに英語配列だと丁度いい位置に +,-,= キーがあるので私自身はコレでいい。
けど一応公開アプリなんだよな。

日本語配列だと絶対に + が押しにくいと思うし。
「テンキーも使える」にしておけば大半の人が問題無いだろう。
等速に戻す = キーの代わりはテンキーの Enter で代用かな。

更にメディアキーなんつーものも存在するのを今頃気がつく。
昔使っていたテンキーとメディアキーの付いている日本語配列キーボードを引っ張り出して実験と対応処理をすることにした。

テンキー超邪魔、スペースキーちっさ、いらないキー多すぎ!
せめてテンキーは左側に付けてくれと、マウス置き場に困る。
最近のノートパソコンとか何を考えて無理やりテンキーを載せているの?
ついでに記号を間違えまくる、慣れって怖い。

とにかく xev を使ってテンキーの割り当てを調べる。

gtk.keysyms.KP_Add
gtk.keysyms.KP_Subtract
gtk.keysyms.KP_Enter

なのね、コレさえ解れば処理は簡単。
KP_Plus とかが gtkkeysyms で見つからなかったけどこんな名前なのね。
NumLock off でもコレらのキーコードは同じだと今頃知った。

次はメディアキー。
だが、xev で確認できない。

totem のソースを見る。
totem-media-player-keys.c を見ると DBus を使っている。
DBus って 0.3.3 の時にマルチスレッド処理に影響が出たので外したんだが…
できれば避けたい。

というか今頃気がついたけど Rhythmbox や Totem はアクティブでない場合でもメディアキーに反応するのね。
BGM を流した状態で作業を行っている最中に再生アプリをアクティブ化せずとも Play/Pause や次を再生にできるということ。
Global Hotkey というみたい。

検索してみるとこのキーを使っている人って結構多いのね。
WinAmp とか有名どころは上記動作ができたらしい。
パソコンで音楽なんて聴かないから知らなかったよ。
というか音楽自体を全然聴かなくなったような…

つか動画では無意味な機能だ。
バックグラウンドムービーなんて相当痛々しい奴しかやらネェってば。

よし、Y901x では無視しようw
ということで変更はソレだけなのだけど 0.3.9 の公開。

それよりキーボードのストレスが凄い、RealForce に戻す。

とはいえ Global Hotkey というのは少し興味ある。
常駐している秀丸をホットキーで呼び出すみたいな動作を Linux でやりたいとか思う時があるかもしれない。
GNOME なら Alt+F2 を使えで終わるけどさ。
「gnome-ter」まで打ち込んで Tab キーを叩くとあら不思議みたいな。
…やっぱりいらないな。