xmonad.hsサンプル

実は,Gistのテストを兼ねている.

言語を指定しなくても,ファイル名の拡張子か何かから判別してくれてんのかな.
こりゃ楽だわ.

ubuntu を 16.04に上げたら avoidStruts が効かなくなった件

ubuntu を 16.04 に上げると xmonad のバージョンが 0.12 にあがり,avoidStruts 関数はあるはずなんだけど,私の環境では効かなくなった.
文法ミスを疑い haskell の本を読んだりして勉強したが原因が分からず,結局のところ avoidStruts を使わない方法で解決した.
とりあえず desktopLayoutModifiers を使うだけでできた.

import XMonad.Config.Desktop(desktopLayoutModifiers)

main = do
    { -- 略
    , layoutHook            = toggleLayouts (noBorders Full) $ desktopLayoutModifiers $ myLayout
    --, layoutHook            = toggleLayouts (noBorders Full) $ avoidStruts $ myLayout
    }

myLayout = (spacing 18 $ ResizableTall 1 (3/100) (3/5) [])
            |||  (dragPane Vertical   (1/10) (1/2))
            |||  Full

xmonadで特定のプログラムだけフローティング

xmonadを使っていて,タイル配置するとレイアウトが壊れたり操作ボタンが隠れたりして使えないことがある.
そういったプログラムは,フローティングするのが良い.
しかしSuper+クリックで配置後にフローティングしてもウィンドウサイズをリサイズしてくれないため操作ボタンが出てこないことが多々ある.
そういう場合は,最初から特定のプログラムをフローティングで起動するように設定するのが良い.

クラス名を調べる

以下のコマンドで,xpropを使ってコンソールにウィンドウの情報を取得できるようにする.
クラス名だけフィルタしても良い.
このコマンドを実行するとマウスポインタの形状が変わるので,対象のウィンドウをクリックすると情報を取得できる.

$ xprop | grep WM_CLASS

xmonadの設定

xmonadをdefaultConfigで起動している場合,<+>演算子で連結(?)すると良い.

main = do
    -- 略
    xmonad $ ewmh defaultConfig
    { -- 略
    , manageHook = myManageHook
    , -- 略
    }

myManageHook = manageHook defaultConfig <+> myManageHookFloat

myManageHookFloat = composeAll
    [ className =? "PATTERN1" --> doFloat
    , className =? "PATTERN2" --> doFloat
    ]

debian で systemctl で自動起動

あらすじ

systemctl で start とか stop とかできるように /etc/systemd/system/ 以下にサービス定義を置いて安心していたら,自動起動しなかったよ!

それからどーした

sudo systemctl list-unit-files --type=service

nginx.service            disabled

とか出てきたら,サービス定義は生きてるけど自動起動が無効なので,

sudo systemctl enable nginx.service

とかする.

他にも mask/unmask とかハマりポイントなんで,systemctl の man を見て対処する.

cygwin に jupyter を入れる

経緯

Ctrl+d で落ちない python コンソールなんてありえない!

方法

python3-pip と python3-zmq を cygwin のインストーラで入れる.
(英語サイトでは bundled zmq とか書かれてるやつ)

pip3 install jupyter

他にも何か pip で入らなさそうなモジュールとかあったら,bundled を探してみるとあるかも.

Cygwin で Cron を動かす

インストール

cron と cygrunsrv を cygwin でインストール済とする.
合わせて,nkfも入れてあると便利.

nkf を入れる場合,gcc-coreとmakeも入れておくこと.

サービスに登録

昔は cygrunsrv を叩いていたが,今は cron-config でできる.
要,管理者権限.

予断だが ssh-server なんかも ssh-host-config でできるらしい.

yes/no で聞かれているところは基本 yes.
入力を促されるところは CYGWIN は空欄,パスワードは Windows のログオンパスワード.

もしエラーが起こった時に,日本語で読みたい場合は,

cron-config 2>&1 | nkf -u

とかしておくと便利.

cron を開始

うまく開始する条件がよく分からんが,たまに上でうまく動作しないことがある.
一応,こうなっていれば成功のはずなのに,なぜかスクリプトの出力をファイルにリダイレクトさせたはずの出力が得られないことがある.

$ cygrunsrv -Q cron
Service             : cron
Display name        : Cron daemon
Current State       : Running
Controls Accepted   : Stop
Command             : /usr/sbin/cron -n

そういう時は,サービスの再起動が良い.
要管理者権限.

$ net stop cron 2>&1 | nkf -u
$ net start cron 2>&1 | nkf -u

これはメッセージが日本語確定なので,nkfを使う.
で,その後ステータスを見て, Current State が Runnning でなければ,cygrunsrv で開始させる.

$ cygrunsrv -S cron

Windows 10 で最初にやる設定系2(cygwin)

前提

  • cygwinの使い方は知っているものとして,いつも入れるプログラムを記載する

インストールプログラム

cygwin インストーラによる

  • corkscrew
  • curl
  • gcc
  • git
  • make
  • openssh
  • p7zip
  • pip2/pip3
  • python2/python3
  • sqlite3
  • tmux
  • vim
  • wget
  • zsh

自分でmakeする

  • nkf

nkf を使えば,dosのipconfigなどをutf8に変換してcygwinのコマンドやスクリプトで処理できるようになるので,オススメ.

Windows 10 で最初にやる設定系1(不要アプリ削除)

前提知識

  • ウィンドウズキーは「Win」と記載する.
  • key1とkey2を押す場合はkey1 + key2と書く.例えば Ctrl と A は Ctrl+A.
  • プログラムを起動する時は Win+R で「ファイル名を指定して実行」で起動する
  • 従来のコントロールパネルの起動は
    c:\windows\system32\control.exe
  • Windows 10 の設定画面の起動は
    Win + I

手順

  1. Win+I
  2. システム
  3. 左のメニューから「アプリと機能」
    • 不要なものを全て消す
    • 特に3D Builderなどコントロールパネルの「プログラムと機能」から消せないものは,ここで消す
  4. 右の画面の上の「オプション機能の管理」
    • 不要なものを全て消す
    • 特にノートPCなどは店頭デモなどが入ってたりするので消す
  5. Win を押してすぐに「powershell」と入力
  6. Ctrl + Shift + Enter で起動(管理者権限で起動)
    • コマンドで削除
      Get-AppxPackage マッチング文字列 | Remove-AppxPackage
    • Grooveミュージックなど,上のどの手段でも消せないものをアンインストールできる
    • hadacchiが消したのは,下の表
アプリ マッチング文字列
Groove ミュージック、映画、テレビ *zone*
People *people*
Xbox *xboxapp*
アラーム&クロック *WindowsAlarms*
カメラ *camera*
OneNote *onenote*

Windows 10 で Winキー+カーソルキーのスナップ機能を以前のWindows風にする

背景

Windows10になって、Winキー+カーソルキーでウィンドウをスナップする機能をつかうと、例えばWin+←とした場合、右半分に配置するウィンドウ候補が表示される。
ここでウィンドウを選択すると右半分にもスナップされ、ESCなどでキャンセルすると左半分へスナップしたウィンドウだけがスナップされる。

従来のWindowsではこのウィンドウ候補が表示されず、フォーカスの当たっているウィンドウのスナップ動作だけが行われて動作が完了していた。

私はそこまで自動化してくれる必要などなく、個別にガシガシウィンドウを右なり左なりにスナップして使うので、ウィンドウ候補の表示は邪魔である。

設定方法

  • Win+I
  • システム
  • マルチタスク
  • 「横に配置できるものを~~」をオフ