コードブロックにファイル名を表示
目次
Hugo の render hook を使用して、コードブロックにファイル名を表示するようにした。
目的
コードブロックにファイル名を表示するようにする。
方法
Hugo では、コードブロックの Markdown に言語に加えて、オプションを設定することができます。これをrender hookで取り込みファイル名として HTML に書き出します。
render hook
コードブロックを処理するlayouts/_default/_markup/render-codeblock.html
を作成します。コードブロックのオプションはAttributes.filename
として得られるので、その値を変数filename
に入れて使用します。
layouts/_default/_markup/render-codeblock.html
<div>
{{- $filename := .Attributes.filename -}} {{ with $filename }}
<div class="codeblock--filename">{{ . }}</div>
{{ end }}
<div class="codeblock--content">
{{- highlight (.Inner | safeHTML) .Type .Options }}
</div>
</div>
CSS
コードブロックとファイル名が重なるように CSS を整えます。カスタム CSS のファイル名は Hugo の Theme 毎に異なるため、使用している Theme に合わせます。
static/custom.css
.codeblock--content > div > pre {
margin-top: -26px;
padding-top: 40px;
padding-bottom: 12px;
}
.codeblock--filename {
display: inline-block;
position: relative;
padding: 2px 8px;
background-color: #e7e9eb;
color: #485a60;
font-size: 13px;
font-weight: 400;
}
使用方法
ファイル名は次のように記述すると
```bash {filename="sample.sh"}
echo test
```
次のように filename に指定したファイル名がコードブロックに表示されます。
sample.sh
echo test