ハイパーマッスルエンジニア

Vim、ShellScriptについてよく書く

goyo.vim, limelight.vimで"静かな"執筆環境を実現する

f:id:rasukarusan:20210126173611p:plain:w500

goyo.vim, limelight.vimで装飾のないVim

github.com github.com

ステータスバーなどが消え、今書いていることのみに集中できる

インストール

# goyo.vim
[[plugins]]
repo = 'junegunn/goyo.vim'

# limelight.vim
[[plugins]]
repo = 'junegunn/limelight.vim'

使い方

モードON

" ステータスバー、タブバー、SignColumnを非表示にするかつ、余白を出す
:Goyo

" 現在カーソル位置のみハイライトする
:Limelight

モードOFF

:Goyo!
:Limelight!

何が良いのか

たぶんGIF見ただけだとあまり良さがわからないかもしれないが、実際使ってみるととても心が落ち着く

コーディングしているときよりも、markdownでブログの記事を書くときに使うといい感じだった。

普段何気なくステータスバーなどを表示しているが、無意識に集中を削がれていたなと感じる。

どうせならデスクトップ全体もgoyoしたい

ここからはmacOS Catalina限定の話。

  • デスクトップ背景を黒に変更
  • デスクトップアイコンを非表示
  • Dock非表示
  • メニューバー非表示
  • iTermをど真ん中に、サイズをいい感じに変更

これらを実行するgoyoコマンドを作る

デスクトップまるごとgoyoモード

デスクトップ背景を黒に変更

#!/usr/bin/env bash

main() {
  local picture_path=$1
  osascript << EOS
  tell application "System Events"
      tell every desktop
          set picture to "$picture_path"
      end tell
  end tell
EOS
}
main "$@"

Macに最初から入っている黒の画像を指定することで背景を黒にする。

sh desktop_background.sh  "/System/Library/Desktop Pictures/Solid Colors/Black.png"

Dock非表示

#!/usr/bin/env bash

main() {
  osascript <<EOS
  tell application "System Events"
    tell dock preferences to set autohide to not autohide
  end tell
EOS
}
main
sh dock.sh

Command+Option+dでもDockの表示/非表示が可能

デスクトップアイコンを非表示

#!/usr/bin/env bash

if [ $1 -eq 1 ]; then
  defaults write com.apple.finder CreateDesktop -boolean true && killall Finder
else
  defaults write com.apple.finder CreateDesktop -boolean false && killall Finder
fi

0で非表示、1で表示

sh desktop_icon.sh 0

メニューバー非表示

#!/usr/bin/env bash

main() {
  local hide=$1
  osascript <<EOS >/dev/null
  tell application "System Preferences"
    activate
    reveal pane id "com.apple.preference.general"
  end tell

  delay 1

  tell application "System Events"
    tell window "一般" of process "System Preferences"
      set _checkBox to checkbox "メニューバーを自動的に表示/非表示"
      set isChecked to value of _checkBox as boolean
      if isChecked and $hide = 1 then
        click _checkBox
      else if not isChecked and $hide = 0 then
        click _checkBox
      end if
    end tell
  end tell

  quit application "System Preferences"
EOS

}
main $@

0で非表示、1で表示

sh menu_bar.sh 0

メニューバーの表示/非表示だけはGUIを操作して切り替えるしかなかった。

iTermをど真ん中に、サイズをいい感じに変更

#!/usr/bin/env bash

main() {
local app=$1
local startX=$2 startY=$3 endX=$4 endY=$5
osascript << EOF
tell application "$1"
  set bounds of front window to {$startX, $startY, $endX, $endY}
end tell
EOF
}
main $@
sh bounds.sh 'iTerm' 100 100 500 500

実際はもう一段上にスクリプトを噛ませて、sh iterm.sh window largeのようにしてサイズ・位置変更を実行している。

iTermの設定でタイトルバーを非表示にしておくとスッキリする

f:id:rasukarusan:20210126171611p:plain
iTermの設定でProfiles > Window > StyleでNo Title Barにする
設定後、iTermを再起動しないと反映されないので注意。

また、タイトルバーを非表示にすると、タイトルバーを掴んでiTermを移動ができなくなる。
移動するには画面の端を掴んで、カーソルが「↕」になったあとに動かせば移動することができる。リサイズにならないように動かすのが難しい。これはiTermだけではなくMacのアプリ共通。

カーソルが↕になってから動かすと移動できる。ちょっと難しい。

これらをまとめたgoyoコマンドをzshrcに書く

alias goyo='_goyo'
_goyo() {
  . ~/documents/github/mac-scripts/desktop_background "/System/Library/Desktop Pictures/Solid Colors/Black.png"
  . ~/documents/github/mac-scripts/menu_bar 0
  . ~/Documents/github/mac-scripts/dock
  . ~/Documents/github/mac-scripts/desktop_icon 0
  sh ~/Documents/github/iterm-scripts/iterm.sh window large
}

alias goyo!='_goyo!'
_goyo!() {
  . ~/Documents/github/mac-scripts/menu_bar 1
  . ~/Documents/github/mac-scripts/dock
  . ~/Documents/github/mac-scripts/desktop_icon 1
  sh ~/Documents/github/iterm-scripts/iterm.sh window small
}

スクリプト github.com github.com

終わり

余白を出して静けさを表現するgoyo.vim、現在カーソル位置のみをハイライトするlimelight.vim、どちらも発想が天才的だなと思った。
こういう発想ができるようになりたい。