cowsay 一覧

20150910_05:09:59-18564
Debian testing stretch に cowsay が降りてきたので久々に実行して遊んでみました.せっかくなので全部表示してみる.
実行は,% ls -1 /usr/share/cowsay/cows | xargs -n1 -I{} cowsay -f {} {} | xclip な感じで.

 _________
< apt.cow >
 ---------
       \ (__)
         (oo)
   /------\/
  / |    ||
 *  /\---/\
    ~~   ~~
 ________________
< beavis.zen.cow >
 ----------------
   \         __------~~-,
    \      ,'            ,
          /               \
         /                :
        |                  '
        |                  |
        |                  |
         |   _--           |
         _| =-.     .-.   ||
         o|/o/       _.   |
         /  ~          \ |
       (____@)  ___~    |
          |_===~~~.`    |
       _______.--~     |
       \________       |
                \      |
              __/-___-- -__
             /            _ \
 __________
< bong.cow >
 ----------
         \
          \
            ^__^
    _______/(oo)
/\/(       /(__)
   | W----|| |~|
   ||     || |~|  ~~
             |~|  ~
             |_| o
             |#|/
            _+#+_
 _______________
< bud-frogs.cow >
 ---------------
     \
      \
          oO)-.                       .-(Oo
         /__  _\                     /_  __\
         \  \(  |     ()~()         |  )/  /
          \__|\ |    (-___-)        | /|__/
          '  '--'    ==`-'==        '--'  '
 ___________
< bunny.cow >
 -----------
  \
   \   \
        \ /\
        ( )
      .( o ).
 ____________
< calvin.cow >
 ------------
 \                   .,
   \         .      .TR   d'
     \      k,l    .R.b  .t .Je
       \   .P q.   a|.b .f .Z%
           .b .h  .E` # J: 2`     .
      .,.a .E  ,L.M'  ?:b `| ..J9!`.,
       q,.h.M`   `..,   ..,""` ..2"`
       .M, J8`   `:       `   3;
   .    Jk              ...,   `^7"90c.
    j,  ,!     .7"'`j,.|   .n.   ...
   j, 7'     .r`     4:      L   `...
  ..,m.      J`    ..,|..    J`  7TWi
  ..JJ,.:    %    oo      ,. ....,
    .,E      3     7`g.M:    P  41
   JT7"'      O.   .J,;     ``  V"7N.
   G.           ""Q+  .Zu.,!`      Z`
   .9.. .         J&..J!       .  ,:
      7"9a                    JM"!
         .5J.     ..        ..F`
            78a..   `    ..2'
                J9Ksaw0"'
               .EJ?A...a.
               q...g...gi
              .m...qa..,y:
              .HQFNB&...mm
               ,Z|,m.a.,dp
            .,?f` ,E?:"^7b
            `A| . .F^^7'^4,
             .MMMMMMMMMMMQzna,
         ...f"A.JdT     J:    Jp,
          `JNa..........A....af`
               `^^^^^'`
 ____________
< cheese.cow >
 ------------
   \
    \
      _____   _________
     /     \_/         |
    |                 ||
    |                 ||
   |    ###\  /###   | |
   |     0  \/  0    | |
  /|                 | |
 / |        <        |\ \
| /|                 | | |
| |     \_______/   |  | |
| |                 | / /
/||                 /|||
   ----------------|
        | |    | |
        ***    ***
       /___\  /___\
 __________
< cock.cow >
 ----------
    \
     \  /\/\
       \   /
       |  0 >>
       |___|
 __((_<|   |
(          |
(__________)
   |      |
   |      |
   /\     /\
 ___________
< cower.cow >
 -----------
     \
      \
        ,__, |    |
        (oo)\|    |___
        (__)\|    |   )\_
             |    |_w |  \
             |    |  ||   *
 
             Cower....
 ____________
< daemon.cow >
 ------------
   \         ,        ,
    \       /(        )`
     \      \ \___   / |
            /- _  `-/  '
           (/\/ \ \   /\
           / /   | `    \
           O O   ) /    |
           `-^--'`<     '
          (_.)  _  )   /
           `.___/`    /
             `-----' /
<----.     __ / __   \
<----|====O)))==) \) /====
<----'    `--' `.__,' \
             |        |
              \       /
        ______( (_  / \______
      ,'  ,-----'   |        \
      `--{__________)        \/
 _____________
< default.cow >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____________________
< dragon-and-cow.cow >
 --------------------
                       \                    ^    /^
                        \                  / \  // \
                         \   |\___/|      /   \//  .\
                          \  /O  O  \__  /    //  | \ \           *----*
                            /     /  \/_/    //   |  \  \          \   |
                            @___@`    \/_   //    |   \   \         \/\ \
                           0/0/|       \/_ //     |    \    \         \  \
                       0/0/0/0/|        \///      |     \     \       |  |
                    0/0/0/0/0/_|_ /   (  //       |      \     _\     |  /
                 0/0/0/0/0/0/`/,_ _ _/  ) ; -.    |    _ _\.-~       /   /
                             ,-}        _      *-.|.-~-.           .~    ~
            \     \__/        `/\      /                 ~-. _ .-~      /
             \____(oo)           *.   }            {                   /
             (    (--)          .----~-.\        \-`                 .~
             //__\\  \__ Ack!   ///.----..<        \             _ -~
            //    \\               ///-._ _ _ _ _ _ _{^ - - - - ~
 ____________
< dragon.cow >
 ------------
      \                    / \  //\
       \    |\___/|      /   \//  \\
            /0  0  \__  /    //  | \ \
           /     /  \/_/    //   |  \  \  
           @_^_@'/   \/_   //    |   \   \
           //_^_/     \/_ //     |    \    \
        ( //) |        \///      |     \     \
      ( / /) _|_ /   )  //       |      \     _\
    ( // /) '/,_ _ _/  ( ; -.    |    _ _\.-~        .-~~~^-.
  (( / / )) ,-{        _      `-.|.-~-.           .~         `.
 (( // / ))  '/\      /                 ~-. _ .-~      .-~^-.  \
 (( /// ))      `.   {            }                   /      \  \
  (( / ))     .----~-.\        \-'                 .~         \  `. \^-.
             ///.----..>        \             _ -~             `.  ^-`  ^-_
               ///-._ _ _ _ _ _ _}^ - - - - ~                     ~-- ,.-~
                                                                  /.-~
 __________
< duck.cow >
 ----------
 \
  \
   \ >()_
      (__)__ _
 _______________________
< elephant-in-snake.cow >
 -----------------------
       \
        \  ....
          .    ........
          .            .
          .             .
    .......              .........
    ..............................
Elephant inside ASCII snake
 ______________
< elephant.cow >
 --------------
 \     /\  ___  /\
  \   // \/   \/ \\
     ((    O O    ))
      \\ /     \ //
       \/  | |  \/
        |  | |  |  
        |  | |  |  
        |   o   |  
        | |   | |  
        |m|   |m|  
 __________
< eyes.cow >
 ----------
    \
     \
                                   .::!!!!!!!:.
  .!!!!!:.                        .:!!!!!!!!!!!!
  ~~~~!!!!!!.                 .:!!!!!!!!!UWWW$$
      :$NWX!!:           .:!!!!!!XUWW$$$$$P
      $$$##WX!:      .<!!!!UW$$"  $$$$#
      $$

nbsp; $$UX   :!!UW$$$$


nbsp;  4$$$*

      ^$$B  $$\     $$$$$$   d$R"
        "*$bd$$      '*$$$$$$o+#"
             """"          """""""
 ___________________
< flaming-sheep.cow >
 -------------------
  \            .    .     .
   \      .  . .     `  ,
    \    .; .  : .' :  :  : .
     \   i..`: i` i.i.,i  i .
      \   `,--.|i |i|ii|ii|i:
           UooU\.'@@@@@@`.||'
           \__/(@@@@@@@@@@)'  
                (@@@@@@@@)
                `YY~~~~YY'
                 ||    ||
 __________________
< ghostbusters.cow >
 ------------------
          \
           \
            \          __---__
                    _-       /--______
               __--( /     \ )XXXXXXXXXXX\v.
             .-XXX(   O   O  )XXXXXXXXXXXXXXX-
            /XXX(       U     )        XXXXXXX\
          /XXXXX(              )--_  XXXXXXXXXXX\
         /XXXXX/ (      O     )   XXXXXX   \XXXXX\
         XXXXX/   /            XXXXXX   \__ \XXXXX
         XXXXXX__/          XXXXXX         \__---->
 ---___  XXX__/          XXXXXX      \__         /
   \-  --__/   ___/\  XXXXXX            /  ___--/=
    \-\    ___/    XXXXXX              '--- XXXXXX
       \-\/XXX\ XXXXXX                      /XXXXX
         \XXXXXXXXX   \                    /XXXXX/
          \XXXXXX      >                 _/XXXXX/
            \XXXXX--__/              __-- XXXX/
             -XXXXXXXX---------------  XXXXXX-
                \XXXXXXXXXXXXXXXXXXXXXXXXXX/
                  ""VXXXXXXXXXXXXXXXXXXV""
 _________
< gnu.cow >
 ---------
    \               ,-----._
  .  \         .  ,'        `-.__,------._
 //   \      __\\'                        `-.
((    _____-'___))                           |
 `:='/     (alf_/                            |
 `.=|      |='                               |
    |)   O |                                  \
    |      |                               /\  \
    |     /                          .    /  \  \
    |    .-..__            ___   .--' \  |\   \  |
   |o o  |     ``--.___.  /   `-'      \  \\   \ |
    `--''        '  .' / /             |  | |   | \
                 |  | / /              |  | |   mmm
                 |  ||  |              | /| |
                 ( .' \ \              || | |
                 | |   \ \            // / /
                 | |    \ \          || |_|
                /  |    |_/         /_|
               /__/
 _____________
< head-in.cow >
 -------------
    \
     \
    ^__^         /
    (oo)\_______/  _________
    (__)\       )=(  ____|_ \_____
        ||----w |  \ \     \_____ |
        ||     ||   ||           ||
 ________________
< hellokitty.cow >
 ----------------
  \
   \
      /\_)o<
     |      \
     | O . O|
      \_____/
 __________
< kiss.cow >
 ----------
     \
      \
             ,;;;;;;;,
            ;;;;;;;;;;;,
           ;;;;;'_____;'
           ;;;(/))))|((\
           _;;((((((|))))
          / |_\\\\\\\\\\\\
     .--~(  \ ~))))))))))))
    /     \  `\-(((((((((((\\
    |    | `\   ) |\       /|)
     |    |  `. _/  \_____/ |
      |    , `\~            /
       |    \  \           /
      | `.   `\|          /
      |   ~-   `\        /
       \____~._/~ -_,   (\
        |-----|\   \    ';;
       |      | :;;;'     \
      |  /    |            |
      |       |            |
 ___________
< kitty.cow >
 -----------
     \
      \
       ("`-'  '-/") .___..--' ' "`-._
         ` *_ *  )    `-.   (      ) .`-.__. `)
         (_Y_.) ' ._   )   `._` ;  `` -. .-'
      _.. `--'_..-_/   /--' _ .' ,4
   ( i l ),-''  ( l i),'  ( ( ! .-'
 ___________
< koala.cow >
 -----------
  \
   \
       ___  
     {~._.~}
      ( Y )
     ()~*~()
     (_)-(_)
 __________
< kosh.cow >
 ----------
    \
     \
      \
  ___       _____     ___
 /   \     /    /|   /   \
|     |   /    / |  |     |
|     |  /____/  |  |     |
|     |  |    |  |  |     |
|     |  | {} | /   |     |
|     |  |____|/    |     |
|     |    |==|     |     |
|      \___________/      |
|                         |
|                         |
 ________________
< luke-koala.cow >
 ----------------
  \
   \          .
       ___   //
     {~._.~}//
      ( Y )K/  
     ()~*~()
     (_)-(_)
     Luke
     Skywalker
     koala
 __________________
< mech-and-cow.cow >
 ------------------
                                   ,-----.
                                   |     |
                                ,--|     |-.
                         __,----|  |     | |
                       ,;::     |  `_____' |
                       `._______|    i^i   |
                                `----| |---'| .
                           ,-------._| |== ||//
                           |       |_|P`.  /'/
                           `-------' 'Y Y/'/'
                                     .== /_
   ^__^                             /   /'|  `i
   (oo)_______                   /'   /  |   |
   (__)       )/             /'    /   |   `i
       ||----w |           ___,;`----'.___L_,-'`__
       ||     ||          i_____;----.____i""____
 
 __________
< meow.cow >
 ----------
  \
   \ ,   _ ___.--'''`--''//-,-_--_.
      \`"' ` || \\ \ \\/ / // / ,-\\`,_
     /'`  \ \ || Y  | \|/ / // / - |__ `-,
    /@"\  ` \ `\ |  | ||/ // | \/  \  `-._`-,_.,
   /  _.-. `.-\,___/\ _/|_/_\_\/|_/ |     `-._._)
   `-'``/  /  |  // \__/\__  /  \__/ \
        `-'  /-\/  | -|   \__ \   |-' |
          __/\ / _/ \/ __,-'   ) ,' _|'
         (((__/(((_.' ((___..-'((__,'
 __________
< milk.cow >
 ----------
 \     ____________
  \    |__________|
      /           /\
     /           /  \
    /___________/___/|
    |          |     |
    |  ==\ /== |     |
    |   O   O  | \ \ |
    |     <    |  \ \|
   /|          |   \ \
  / |  \_____/ |   / /
 / /|          |  / /|
/||\|          | /||\/
    -------------|
        | |    | |
       <__/    \__>
 _____________
< moofasa.cow >
 -------------
       \    ____
        \  /    \
          | ^__^ |
          | (oo) |______
          | (__) |      )\/\
           \____/|----w |
                ||     ||
 
                 Moofasa
 ___________
< moose.cow >
 -----------
  \
   \   \_\_    _/_/
    \      \__/
           (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||
 _______________
< mutilated.cow >
 ---------------
       \   \_______
 v__v   \  \   O   )
 (oo)      ||----w |
 (__)      ||     ||  \/\
 
 __________________
< pony-smaller.cow >
 ------------------
     \      _^^
      \   _- oo\
          \----- \______
                \       )\
                ||-----|| \
                ||     ||
 __________
< pony.cow >
 ----------
       \          /\/\
        \         \/\/
         \        /   -\
          \     /  oo   -\
           \  /           \
             |    ---\    -\
             \--/     \     \
                       |      -\
                        \       -\         -------------\    /-\
                         \        \-------/              ---/    \
                          \                                  |\   \
                           |                                 / |  |
                           \                                |  \  |
                            |                              /    \ |
                            |                             /     \ |
                             \                             \     \|
                              -              /--------\    |      o
                               \+   +---------          \   |
                                |   |                   |   \
                                |   |                    \   |
                                |   |                    |   \
                                |   |                     \   |
                                 \  |                     |   |
                                 |  |                      \  \
                                 |  |                      |   |
                                 +--+                       ---+
 _________
< ren.cow >
 ---------
   \
    \
    ____  
   /# /_\_
  |  |/o\o\
  |  \\_/_/
 / |_   |  
|  ||\_ ~|
|  ||| \/  
|  |||_
 \//  |
  ||  |
  ||_  \
  \_|  o|  
  /\___/
 /  ||||__
    (___)_)
 ___________
< sheep.cow >
 -----------
  \
   \
       __
      UooU\.'@@@@@@`.
      \__/(@@@@@@@@@@)
           (@@@@@@@@)
           `YY~~~~YY'
            ||    ||
 ______________
< skeleton.cow >
 --------------
          \      (__)
           \     /oo|  
            \   (_"_)*+++++++++*
                   //I#\\\\\\\\I\
                   I[I|I|||||I I `
                   I`I'///'' I I
                   I I       I I
                   ~ ~       ~ ~
                     Scowleton
 _____________
< snowman.cow >
 -------------
   \
 ___###
   /oo\ |||
   \  / \|/
   /""\  I
()|    |(I)
   \  /  I
  /""""\ I
 |      |I
 |      |I
  \____/ I
 _____________________
< sodomized-sheep.cow >
 ---------------------
  \                 __
   \               (oo)
    \              (  )
     \             /--\
       __         / \  \
      UooU\.'@@@@@@`.\  )
      \__/(@@@@@@@@@@) /
           (@@@@@@@@)((
           `YY~~~~YY' \\
            ||    ||   >>
 _________________
< stegosaurus.cow >
 -----------------
\                             .       .
 \                           / `.   .' "
  \                  .---.  <    > <    >  .---.
   \                 |    \  \ - ~ ~ - /  /    |
         _____          ..-~             ~-..-~
        |     |   \~~~\.'                    `./~~~/
       ---------   \__/                        \__/
      .'  O    \     /               /       \  "
     (_____,    `._.'               |         }  \/~~~/
      `----.          /       }     |        /    \__/
            `-.      |       /      |       /      `. ,~~|
                ~-.__|      /_ - ~ ^|      /- _      `..-'
                     |     /        |     /     ~-.     `-. _  _  _
                     |_____|        |_____|         ~ - . _ _ _ _ _>
 ____________
< stimpy.cow >
 ------------
  \     .    _  .
   \    |\_|/__/|
       / / \/ \  \  
      /__|O||O|__ \
     |/_ \_/\_/ _\ |  
     | | (____) | ||  
     \/\___/\__/  //
     (_/         ||
      |          ||
      |          ||\
       \        //_/  
        \______//
       __ || __||
      (____(____)
 __________
< suse.cow >
 ----------
  \
   \____
  /@    ~-.
  \/ __ .- |
   // //  @
 ________________
< three-eyes.cow >
 ----------------
        \  ^___^
         \ (ooo)\_______
           (___)\       )\/\
                ||----w |
                ||     ||
 ____________
< turkey.cow >
 ------------
  \                                  ,+*^^*+___+++_
   \                           ,*^^^^              )
    \                       _+*                     ^**+_
     \                    +^       _ _++*+_+++_,         )
              _+^^*+_    (     ,+*^ ^          \+_        )
             {       )  (    ,(    ,_+--+--,      ^)      ^\
            { (@)    } f   ,(  ,+-^ __*_*_  ^^\_   ^\       )
           {:;-/    (_+*-+^^^^^+*+*<_ _++_)_    )    )      /
          ( /  (    (        ,___    ^*+_+* )   <    <      \
           U _/     )    *--<  ) ^\-----++__)   )    )       )
            (      )  _(^)^^))  )  )\^^^^^))^*+/    /       /
          (      /  (_))_^)) )  )  ))^^^^^))^^^)__/     +^^
         (     ,/    (^))^))  )  ) ))^^^^^^^))^^)       _)
          *+__+*       (_))^)  ) ) ))^^^^^^))^^^^^)____*^
          \             \_)^)_)) ))^^^^^^^^^^))^^^^)
           (_             ^\__^^^^^^^^^^^^))^^^^^^^)
             ^\___            ^\__^^^^^^))^^^^^^^^)\\
                  ^^^^^\uuu/^^\uuu/^^^^\^\^\^\^\^\^\^\
                     ___) >____) >___   ^\_\_\_\_\_\_\)
                    ^^^//\\_^^//\\_^       ^(\_\_\_\)
                      ^^^ ^^ ^^^ ^
 ____________
< turtle.cow >
 ------------
    \                                  ___-------___
     \                             _-~~             ~~-_
      \                         _-~                    /~-_
             /^\__/^\         /~  \                   /    \
           /|  O|| O|        /      \_______________/        \
          | |___||__|      /       /                \          \
          |          \    /      /                    \          \
          |   (_______) /______/                        \_________ \
          |         / /         \                      /            \
           \         \^\\         \                  /               \     /
             \         ||           \______________/      _-_       //\__//
               \       ||------_-~~-_ ------------- \ --/~   ~\    || __/
                 ~-----||====/~     |==================|       |/~~~~~
                  (_(__/  ./     /                    \_\      \.
                         (_(___/                         \_____)_)
 _________
< tux.cow >
 ---------
   \
    \
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/
 
 _____________________
< unipony-smaller.cow >
 ---------------------
   \        \
    \        \
     \       _\^
      \    _- oo\
           \---- \______
                 \       )\
                ||-----||  \
                ||     ||
 _____________
< unipony.cow >
 -------------
   \             \
    \             \_
     \             \\
      \             \\/\
       \            _\\/
        \         /   -\
         \      /  oo   -\
          \   /           \
             |    ---\    -\
             \--/     \     \
                       |      -\
                        \       -\         -------------\    /-\
                         \        \-------/              ---/    \
                          \                                  |\   \
                           |                                 / |  |
                           \                                |  \  |
                            |                              /    \ |
                            |                             /     \ |
                             \                             \     \|
                              -              /--------\    |      o
                               \+   +---------          \   |
                                |   |                   |   \
                                |   |                    \   |
                                |   |                    |   \
                                |   |                     \   |
                                 \  |                     |   |
                                 |  |                      \  \
                                 |  |                      |   |
                                 +--+                       ---+
 _________________
< vader-koala.cow >
 -----------------
   \
    \        .
     .---.  //
    Y|o o|Y//
   /_(i=i)K/
   ~()~*~()~  
    (_)-(_)
 
     Darth
     Vader
     koala
 ___________
< vader.cow >
 -----------
        \    ,-^-.
         \   !oYo!
          \ /./=\.\______
               ##        )\/\
                ||-----w||
                ||      ||
 
               Cowth Vader
 _________
< www.cow >
 ---------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||--WWW |
                ||     ||

Homepage が webarchive だ!

% apt show cowsay
Package: cowsay
Version: 3.03+dfsg1-12
Installed-Size: 96.3 kB
Maintainer: Tony Maillefaud <maltouzes@gmail.com>
Depends: perl
Suggests: filters
Homepage: https://web.archive.org/web/20120527202447/http://www.nog.net/~tony/warez/cowsay.shtml
Tag: game::toys, implemented-in::perl, interface::commandline, role::program,
 use::entertaining, works-with::text
Section: games
Priority: optional
Download-Size: 20.1 kB
APT-Manual-Installed: yes
APT-Sources: http://ftp.jp.debian.org/debian/ stretch/main amd64 Packages
Description: configurable talking cow
 Cowsay (or cowthink) will turn text into happy ASCII cows, with
 speech (or thought) balloons. If you don't like cows, ASCII art is
 available to replace it with some other creatures (Tux, the BSD
 daemon, dragons, and a plethora of animals, from a turkey to
 an elephant in a snake).

追記)
xcowsay も存在するのですね.

20150910_07:09:15-23317

cowsay の COW をランダムに | matoken’s meme

Zsh の bindkey に嵌まる

20150910_02:09:18-8531
新しい kernel が降りてきたので再起動したのですが,Ctrl + a の行頭移動や,Ctrl + e の行末移動が使えず ^A^E と表示されるようになってしまいました.Ctrl + U など利用できるものもある.環境は以下のような感じです.

  • OS: Debian testing stretch amd64
  • Shell: zsh 5.0.8
  • byobu backend: screen
  • GNU Screen 4.03.01

GNU Screen を抜けると問題はありません.
最近 GNU Screen のアップデートがあった気がしたので,GNU Screen のせいかな?と思い以前野良ビルドした GNU Screen や Tmux で起動してみましたがこちらでも同じ現象が置きました.
% screen bash の様にして bash を起動すると問題ありません.
GNU Screen 起動後でも bindkey で以下のように設定すると動作します.

% bindkey "^A" beginning-of-line
% bindkey "^E" end-of-line

bindkey のリストを確認すると GNU Screen 起動前 120行,GNU Screen 起動後では 34行と大分少なくなってしまっています.

% echo $TERM
xterm
% bindkey -L | wc -l
120
% echo $TERM
screen-bce
% bindkey -L | wc -l
34

とりあえず GNU Screen 起動前に ~/.zshrcprecmd() の中に bindkey -L の結果を vim で :r!bindkey -L | sed -e 's/^/ /' な感じで貼ってひとまず反映させました.

case "${TERM}" in
screen*|ansi*)
        preexec()
        {
                echo -ne "\ek${1%% 2%% *}\e\\"
        }
        precmd()
        {
                echo -ne "\ek$(basename $SHELL) :::: waiting your command ... > (:3[___]\e\\"
                bindkey -R "^A"-"^C" self-insert
                bindkey "^D" list-choices
                  :
                  :
                  :
 
                  :
                bindkey -R "\M-^@"-"\M-^?" self-insert
        }
        ;;
esac

切り分けのために新しくユーザを作って chsh -s /bin/zsh してまっさらな状態から試すと ~/.zshrc を cp すると現象が起こりました.更に切り分けていくと .zshrc の中の export EDITOR=vim でした.
% EDITOR=vim screen で発症する.% EDITOR=emacs screen はok…….その他 vi NG / jed, nano は ok と vi/vim を指定すると起きるよう.

検索するとこんなページが見つかりました.

環境変数 EDITOR が vi/vim だと Zsh のキーバインドが vim モードになるということのようです.Esc -> 0 で行頭移動,Esc -> Shift+a で行末に.確かに vim モードのようです.ということで ~/.zshrc で emacs モードに設定することで解決しました.(上の方で設定した bindkey の設定は消しました)

export EDITOR=vim
bindkey -e

腑に落ちないのは GNU Screen / Tmux 起動時には起こるけど普通の Zsh 起動時は起きないところ…….

awesome wm のミュートスクリプト改善(ヘッドホン&beep 対応等)

の続きです.このシリーズは興味ある人ほとんど居ない気もしてますが…….

ボリュームコントロール用の script を書いていい感じでボリュームコントロールが使えている気がしていたのですが,いくつか不具合が見つかったので改良しました.

問題1.ヘッドホン利用時にアンミュートされない

ミュート時に Master をミュートして,同様にアンミュート時に Master をアンミュートするのですが,ヘッドホン利用時にはヘッドホンがミュートされたままになってしまいます.

amixer -c 0 get Headphone とかして確認すると,off のままです.

% amixer -c 0 get Headphone 
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 74
  Mono:
  Front Left: Playback 74 [100%] [0.00dB] [off]
  Front Right: Playback 74 [100%] [0.00dB] [off]

Headphone に対して unmute すると音が出るようになりました.

ということでアンミュート時に Master だけでなく Headphone / Speaker もアンミュートするようにしました.Headphone / Speaker は両方 on にしても排他利用になるようで両方 on にしても問題ないようです.

  • amixer -q -c 0 set Master unmute
  • amixer -q -c 0 set Master unmute
    amixer -q -c 0 set Speaker unmute
    amixer -q -c 0 set Headphone unmute

これでヘッドホンやスピーカーを切り替えてもちゃんと切り替わるようになりました.

問題2.BEEP がミュートされない

Master や Beep を mute しても beep音が出てしまいます.amixer でボリュームを 0% にしても音が出てしまいます.

% amixer -c 0 get Beep
Simple mixer control 'Beep',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 7
  Mono: Playback 4 [57%] [-12.00dB] [off]

ALSA ではなく基本の? xset で有効,無効にしたら効いたのでこれを設定しました.

  • beep ミュート
    xset -b
  • beep アンミュート
    xset b

問題3.音量ボタンを押した時のメッセージでミュート・アンミュート状態がわからない

ボリュームUp / Down ボタンを押した時のメッセージがミュート状態にかかわらず同じものを表示していたので音量が小さくて聞こえないのかミュート状態だから音が出ていないのかわかりませんでした.

ミュート状態によりアイコンを変更するようにしました.ついでに Up/Down の矢印も表示するようにしました.

  • これまでは1パターン
    20150903_03:09:24-10606

  • ミュート状態でアイコンの変更&矢印を表示するようにした
    20150909_21:09:58-1293720150909_21:09:41-13553
    20150909_21:09:37-1439820150909_21:09:50-14607

出来上がった script

ということでそれぞれを反映してこんな感じになりました.

#!/bin/bash 
 
MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
 
if [ $MUTE = "on" ] ; then
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg"
else
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg"
fi
 
case "$1" in
  "XF86AudioMute" ) 
    if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      xset -b
      echo -e "🔊☓\nmute!"
      notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg' mute ""
    else
      amixer -q -c 0 set Master unmute
      amixer -q -c 0 set Speaker unmute
      amixer -q -c 0 set Headphone unmute
      xset b
      echo -e "🔊\nunmute!"
      amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
    fi
  ;;
  "XF86AudioRaiseVolume" ) 
    amixer -c 0 set Master 2dB+ | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤴"
  ;;
  "XF86AudioLowerVolume" ) 
    amixer -c 0 set Master 2dB- | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤵"
  ;;
esac

今のところ満足 :-)

awesome wm のミュートスクリプト改善(ヘッドホン&beep 対応等)

の続きです.このシリーズは興味ある人ほとんど居ない気もしてますが…….

ボリュームコントロール用の script を書いていい感じでボリュームコントロールが使えている気がしていたのですが,いくつか不具合が見つかったので改良しました.

問題1.ヘッドホン利用時にアンミュートされない

ミュート時に Master をミュートして,同様にアンミュート時に Master をアンミュートするのですが,ヘッドホン利用時にはヘッドホンがミュートされたままになってしまいます.

amixer -c 0 get Headphone とかして確認すると,off のままです.

% amixer -c 0 get Headphone 
Simple mixer control 'Headphone',0
  Capabilities: pvolume pswitch
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 74
  Mono:
  Front Left: Playback 74 [100%] [0.00dB] [off]
  Front Right: Playback 74 [100%] [0.00dB] [off]

Headphone に対して unmute すると音が出るようになりました.

ということでアンミュート時に Master だけでなく Headphone / Speaker もアンミュートするようにしました.Headphone / Speaker は両方 on にしても排他利用になるようで両方 on にしても問題ないようです.

  • amixer -q -c 0 set Master unmute
  • amixer -q -c 0 set Master unmute
    amixer -q -c 0 set Speaker unmute
    amixer -q -c 0 set Headphone unmute

これでヘッドホンやスピーカーを切り替えてもちゃんと切り替わるようになりました.

問題2.BEEP がミュートされない

Master や Beep を mute しても beep音が出てしまいます.amixer でボリュームを 0% にしても音が出てしまいます.

% amixer -c 0 get Beep
Simple mixer control 'Beep',0
  Capabilities: pvolume pvolume-joined pswitch pswitch-joined
  Playback channels: Mono
  Limits: Playback 0 - 7
  Mono: Playback 4 [57%] [-12.00dB] [off]

ALSA ではなく基本の? xset で有効,無効にしたら効いたのでこれを設定しました.

  • beep ミュート
    xset -b
  • beep アンミュート
    xset b

問題3.音量ボタンを押した時のメッセージでミュート・アンミュート状態がわからない

ボリュームUp / Down ボタンを押した時のメッセージがミュート状態にかかわらず同じものを表示していたので音量が小さくて聞こえないのかミュート状態だから音が出ていないのかわかりませんでした.

ミュート状態によりアイコンを変更するようにしました.ついでに Up/Down の矢印も表示するようにしました.

  • これまでは1パターン
    20150903_03:09:24-10606

  • ミュート状態でアイコンの変更&矢印を表示するようにした
    20150909_21:09:58-1293720150909_21:09:41-13553
    20150909_21:09:37-1439820150909_21:09:50-14607

出来上がった script

ということでそれぞれを反映してこんな感じになりました.

#!/bin/bash 
 
MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
 
if [ $MUTE = "on" ] ; then
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg"
else
  ICON="/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg"
fi
 
case "$1" in
  "XF86AudioMute" ) 
    if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      xset -b
      echo -e "🔊☓\nmute!"
      notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg' mute ""
    else
      amixer -q -c 0 set Master unmute
      amixer -q -c 0 set Speaker unmute
      amixer -q -c 0 set Headphone unmute
      xset b
      echo -e "🔊\nunmute!"
      amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
    fi
  ;;
  "XF86AudioRaiseVolume" ) 
    amixer -c 0 set Master 2dB+ | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤴"
  ;;
  "XF86AudioLowerVolume" ) 
    amixer -c 0 set Master 2dB- | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i $ICON "Vol ⤵"
  ;;
esac

今のところ満足 :-)

Awesome wm でボリュームコントロール

IMGP0223_変更済み

Gnome Shell や XFce4 などでは NotePC の音量コントロールボタンで音量のUp/Down 及びミュートが操作出来ましたが, Awesome ではそのままでは動作しないようです.ということで設定してみました.

(以下の時の設定では unmute がうまく行っていなかった & 解りやすく修正.)

キーコードを調べる

まずはボタンのキーコードを調べました.xev コマンドを実行しながら該当ボタンを押して調べます.手元のマシンでは以下のようになりました.

ThinkPad X201s のボリュームキー情報(xev で確認)

  • VolUp
    KeyRelease event, serial 33, synthetic NO, window 0x1800001,
      root 0x98, subw 0x0, time 74266491, (715,471), root:(717,492),
      state 0x0, keycode 123 (keysym 0x1008ff13, XF86AudioRaiseVolume), same_screen YES,
      XLookupString gives 0 bytes:
      XFilterEvent returns: False
  • VolDown
    KeyRelease event, serial 33, synthetic NO, window 0x1800001,
      root 0x98, subw 0x0, time 74268735, (715,471), root:(717,492),
      state 0x0, keycode 122 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
      XLookupString gives 0 bytes:
      XFilterEvent returns: False
  • ミュート
    KeyPress event, serial 30, synthetic NO, window 0x3e00001,
      root 0x98, subw 0x0, time 107269062, (0,480), root:(212,630),
      state 0x0, keycode 121 (keysym 0x1008ff12, XF86AudioMute), same_screen YES,
      XLookupString gives 0 bytes:
      XmbLookupString gives 0 bytes:
      XFilterEvent returns: False

ということでこうなりました.

  • ミュートボタン -> XF86AudioMute
  • 音量Upボタン -> XF86AudioRaiseVolume
  • 音量Downボタン -> XF86AudioLowerVolume

音量の操作コマンドを調べる

alsa の操作をコマンドで実行できる amixer で操作するサウンドカードなどを確認します.amixer でサウンドカードを確認して,amixer -c 0 などとしてサウンドカードの内訳を確認したり出来ます.-c 0 は0番目のカードという意味になります.2枚目のカードは,-c 1 というオプションで指定できます.

今回は sound card 0 の Master を操作します.以下のコマンドで情報の表示や操作ができます.

  • sound card 0 の Master の状態確認

    % amixer -c 0 get Master
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [off]
  • sound card 0 の Master を無音に

    % amixer -c 0 set Master mute  
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [off]
  • sound card 0 の Master の音を有効に

    % amixer -c 0 set Master unmute
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [on]

Master の unmute だけだとスピーカーがミュートになったままなのでスピーカーも unmute します.

  • sound card 0 の Speaker の音を有効に

    % amixer -c 0 set Speaker unmute
    Simple mixer control 'Speaker',0
    Capabilities: pvolume pswitch
    Playback channels: Front Left - Front Right
    Limits: Playback 0 - 74
    Mono:
    Front Left: Playback 74 [100%] [0.00dB] [on]
    Front Right: Playback 74 [100%] [0.00dB] [on]
  • sound card 0 の Master の音量を 2dB 上げる

    % amixer -c 0 set Master 2dB+
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 60 [81%] [-14.00dB] [off]
  • sound card 0 の Master の音量を 2dB 下げる

    % amixer -c 0 set Master 2dB-
    Simple mixer control 'Master',0
    Capabilities: pvolume pvolume-joined pswitch pswitch-joined
    Playback channels: Mono
    Limits: Playback 0 - 74
    Mono: Playback 58 [78%] [-16.00dB] [off]

Script にする

~/script/awesome-audio.bash という名前のscript にしました.引数にキーコードを渡して実行すると,ミュートボタンを押すとミュート状態ならミュートを解除,そうでないならミュートに,音量ボタンで 2dB ずつUp/Down するようになっています.
それだけだと状態がわかりにくかったので,notify-send コマンドでアイコンとメッセージを表示するようにしました.

メッセージの表示は awesome 的には naughty.notify で行うのが正しいと思うのですが,使い方がよく解らずorz
まあ notify-send なら awesome 以外の環境でも動くのでいいかなと.

#!/bin/bash 
 
case "$1" in
  "XF86AudioMute" )
    MUTE=`amixer -c 0 get Master|tail -1|cut -d '[' -f 4|sed s/\]//`
    if [ $MUTE = "on" ] ; then
      amixer -q -c 0 set Master mute
      echo -e "🔊☓\nmute!"
      notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-muted.svg' mute ""
    else
      amixer -q -c 0 set Master unmute
      amixer -q -c 0 set Speaker unmute
      echo -e "🔊\nunmute!"
      amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-high.svg' numute
    fi
  ;;
  "XF86AudioRaiseVolume" )
    amixer -c 0 set Master 2dB+ | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg' Vol
  ;;
  "XF86AudioLowerVolume" )
    amixer -c 0 set Master 2dB- | tail -1 | cut -d '[' -f 2 | sed s/\]// | xargs notify-send -u low -t 500 -i '/usr/share/icons/ContrastHigh/scalable/status/audio-volume-medium.svg' Vol
  ;;
esac
 
amixer -c 0 get Master | tail -1 | cut -d '[' -f 2 | sed s/\]//

以下のように実行して動作確認しておきます.

% ~/script/awesome-audio.bash XF86AudioMute
🔊☓
mute!
70%
% ~/script/awesome-audio.bash XF86AudioMute
🔊
unmute!
70%
% ~/script/awesome-audio.bash XF86AudioRaiseVolume
73%
% ~/script/awesome-audio.bash XF86AudioLowerVolume
70%

notify-send でデスクトップには以下のような通知が表示されます.

20150903_03:09:19-832020150903_03:09:04-964020150903_03:09:05-1036220150903_03:09:24-10606

awesome の設定を行う

音量コントロールボタンで script を呼ぶように awesome の設定ファイル ~/.config/awesome/rc.lua に以下の設定を追記します.追記場所は `-- Standard program の後ろ辺りでok です.

    -- Audio Controle 
    awful.key({         }, "XF86AudioMute"function () awful.util.spawn("/home/mk/script/awesome-audio.bash XF86AudioMute",false)       end),
    awful.key({         }, "XF86AudioRaiseVolume"function () awful.util.spawn("/home/mk/script/awesome-audio.bash XF86AudioRaiseVolume",falseend),
    awful.key({         }, "XF86AudioLowerVolume"function () awful.util.spawn("/home/mk/script/awesome-audio.bash XF86AudioLowerVolume",falseend),

ここまで設定できたら awesome を restart します.

>
メニュー -> awesome -> restart

音量コントロールボタンで操作ができるようになったら出来上がりです :)