📅

Karabiner-ElementsでYYYYMMDDを曜日を含めた日付に変換する

2024/11/03に公開

1. はじめに

前回,Karabiner-Elementsで今日の日付や現在時刻を挿入するという記事を書きました。

今回はそこに書いていてまだ実装していなかった「今日の日付や時刻以外にも,特定の接頭辞(例えば]D)の後に日付を表す文字列(YYYYMMDD)を入力し,範囲指定してコピーすると,任意の日付に対して曜日が入力された日付に変換されるという機能」を実装してみました。

2. 動作環境

私が使用している環境は以下の通りです。

  • MacBook Air M3 15インチ 2024
  • macOS Sequoia 15.0.1
  • Karabiner-Elements 15.2.1

3. 設定

3.1 シェルスクリプトの作成

$HOME/bin/insert_date.shというファイルを作成します。

接頭辞を付けることで,通常の数字のコピペと混同しなようにしています。上記の説明では接頭辞を]Dと書いていますが,ここでは]にしています。接頭辞を]Dにする場合は,PREFIX="]D"にします。

insert_date.sh
#!/bin/bash

PREFIX="]"
DATE_FORMAT="%Y%m%d"
export LC_ALL=ja_JP.UTF-8

result="$2"

if [[ "$2" == "$PREFIX"* ]]; then
    without_prefix="${2#$PREFIX}"
    if [[ "$without_prefix" =~ ^([0-9]{8})$ ]]; then
        date="$without_prefix"
        if date -j -f $DATE_FORMAT "$date" >/dev/null 2>&1; then
            result=$(date -j -f $DATE_FORMAT "$date" "+$1")
        fi
    fi
fi

if [ "$2" != "$result" ]; then
    echo -n "$result" | pbcopy
    pbpaste | osascript -e 'tell application "System Events" to keystroke "v" using {command down}'
fi

スクリプトに実行権限を設定しておきます。

chmod +x $HOME/bin/insert_date.sh

3.2 Karabiner-Elementsの設定

Karabiner-ElementsのComplex Modificationsで「Add your own rule」を押して以下を設定します。

{
    "description": "コピーされた]YYYYMMDDをYYYY年MM月DD日(曜日)に変換してペーストする",
    "manipulators": [
        {
            "from": {
                "key_code": "c",
                "modifiers": { "mandatory": ["left_command", "shift"] }
            },
            "to": [
                { "shell_command": "$HOME/bin/insert_date.sh \"%Y年%m月%d日(%a)\" \"$(pbpaste)\"" },
                {
                    "key_code": "c",
                    "modifiers": ["left_command"]
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "c",
                "modifiers": { "mandatory": ["left_command"] }
            },
            "to": [
                { "shell_command": "$HOME/bin/insert_date.sh \"%Y/%m/%d(%a)\" \"$(pbpaste)\"" },
                {
                    "key_code": "c",
                    "modifiers": ["left_command"]
                }
            ],
            "type": "basic"
        }
    ]
}

4. 挿入方法

日付を入力したいところに]YYYYMMDDを入力し,その文字列を範囲指定をしてクリップボードにコピーすると変換された日付がペーストされます。このとき,左⌘ + cでコピーをすると%Y/%m/%d(%a)左⌘ + Cでコピーをすると%Y年%m月%d日(%a)でペーストされます。

]20241103 -> 範囲指定して左⌘ + c -> 2024/11/03(日)
]20241103 -> 範囲指定して左⌘ + C -> 2024年11月03日(日)

Discussion