2018年10月11日木曜日

vimの配色を起動時刻ごとにランダムに変える

普段エディタで黒系の配色を使っていて、 晴れの日に外でコーディングすると画面が明るいせいで見にくくなったりする事があります。 で、設定を変える訳ですが、帰ってくるとまた黒配色に戻さないといけない。 最近のエディタはカラースキームが用意されているので切り替えは昔より簡単にはなっているのですが、 もっと簡単にできないかなあと思いました。

vimだとこの問題は簡単に対応できそうだったので、 少し問題を簡単にして、起動時刻で配色を変えられるスクリプトを書いてみました。 配色の設定を変える事自体も簡単になっています。 まず以下のコードを ~/bin/cvim などの実行しやすい環境に配置します。
#!/usr/bin/env python

import os, sys, datetime, argparse, subprocess, random

# config
light_500   = 'solarized,gruvbox,seoul256,hybrid,PaperColor'.split(',')
light_other = 'github,schellar,newspaper,kalisi,pencil,tender'.split(',')
dark_500   = 'solarized,gruvbox,molokai,onedark,jellybeans,hybrid,badwolf,seoul256,monokai,zenburn,iceberg,PaperColor,nord'.split(',')
dark_other = 'frictionless,wasabi256,tender,apprentice,alduin,kalisi,antares,nefertiti,moonshine'.split(',')
light = light_500 + light_other
dark = dark_500 + dark_other

filepath = os.environ['HOME'] + '/.vimrc.colorscheme'


parser = argparse.ArgumentParser(description='color changer for vim')
parser.add_argument('-d', '--dark',  action='store_true', help='use dark theme')
parser.add_argument('-l', '--light', action='store_true', help='use light theme')
(args, vim_args) = parser.parse_known_args()


background = colorscheme = None
hour = datetime.datetime.now().hour
if args.light == True:
    background = 'light'
    colorscheme = random.choice(light)
elif args.dark == True:
    background = 'dark'
    colorscheme = random.choice(dark)
elif hour < 7 or 17 < hour:
    background = 'dark'
    colorscheme = random.choice(dark)
else:
    background = 'light'
    colorscheme = random.choice(light)
with open(filepath, 'w') as f:
    f.write('set background=%s\n' % background)
    f.write('colorscheme %s' % colorscheme)

vim_args = ' '.join(vim_args)
subprocess.call('nvim %s' % vim_args, shell=True)

上記のコードではGithubで500以上のスターを貰っているカラースキームと、ここで紹介されているものを片っ端から登録してみました。今回はvimでこれらのカラースキームを事前に読み込んでおく事を想定しています。 この設定は面倒だと思うので、Shougo/dein.vimを使った設定例を表示しておくと以下になります。
"--- 500 fav
call dein#add('altercation/vim-colors-solarized')
call dein#add('morhetz/gruvbox')
call dein#add('tomasr/molokai')
call dein#add('joshdick/onedark.vim')
call dein#add('nanotech/jellybeans.vim')
call dein#add('w0ng/vim-hybrid')
call dein#add('sjl/badwolf')
call dein#add('junegunn/seoul256.vim')
call dein#add('sickill/vim-monokai')
call dein#add('jnurmine/Zenburn')
call dein#add('cocopon/iceberg.vim')
call dein#add('NLKNguyen/papercolor-theme')
call dein#add('arcticicestudio/nord-vim')
"--- dark & light
call dein#add('freeo/vim-kalisi')
"--- dark
call dein#add('0xcharly/vim-frictionless')
call dein#add('thomd/vim-wasabi-colorscheme')
call dein#add('AlessandroYorba/Alduin')
call dein#add('romainl/Apprentice')
call dein#add('jacoborus/tender.vim')
call dein#add('Haron-Prime/Antares')
call dein#add('jeetsukumaran/vim-nefertiti')
call dein#add('KKPMW/moonshine-vim')
"--- light
call dein#add('endel/vim-github-colorscheme')
call dein#add('igungor/schellar')
call dein#add('vim-scripts/newspaper.vim')
call dein#add('reedes/vim-colors-pencil')


さらに ~/.vimrc や ~/.config/nvim/init.vim で背景色とカラースキームを指定をしている箇所を以下のように書き換え、カラースキームの設定を別のファイルから読み込むようにします。
" 時刻で表示を変える
execute ':source ' . '~/.vimrc.colorscheme'

あとは以下のように普段vimを使う時と同様に実行すればカラフルなvimの出来上がり。 -l, -dオプションを付けると黒配色と白配色を明示したりもできる。
cvim foobar.txt
cvim -d dark.feel

今のところ夜中に実行すると黒配色、日中に実行すると白配色で表示します。 表示はカラースキームのリストの中からランダムに選びます。 照明や屋内外の判定を頑張れば面白いかもですが、そこまでのやる気はなかった。 起動する度に表示が変わり新鮮な気持ちでvimれるようになったので、これだけでも満足してます。

0 件のコメント: