LoginSignup
2
0

PowerShellのプロンプトに時計を表示する

Last updated at Posted at 2023-12-21

時計の絵文字について

コードポイント 絵文字
128336 🕐 1 0
128337 🕑 2 0
128338 🕒 3 0
128339 🕓 4 0
128340 🕔 5 0
128341 🕕 6 0
128342 🕖 7 0
128343 🕗 8 0
128344 🕘 9 0
128345 🕙 10 0
128346 🕚 11 0
128347 🕛 12 0
128348 🕜 1 30
128349 🕝 2 30
128350 🕞 3 30
128351 🕟 4 30
128352 🕠 5 30
128353 🕡 6 30
128354 🕢 7 30
128355 🕣 8 30
128356 🕤 9 30
128357 🕥 10 30
128358 🕦 11 30
128359 🕧 12 30

つまり文字コードを得るには?

  • 128335 + 時 % 12
    • 12時, 24時は0じゃなく12
  • 30分のときは + 12

関数を作る

function clockEmojiNow {
 $now = Get-Date
 clockEmoji $now.Hour $now.Minute
}

function clockEmoji($h, $m){
 $h = $h % 12
 $code = 128335
 $code += $h -ne 0 ? $h : 12
 $code += $m -lt 30 ? 0 : 12
 [char]::ConvertFromUtf32($code)
}
PS [C:\]> clockEmoji 5 55
🕠
PS [C:\]> clockEmojiNow
🕝
PS [C:\]> get-date

2023年12月22日 2:54:07

よさげ

プロンプトに追加

code $profileでPowerShellのbashrc的なものを開く。
ここにpromptって関数を作って文字列返せばプロンプトをカスタマイズできる。
さっきの関数も書き込んでプロンプトを作成。

function prompt(){
  "PS $(clockEmojiNow)[$((get-item $pwd).Name)]> "
}

こんな感じ

PS 🕝[C:\]>

おまけ: 時計を回す

function rotateClock {
  $delayMs = 100
  for ($i = 0; $i -lt 12; $i++) {
    Write-Host "`b`b$(clockEmoji $i)" -NoNewline
    Start-Sleep -Milliseconds $delayMs
    Write-Host "`b`b$(clockEmoji $i 30)" -NoNewline
    Start-Sleep -Milliseconds $delayMs
  }
  Write-Host "`b`b$(clockEmoji 0 0)"
}

上記関数を$profileに書き込んでrotateClockすれば時計が回る
30分刻みだから回ってる感じしないし月のほうが分かりやすい

function rotateMoon($delayMs = 100, $rotate = 3) {
  for ($i = 0; $i -lt 8 * $rotate; $i++) {
    $code = $i % 8 + 127761
    $char = [char]::ConvertFromUtf32($code)
    Write-Host "`b`b$char" -NoNewline
    Start-Sleep -Milliseconds $delayMs
  }
  Write-Host "`b`b🌑" -NoNewline
}

tips

  • Write-Hostで改行無くすには-NoNewline
  • powershellの文字のエスケープは\じゃなくバッククォートらしい
    • `bがバックスペース。前の文字を消去する
    • 絵文字なので二文字分を消す
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0