どうしてこんな人生に来たか
それはすべて、新しい仕事への移行から始まりました。 しかし、いや...それはすべて奇跡の時計で偶然どこかで見たイメージから
主な出来事は仕事の変更と、その後の17インチモニターの23インチへの変更でした。 数週間の作業の後、私が1年以上使用していたGnomeでは、利用可能なすべてのデスクトップスペースを完全に使用できないことが明らかになりました(1920 * 1080、10年前にモニターでこのような解像度を考えるのは怖かったです)。 比fig的にウィンドウを配置するのはかなり不便です。私の組織でのシステム管理者の作業の詳細には、少なくともコンソール、ブラウザー、メッセンジャー、およびrdesktopやvncviewerなどのアクティビティのコンテキストによって異なるアプリケーションのヒープを同時に開いて並行して使用することが含まれます
その瞬間、私はもう一度タイルデスクトップマネージャーについて言及し、この方法でワークスペースを整理することにしました。 そして見よ、それは非常に便利であることが判明した。 いくつかのWMを試した後、 Awesomeを選択しました。 数日間使用した後、このタイプのWMは作業に最適であり、awesomeはこのタイプの価値のある代表であると確信し、デスクトップをカスタマイズする可能性を検討し始めました。 幸いなことに、Awesomeは3番目のバージョンから、構成にLua言語のスクリプトを使用します。これにより、構成にウィジェットを直接書き込むことができます。 Awesomeサイトで利用可能なウィジェットをユーザーから調べてみると、 アナログ時計ウィジェットに出会いました。このウィジェットのコードをざっと見てみると、長い間興味のあるものを実装する絶好の機会がわかりました。 これに必要なのは、Awesome自体のツールを使用して画像を描画する機能だけであるため、ウィジェットは外部コンポーネントから独立しています。
image:draw_rectangle(x,y,w,h)
もちろん、私はこれまでLuaを使用したことはありませんでしたが、タスクは非常に簡単に思えたので、仕事に取り掛かりました。
さあ行こう
必要なファイルをテキストエディターで開きます。
$vim ~/.config/awesome/rc.lua
既存のテキスト時計ウィジェット広告を探しています
mytextclock = awful.widget.textclock ( { align = "right" } )
そして、「作成」を開始します。
binaryclock = { }
binaryclock.widget = widget ( { type = "imagebox" } )
binaryclock.w = 51- 幅
binaryclock.h = 24 --height(6の倍数であることが望ましい)
-驚くほどwiboxの高さに合わせて時計で画像のサイズを変更することを忘れないでください
binaryclock.show_sec = true- 秒を表示する必要がありますか?
binaryclock.color_active = beautiful.bg_focus- アクティブなドットカラー
binaryclock.color_bg = beautiful.bg_normal- 背景色
binaryclock.color_inactive = beautiful.fg_focus- 非アクティブなドットカラー
binaryclock.dotsize = math.floor ( binaryclock.h / 6 )- ドットサイズ
binaryclock.step = math.floor ( binaryclock.dotsize / 2 ) -ドット間の空白
binaryclock.widget.image = image.argb32 ( binaryclock.w、binaryclock.h、 nil ) -イメージの作成
if ( binaryclock.show_sec ) then binaryclock.timeout = 1 else binaryclock.timeout = 20 end-秒を表示しない場合、頻繁に更新する必要はありません
ご覧のとおり、すべてのウィジェット設定はここで設定され、すべての基本的なサイズ計算はそこで行われます。
次に、Lua言語の既製のソリューションを使用しました。これにより、10進数の数値を他の数値に変換できます。
binaryclock.DEC_BIN = function ( IN )-- Lostgallifreyanへの感謝(http://lua-users.org/lists/lua-l/2004-09/msg00054.html)
ローカル B、K、OUT、I、D = 2 、 「01」 、 「」 、 0
IN > 0の場合
I = I + 1
IN、D = math.floor ( IN / B ) 、 math.mod ( IN、B ) + 1
OUT = string.sub ( K、D、D ) ..OUT
終わり
戻る
終わり
次に、クロックのダイオードポイントをそれぞれ数値自体に描画する関数を宣言します
binaryclock.paintdot = function ( val、shift、limit ) -左側からのシフトでドットとしてペイントする
ローカル binval = binaryclock.DEC_BIN ( val )
ローカル l = string.len ( binval )
ローカルの高さ= 0-高さ調整、ドットを持ち上げる必要がある場合
if ( l < limit ) then
i = 1の場合、limit-l do binval = "0" .. binval end
終わり
i = 0の場合、limit- 1 do
if ( string.sub ( binval、limit-i、limit-i ) == "1" ) then
binaryclock.widget.image:draw_rectangle ( shift、binaryclock.h-binaryclock.dotsize-height、binaryclock.dotsize、binaryclock.dotsize、 true 、binaryclock.color_active )
他に
binaryclock.widget.image:draw_rectangle ( shift、binaryclock.h-binaryclock.dotsize-height、binaryclock.dotsize、binaryclock.dotsize、 true 、binaryclock.color_inactive )
終わり
height = height + binaryclock.dotsize + binaryclock.step
終わり
終わり
そして最後に、時計を描く主な機能:
binaryclock.drawclock = function ( )- 時間を取得し、paintdotに数字を送信()
binaryclock.widget.image:draw_rectangle ( 0、0 、binaryclock.w、binaryclock.h、 true 、binaryclock.color_bg ) -背景を塗りつぶします
ローカル t = os.date ( "* t" )
現地時間= t.hour
if ( string.len ( hour ) == 1 ) then
時間= "0" .. t.hour
終わり
ローカル 最小 = t。 分
if ( string.len ( min ) == 1 ) then
min = "0" .. t。 分
終わり
ローカル秒= t.sec
if ( string.len ( sec ) == 1 ) then
sec = "0" .. t.sec
終わり
ローカル col_count = 6
if ( binaryclock.show_secではない ) then col_count = 4 end
ローカルステップ= math.floor ( ( binaryclock.w-col_count * binaryclock.dotsize ) / 8 ) -cols間の水平方向の空白を計算
binaryclock.paintdot ( 0 + string.sub ( hour、 1、1 ) 、step、 2 )
binaryclock.paintdot ( 0 + string.sub ( hour、 2、2 ) 、binaryclock.dotsize + 2 * step、 4 )
binaryclock.paintdot ( 0 + string.sub ( min 、 1、1 ) 、binaryclock.dotsize * 2 + 4 * step、 3 )
binaryclock.paintdot ( 0 + string.sub ( min 、 2、2 ) 、binaryclock.dotsize * 3 + 5 * step、 4 )
if ( binaryclock.show_sec ) then
binaryclock.paintdot ( 0 + string.sub ( sec、 1、1 ) 、binaryclock.dotsize * 4 + 7 * step、 3 )
binaryclock.paintdot ( 0 + string.sub ( sec、 2、2 ) 、binaryclock.dotsize * 5 + 8 * step、 4 )
終わり
binaryclock.widget.image = binaryclock.widget.image
終わり
もちろん、最もエレガントなソリューションではありませんが、機能します。
更新タイマーを設定するだけです。
binarytimer = timer { timeout = binaryclock.timeout } -タイマーを登録する
binarytimer:add_signal ( "timeout" 、 関数 ( )
binaryclock.drawclock ( )
終了 )
binarytimer:start ( )- タイマーを開始
ウィジェットをパネル(vibox)に配置します。
mywibox [ s ] .widgets = {
-ウィジェット
binaryclock.widget、
-再びウィジェット
レイアウト= awful.widget.layout.horizontal.rightleft
}
美しさ(およびFull-HD画面での時計の通常サイズ)のために、パネルの高さを変更する必要がありました。
mywibox [ s ] = awful.wibox ( { position = "top" 、screen = s、height = "22" } )
ウィジェットの高さは24で、パネルの高さが22ピクセルであることには驚かないかもしれません。パネルの高さが24ピクセルであるため、何らかの理由で、トレイのピジンアイコンが非常に不自然に動作し、点滅し、通常はいたずらです。
作業が終了したら、素晴らしい素晴らしいコンボMod4 + Ctrl + rを再起動して結果を評価できます。
そして、結果は何ですか?
スクリーンショットで私の作業の結果を評価できます。
昼休みに数日間コードを書くと、バイナリクロックが安全に点滅し、素晴らしいパネルに時刻が表示され、Lua言語の知識が豊かになり、仮想ワークスペースが装飾されました。 ところで、Awesomeは11インチのラップトップでの使用に適していることも示しており、タッチパッド/トラックパッドの使用を完全に放棄し、ラップトップの全体的な応答性を向上させることができました。
PSウィジェットのコード