Powerlevel10kを用いてmacのターミナルをいじってみた

はじめに

このページは琉球大学知能情報アドベントカレンダー Advent Calendar 2023の12月16日の記事です!

macのターミナルはデフォルトの見た目だとこのようになっていて、これはこれで落ち着くのですが、ちょっと物足りない気もします、、、

デフォルトのターミナル

そこで今回は下のようにターミナルの見た目をカッコよくしていきたいと思います。

改造したターミナル

環境

以下の環境を想定します。

  • macOS
  • zsh
  • ターミナル or iTerm2
    • iTerm2を推奨
    • macのターミナルだとコントラストを変更できないため、プロンプトの頭や尻尾の色が若干合わなくなります*1

Icebergの設定

Iceberg は、Vim および NeoVim 向けに、うまくデザインされた目に優しいダークブルーの配色です。 IcebergにはTerminal(iTerm2)版もあるのでそれを設定していきます。

Terminalの場合

公式ページの一番下にあるIceberg for macOSをダウンロードする。

ターミナルを起動し、上のメニューバーからターミナル>設定>プロファイルを開き、左下の◯の中に3つの点があるボタンを押して読み込むを選択します。 そして、先程ダウンロードした設定ファイルをインポートし、デフォルトのプロファイルに設定します。

ターミナルのプロファイル画面

iTerm2の場合

iTerm2用に移植されたこちらを使用します。 以下のコマンドを実行して設定ファイルをダウンロードします。

curl -O https://raw.githubusercontent.com/Arc0re/Iceberg-iTerm2/master/iceberg.itermcolors

iTerm2を起動し、メニューバーからiTerm2>Settings>Profiles>Colorsを開きます。 右下のColor Presetsのボタンを押して、importから先程ダウンロードしたファイルを指定します。

iTerm2のColorsの設定画面

Sheldonの導入

SheldonはRust製のプラグインマネージャーでzshBashに対応しています。

シェルのプラグインマネージャーにこだわりは無いのですが、README曰く高速とのことなので、今回はSheldonを使用していきます。 まず、homebrewでSheldonをインストールします。

brew install sheldon

次に、Sheldonの設定ファイルを生成します。下のコマンドを実行すると~/.config/sheldon/plugins.tomlが自動で生成されます。(~/.configフォルダがない場合は先に作っておいてください)

sheldon init --shell zsh

~/.zshrcに以下を追記します。

eval "$(sheldon source)"

Powerlevel10kのセットアップ

Powerlevel10kzshのテーマで、プロンプトをカスタマイズできます。

フォントの追加

通常のフォントだとアイコン等が文字化けしてしまうため、こちらの手順に従い専用フォントをターミナル(iTerm2)に適用してください。(Nerd Fontsだったらなんでもいいっぽい)

powerlevel10kのインストール

~/.config/sheldon/plugins.toml(Sheldonの設定ファイル)に以下を追記します。

[plugins.powerlevel10k]
github = "romkatv/powerlevel10k"

その後、以下のコマンドで~/.zshrcを読み込み、powerlevel10kをインストールします。

source ~/.zshrc

以下のようなウィザードが表示されるので、設定を行っていきましょう。

powerlevel10kのウィザード画面

  • オススメ設定
    • Prompt Style → (3) Rainbow.
      • プロンプトの背景色を変えたいなら必須
    • Prompt Height → (2) Two lines.
      • プロンプトが長い場合はコマンドがすぐに折り返すので、2行に分けた方がいい
    • Prompt Frame → (1) No frame. or (2) Left.
      • 右側にフレームがあるとコマンドと出力をコピペする際に面倒くさい
    • Prompt Spacing → (2) Sparse.
    • Enable Transient Prompt? → (n) No.
      • Yesを選ぶと現在のプロンプトだけが表示されるので、かっこよさという観点からするとNoを選んだほうが良い

色の変更

~/.p10k.zshを書き換えることで、プロンプトの色等を変更することができます。 使用できる色は0~255までの256種類あり、以下のコマンドで確認することができます。

for i in {0..255}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done

使用できる色を出力させるコマンド

以下は冒頭で紹介した改造したターミナルの図の設定例です。(ウィザードでPrompt Style → (3) Rainbow.以外を選択した場合、設定項目が~/.p10k.zshに存在していないことがあります)

  • git関連
    • 状態で色を変更できるようだったが、面倒くさかったので全て同じ色に設定した。
    • POWERLEVEL9K_VCS_CLEAN_BACKGROUND=3
    • POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3
    • POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=3
    • POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3
    • POWERLEVEL9K_VCS_LOADING_BACKGROUND=3
  • ディレクトリ関連
    • POWERLEVEL9K_DIR_BACKGROUND=37
    • POWERLEVEL9K_DIR_FOREGROUND=254
    • POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_last
    • POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=254
  • アイコン関連
    • POWERLEVEL9K_OS_ICON_FOREGROUND=254
    • POWERLEVEL9K_OS_ICON_BACKGROUND=240
  • condaの仮想環境の表示
    • POWERLEVEL9K_ANACONDA_FOREGROUND=254
    • POWERLEVEL9K_ANACONDA_BACKGROUND=37
  • 時間関連
    • POWERLEVEL9K_TIME_FOREGROUND=254
    • POWERLEVEL9K_TIME_BACKGROUND=240

注意するところ

テキストのコントラストを最小にする

テキストのコントラストが大きいと以下の図のように、プロンプトの頭や尻尾の部分だけ色が若干合いません。

コントラストを上げた場合

そのためコントラストを最小に設定します。しかし、はじめに述べた通りmacのターミナルだとこちらの設定ができません。このためiTerm2での環境構築を推奨しています。*2

iTerm2を起動し、メニューバーからiTerm2>Settings>Profiles>ColorsMinimum Contrastを0に設定してください。

画面を半透明にしない

Minimum Contrastを0に設定していたとしても、画面を半透明にすると以下の図のようにプロンプトの頭や尻尾の部分だけ色が若干合わなくなります。

画面を半透明にした場合

※こちらは調べたところ参考になりそうな情報がありませんでした。

※半透明にしながらプロンプトの色も変わらない方法を知っている方がいれば教えてください!

フォントサイズを変えてみる

フォントサイズによっては以下の図のようにプロンプトの形が崩れることがあります。*3 以下はフォントサイズが12の場合です。

プロンプトの形がずれる
これはフォントサイズを変更すると解消する場合があります。 私の環境ではフォントサイズを13に設定することで形が綺麗になりました。

参考にしたページ

知能情報へのコース変更についてまとめてみた

注意

この記事は私の体験と執筆時(2023年2月)に琉大教務情報HPから見れる資料をもとに作成したため情報が古くなる可能性があります。正確な情報が知りたい場合は、年次指導教員や工学部の事務室へ確認してください。

対象読者

  • 知能情報へのコース変更を考えている人

コース変更とは

琉球大学工学部では2年次から別のコースへ移動できる制度があります。

概要は「琉球大学 教務情報->学生便覧->工学部->コース配属の確定に関する申し合わせ」 から確認できます。

以下のリンクは 令和4年度のものです。

知能情報コースへの変更

コース変更の中でも知能情報コースへの変更は、そこそこ難易度が高いと思われます。

理由としては以下の2つが挙げられます。

  • 移動希望者が多い
  • 評価項目が多い

 1年前期の「キャリアデザイン入門」の最後でコース配属アンケートをやると思います。私の年では、他コースへの移動希望者が各5名前後なのに対し、知能情報コースへの変更を希望する学生は約40名ほどいました。

 また、他コースへの移動では評価項目が3~4つなのに対し、知能情報コースは5つありました。

評価方法

知能情報コースの評価項目は以下の5点です。

(※これらは私がコース変更したときの話なので変更される可能性があります)

  • GTEC
  • EMaT
  • GPA
  • 志望理由書
  • 面接

各項目について少しだけ説明します。

GTEC

GTECとはベネッセが行っている英語の4技能テストです。

www.benesse.co.jp

琉大では「大学英語」履修者の統一試験としてGTECが行われています。

今年度は8月10日に開催されたようです。

(カレンダーでは「英語全学統一テスト 」と書かれています。)

www.u-ryukyu.ac.jp

私のときは、GTECを使わず「大学英語」の成績を用いました。

 

EMaT

EMaTとは工学系数学統一試験のことです。私のときはEMaTか「工業数学1」の成績のどちらかを使うことができました。

www.aemat.jp

 

GPA

GPAとは成績評価を数値にしたものです。以下のURLから琉球大学のGPA算出方法が確認できます。

https://rais.skr.u-ryukyu.ac.jp/wordpress/wp-content/uploads/2022/03/R4GPA.pdf

0.0~4.0の間で、高ければ高いほど有利です。

志望理由書

志望理由書は「コース配属の確定に関する申合せ」の3ページ目です。

面接

面接は2月の中旬に行われました。

一番配点が高いです。

 

面接について

おそらく、コース変更の一番の難関は面接だと思います。

複数の教授に囲まれて質問攻めに合いました。

私が面接において重要だと感じているのは以下の2点です。

  • 志望理由をはっきりさせておく
  • 面接で話すネタを作っておく

 

志望理由をはっきりさせておく

志望理由書を作る段階から色々突っ込まれても大丈夫なように整理しておきましょう。

「プログラミングを学びたいからです!」みたいな理由だと少し弱いと思います。(みんな思いつく)

面接で話すネタを作っておく

私のときは、「プログラミングしたことはあるか?」「なにか作った経験はあるか?」などの質問がきたので、そういった質問に答えられるように話題作りをしておきましょう。

 

プログラムを組んでなにかを作るみたいな経験をしてたほうがいいかも(小さいものでも話のネタになる)

 

スケジュール

年によって結構変わると思うので、年次指導教員や工学部の事務室に確認してください。GTECやEMaTの日時は学年暦や各HPで予め確認しておくことをおすすめします。(直前で知っても対策できないから)

 

コツ

  • お知らせ(メール等)をちゃんと確認する
  • アンケートの人数にびびらない(実際に面接に来る人は少ない)
  • 面接で話すネタを作っておく

 

この記事を書いた理由

  • コース変更の詳細が発表されるのが遅く(自分のときは1年後期に入ってから)、対策しづらいから。
  • 詳しい情報を得るためには、先輩に聞くしかなくコミュ力勝負になってしまうから。

まとめ

ということで知能情報へのコース変更についてまとめてみました!

私もコース変更して良かったと心から思っているので、コンピュータやプログラミングに興味がある人は一度検討してみてはいかがでしょうか。

 

また、何度も注意していますがこの記事は私の体験と執筆時(2023年2月)の琉大教務情報HPから見れる資料をもとに作成したため情報が古くなる可能性があります。正確な情報が知りたいのであれば、年次指導教員や工学部事務室などに聞いてみてください。

 

以上です。

 

ABC253振り返り

A問題

from statistics import median

lst = list(map(int, input().split()))
med = median(lst)

if med == lst[1]:
print("Yes")
else:
print("No")

 

与えられた3つの値から中央値を求める問題。median関数を使って解いた。

 

B問題

h, w = map(int, input().split())
arr = [["-"]*w for i in range(h)]
for i in range(h):
arr[i]=input()
count = 0
for i in range(h):
for retu in range(w):
if arr[i][retu] == "o" and count == 0:
x_a = retu
y_a = i
count += 1
elif arr[i][retu] == "o" and count == 1:
x_b = retu
y_b = i
break

x_kyori = abs(x_b - x_a)
y_kyori = abs(y_b - y_a)


print(x_kyori+y_kyori)
2つの"o"の距離を求める問題。
oが同じ行にある場合を考慮せずにエラーを出してしまった。

C問題

q = int(input())
arr = [ for i in range(q)]
s =
for i in range(q):
arr[i] = list(map(int, input().split()))

for i in range(q):
if arr[i][0] == 1:
s.append(arr[i][1])
elif arr[i][0] == 2:
equal_count = s.count(arr[i][1])
min_num = min(equal_count, arr[i][2])
for x in range(min_num):
s.remove(arr[i][1])
else:
print(max(s) - min(s))
上のコードで提出したがTLEがでてしまった。
解説を聞いてもわからなかったので、来週までに復習したい。

D問題

import math
n, a, b = map(int, input().split())

ans= (n * (n+1))//2

a_count = n//a
a_ans = (a_count * (a_count+1) * a)//2

b_count = n//b
b_ans = (b_count * (b_count+1) * b)//2


c = (a*b)//(math.gcd(a, b))
c_count = n//c
c_ans = (c_count * (c_count+1) * c)//2

print(math.floor(ans-a_ans-b_ans+c_ans))
本番ではCの途中で時間切れしたのでDは後日解いた。
少数を整数に直すときに int() , floor() を使うと上手く行かなかった。原因は不明。
下にWAの回答を載せておく。
import math
n, a, b = map(int, input().split())

ans=(1/2) * n * (n+1)

a_count = math.floor(n/a)
a_ans = (1/2) * a_count * (a_count+1) * a

b_count = math.floor(n/b)
b_ans = (1/2) * b_count * (b_count+1) * b


c = (a*b)/(math.gcd(a, b))
c_count = math.floor(n/c)
c_ans = (1/2) * c_count * (c_count+1) * c

print(math.floor(ans-a_ans-b_ans+c_ans))