変更前

もともと、どこかのネットでもらってきたこっちを使っていた

1
$ xdotool windowfocus `xdotool search --onlyvisible --name chrome`; xdotool key ctrl+F5; xdotool windowfocus `xdotool search --onlyvisible --class gnome-terminal`

でもこれだと、ターミナルを複数開いている場合に、xdotool searchでたまたま一番目にHitしたフォーカスに戻ってしまうので、元のターミナルに正しく戻れなかった

変更後

xdotool getactivewindowで、事前に現在のフォーカスを取得しておくように変更

1
CURRENT_SHELL=`xdotool getactivewindow`;xdotool windowfocus `xdotool search --onlyvisible --name chrome`; xdotool key ctrl+F5; xdotool windowfocus ${CURRENT_SHELL}

.vimrc

vimからはこんな感じで使ってる(ReloadChromeToggleでフラグを立てると、保存時に自動リロード)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
map <Leader>cr :call ReloadChrome()<CR><CR>
map <Leader>wr :w<CR>:call ReloadChrome()<CR><CR>
command! ReloadChrome :call ReloadChrome()
command! ReloadChromeToggle :call ReloadChromeToggle()

let g:chrome_reload = 0
autocmd BufWritePost * call ReloadChrome()

function! ReloadChrome()
if g:chrome_reload == 1
:silent exec "!CURRENT_SHELL=`xdotool getactivewindow`;xdotool windowfocus `xdotool search --onlyvisible --name chrome`; xdotool key ctrl+F5; xdotool windowfocus ${CURRENT_SHELL}"
endif
endfunction

function! ReloadChromeToggle()
if g:chrome_reload > 0
let g:chrome_reload = 0
echo "ReloadChrome OFF"
else
let g:chrome_reload = 1
echo "ReloadChrome ON"
endif
endfunction