• タグ別アーカイブ: cygwin
  • cygwinのログインシェルをbashにする

    cygwin上のzshのプロンプトがおかしいのでカスタマイズしてみるの続きです。

    せっかくzshを入れたのは良いものの、このままではbashが起動してからzshを毎回起動しなければなりません。
    大概こういうときは、chshコマンドを使うのですが、どうやらcygwinには含まれないようです。

    /etc/passwdがない…!

    では直接/etc/passwdファイルを弄ろうとなる訳ですが、実はこのファイルが存在しないわけです。
    コマンドのファイルもない…詰んだ状態ですが、無ければ作りましょう。

    
    $ man mkpasswd
    
    

    としてマニュアルを読んでみると、

    
    Don't use this command to generate a local /etc/passwd file, unless you
    really need one. See the Cygwin User's Guide for more information.
    
    

    と、このコマンドを使うなと書かれていますね。
    しかし、See the Cygwin User’s Guideってことで見てみましたが、他の方法が見当たらない。
    ググってみると以下のページがヒットしました。

    Set Default Shell in Cygwin – Stack Overflow

    /etc/nsswitch.confを編集するのが良さそうです。

    
    $ vim /etc/nsswitch.conf
    
    db_shell: /bin/zsh
    
    

    このような感じで設定すれば、無事ログインシェルが変わります。


  • cygwin上のzshのプロンプトがおかしいのでカスタマイズしてみる

    zshを入れてみた

    cygwinの標準シェルはbashですが、zshを使おうと思ってzshを入れたは良いものの、bashのプロンプトをそのまま流用されてしまって変なことに。

    見事にエスケープ文字がそのまま出力されています…
    せっかくなのでzshのプロンプトをカスタマイズすることにします。

    カスタマイズと言っても…

    細かい設定は一旦置いといて、テーマで設定することにしてみます。

    $ man zshall
    

    と入力してマニュアルを表示してみると、

           promptinit
                  a prompt theme system for changing prompts easily, see the section `Prompt Themes'
    

    どうやらpromptinitと言うものがあるらしい。
    see the section Prompt Themesということなので、下の方の「PROMPT THEMES」を見ます。

    PROMPT THEMES
       Installation
           You should make sure all the functions from the Functions/Prompts directory of the source distribution are available; they all begin with the  string  `prompt_'  except
           for  the special function`promptinit'.  You also need the `colors' function from Functions/Misc.  All of these functions may already have been installed on your system;
           if not, you will need to find them and copy them.  The directory should appear as one of the elements of the fpath array (this should already be the case if  they  were
           installed),  and  at  least  the function promptinit should be autoloaded; it will autoload the rest.  Finally, to initialize the use of the system you need to call the
           promptinit function.  The following code in your .zshrc will arrange for this; assume the functions are stored in the directory ~/myfns:
    
                  fpath=(~/myfns $fpath)
                  autoload -U promptinit
                  promptinit
    
       Theme Selection
           Use the prompt command to select your preferred theme.  This command may be added to your .zshrc following the call to promptinit in order to start  zsh  with  a  theme
           already selected.
    
           prompt [ -c | -l ]
           prompt [ -p | -h ] [ theme ... ]
           prompt [ -s ] theme [ arg ... ]
                  Set  or  examine the prompt theme.  With no options and a theme argument, the theme with that name is set as the current theme.  The available themes are deter‐
                  mined at run time; use the -l option to see a list.  The special theme `random' selects at random one of the available themes and sets your prompt to that.
    
                  In some cases the theme may be modified by one or more arguments, which should be given after the theme name.  See the help for each theme  for  descriptions  of
                  these arguments.
    
                  Options are:
    
                  -c     Show the currently selected theme and its parameters, if any.
                  -l     List all available prompt themes.
                  -p     Preview the theme named by theme, or all themes if no theme is given.
                  -h     Show help for the theme named by theme, or for the prompt function if no theme is given.
                  -s     Set theme as the current theme and save state.
    

    ふむふむ。

    まずインストールが必要なようなので、promptinitを読み込ませましょう。
    一応.zshrcにも追記しておきます。

    $ autoload -U promptinit
    $ promptinit
    

    その後は取りあえず、-p でプレビュー表示して -s で保存すれば使えそうですね。
    では早速プレビューを表示してみます。

    カラフルなテーマがたくさん出てきました。
    この中からよさげなものを選択してみることにします。

    $ prompt -s bigfade red white grey white
    Set and save not yet implemented.  Please ensure your ~/.zshrc
    contains something similar to the following:
    
      autoload -Uz promptinit
      promptinit
      prompt bigfade red white grey white
    

    これでプロンプトのデザインが変わりました!
    言われたとおり、.zshrcも編集しておきましょう。


  • WeeChatで~(全角チルダ/波ダッシュ)を入力したい(iso-2022-jpなIRCサーバ環境)

    私はWeeChatを使ってIRCを使っています。
    このときに、「~」を入力するとLimeChat等の他のクライアントでは文字化けしてしまうという問題がありました。

    どうにかこれを改善したいと思って試行錯誤した結果、改善できたのでメモしておきます。

    環境

    • WeeChatを起動させているサーバ
      • CentOS7
        • WeeChat 1.4(但し0.x台の頃から変わらない事象です)
        • screen 4.01.00
      • Linuxの$LANGは、ja_JP.UTF-8
      • WeeChatで接続しているチャンネルの文字コードは、iso-2022-jp
      • /set charset.default.decode = “iso-2022-jp”
      • /set charset.default.encode = “iso-2022-jp”
    • WeeChatを表示させているクライアント
      • Windows7
      • cygwin
      • ssh接続でscreenを表示してその上のWeeChatを使用

    クライアントからWeeChatとLimeChat(Windows上で動作するIRCクライアント)を操作し、同じサーバ、同じチャンネルにJOINします。

    問題の事象

    WeeChat上で「~」を入力すると、LimeChatから見ると文字化けします。
    LimeChat上で「~」を入力しても、WeeChatでは文字化けしません。
    ですが、2つの波ダッシュは、WeeChat上では別の文字(波の向きが違う)で表示されます。

    • WeeChatで入力した「~」:wavedash_wee
    • LimeChatで入力した「~」をWeeChatで表示:wavedash_lime

    この事から、Windowsで使われる「~」がLinuxでは扱いが異なっているのではないかと想像できます。
    これについては参考ページが以下の様にいくつかあります。

    解決

    要はWeeChatから入力する「~」をwavedash_weeからwavedash_limeに変換してやればいいわけです。
    そのため、送信時にテキスト置換できるようなスクリプトがないかを調べたところ、「text_replace.py」というスクリプトがあったのでこれを使ってみました。

    以下はWeeChat上での操作です。

    
    /script install text_replace.py
    /set plugins.var.python.text_replace.replacement_pairs "~=~"
    
    

    plugins.var.python.text_replace.replacement_pairsには、=区切りで変換前と変換後のテキストを指定します。

    “~=~”の部分は実際には以下の様に指定します。

    • 左側:普通にWeeChatに入力した「~」
    • 右側:LimeChatで入力した「~」をWeeChatで表示したwavedash_limeをコピーアンドペースト
    • こんな感じ:”wavedash_wee=wavedash_lime

    これで、普通にWeeChatで入力したら文字化けする「~」を、LimeChatで見ても文字化けしない「~」に変換して送信することが出来るようになりました。