Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

日報をすぐ書く技術 ver.2

NVIM_APPNAME を使えばかなり快適にいけるんじゃないか? と気付いたので書き直し。ver.1はこちら

この方針だと、日報を書くときにだけ使う設定が足せる。プラグインを入れたり、カラースキームを変更するのが簡単。

手順

  1. ディレクトリを作る (mkdir ~/.config/nvim-memo)
  2. 各ファイルのシンボリックリンクを作る (ln -sf ~/.config/nvim/lua ~/.config/nvim-memo/lua)
  3. init.lua を書く
  4. エイリアスを設定する (alias memo="NVIM_APPNAME=nvim-memo nvim")

init.lua はこんな感じ。先頭の方は通常時のinit.luaとだいたい同じ。後半に日報ファイルの生成処理とかが追加されている。

---@diagnostic disable-next-line: undefined-global
if vim.loader then vim.loader.enable() end

-- 通常のinit.luaと同様の設定を読み込み
require('options')
require('disable-providers')
require('keymappings')
require('install-lazynvim')
require('userautoload.indent')
require('userautoload.filetype')

require 'lazy'.setup('plugins', {
  change_detection = { notify = false },
})

-- ====================
-- ↓ 以下が日報用の設定

local function get_weekdays()
  local today = os.date('*t') -- 今日の日付を取得
  local month = today.month   -- 現在の月
  local year = today.year     -- 現在の年

  local res = {}
  for i = 1, 31 do
    local d = os.time({ year = year, month = month, day = i, hour = 0, min = 0, sec = 0 })
    local d_table = os.date('*t', d) -- 日付をテーブル形式に変換

    -- 月が変わった場合はループを終了
    if d_table.month ~= month then break end

    -- 週末の場合はスキップ
    if d_table.wday == 1 or d_table.wday == 7 then
      goto continue
    end

    -- 結果をフォーマットしてリストに追加
    table.insert(res, string.format('# %d/%d/%d(%s)',
      d_table.year, d_table.month, d_table.day,
      ({ '日', '月', '火', '水', '木', '金', '土' })[d_table.wday]))

    ::continue::
  end

  -- 結果を逆順に並べ替え
  local result = {}
  for i = #res, 1, -1 do
    table.insert(result, res[i])
  end

  return table.concat(result, '\n') -- 結果を結合して返す
end

local dir = os.getenv('HOME') .. os.date('/Documents/daily-report/%Y')
local filename = os.date('%m.md')
local filepath = dir .. '/' .. filename

-- 今月の日報ファイルが存在しなければ作成する
os.execute('mkdir -p ' .. dir)
local file = io.open(filepath, 'r')
if file then
  file:close()
else
  file = io.open(filepath, 'w')
  if file then
    file:write(get_weekdays())
    file:close()
  end
end

-- 日報ファイルを開く
vim.cmd('e ' .. dir .. '/' .. filename)

-- 今日の日付の行にnマークをつける
local date_table = os.date('*t')
vim.fn.search(string.format('%d/%d/%d(', date_table.year, date_table.month, date_table.day))
vim.cmd [[normal mn]]

-- 昨日の日付の行にyマークをつける
if vim.fn.search(string.format('%d/%d', date_table.year, date_table.month), 'W') ~= 0 then
  vim.cmd [[normal my]]
end

-- 今日の日付の位置にジャンプ
vim.cmd [[normal `n]]