Skip to content

tadashi-aikawa/silhouette.nvim

Repository files navigation

Silhouette.nvim

Neovimでシンプルにタスクを管理するためのプラグインです。
目の前のタスクに集中することのみにフォーカスしています。

はじめに

Silhouette.nvimSilhouetteをNeovimプラグインとして移植を試みるプロジェクトです。プラグインの思想についてはSilhouetteのREADMEをご覧ください。

インストール

前提条件

Denoのインストールが必要です。

Neovimの設定

denops.vimに依存します。

lazy.nvimの場合は以下のような設定をします。

{
  "tadashi-aikawa/silhouette.nvim",
  ft = "markdown",
  dependencies = {
    "vim-denops/denops.vim",
  },
  keys = {
    { "<Space>sp", ":SilhouetteMoveToProgress<CR>", silent = true },
  },
  config = function()
    -- denops.nvimが起動し終わる前に実行されるとエラーになるためwaitを入れる
    -- マシンスペックや環境によって1000(ms)の値を調整する必要あり
    vim.defer_fn(function()
      require("silhouette").setup({
        -- デフォルト
        task = {
          repetition_tasks_path = "./repetition-tasks.md",
          holidays_path = "./holidays.md",
        },
        timer = {
          -- デフォルト
          time_storage_path = "./time-storage.json",
          -- デフォルト
          check_box_mark: {
            -- デフォルト
            recording: "~",
            -- デフォルトでは未指定
            -- stop: " ",
          },
        },
      })
    end, 1000)
  end,
}

利用前の準備

以下のファイルを作成してください。

ファイル ファイルパス(デフォルト)
繰り返しタスクファイル ./repetition-tasks.md
休日設定ファイル ./holidays.md

Tip

ファイルパスは設定で変更できます。

対応コマンド (Task系)

SilhouetteInsertTasks <date?>

本日のタスクを挿入

:SilhouetteInsertTasks

2024-08-20のタスクを挿入

:SilhouetteInsertTasks 2024-08-20

SilhouetteMoveToProgress

進行中タスク(- [~])が最初に出現する行に移動します。

SilhouetteShowTaskDates <daysAhead>

繰り返しタスクファイルでカーソル配下のタスクファイルの実行予定日を表示します。

90日後まで表示(default)

:SilhouetteShowTaskDates

1年後まで表示

:SilhouetteShowTaskDates 365

対応コマンド (Time系)

SilhouettePushTimer

カーソル配下のタスク状態に応じて、タスクの計測を開始/終了します。

:SilhouettePushTimer

[!INFO] 詳細は Silhouette: Push timer を参照

SilhouetteForceStopRecording

強制的に現在計測中のタスク計測を停止します。

SilhouetteForceStopRecording

[!INFO] 詳細は Silhouette: Force stop recording を参照

FAQ

SilhouettePushTimer で計測開始したときのタスクのマークを変えたくない

configの timer.check_box_mark.recording を指定しないようにしてください。

SilhouettePushTimer で計測終了したときにタスクのマークを変えたい

configの timer.check_box_mark.stop に任意のマークを設定してください。( - x など)

markdown-toggle.nvim でタスクを完了(マークをxに)したときだけ計測終了したい

markdown-toggle.nvim のキーバインドでtoggle後に特定条件下のときだけ SilhouettePushTimer を実行するようにします。コメントが書かれている箇所がポイント。

{
  "roodolv/markdown-toggle.nvim",
  config = function()
    require("markdown-toggle").setup({
      cycle_box_table = true,
      box_table = { "x" },
      list_before_box = true,
    })

    vim.api.nvim_create_autocmd("FileType", {
      desc = "markdown-toggle.nvim keymaps",
      pattern = { "markdown", "markdown.mdx" },
      callback = function(args)
        local opts = { silent = true, noremap = true, buffer = args.buf }
        local toggle = require("markdown-toggle")

        vim.keymap.set({ "n", "v" }, "<F12>", function()
          toggle.checkbox()

          -- 現在行を取得し
          local cline = vim.api.nvim_get_current_line()
          -- 計測中かつ完了マークになっているときだけ
          if string.find(cline, "- %[x%] .+ ``") then
            -- SilhouettePushTimer を実行 -> 計測完了となる
            vim.cmd("SilhouettePushTimer")
          end
        end, opts)
      end,
    })
  end,
}

制限事項

Important

このプラグインはSilhouetteの機能全てを実装するわけではありません。移植中の機能もあれば移植しない機能もあります。

開発者向け

準備

以下でhooksの場所を変更する。

git config core.hooksPath hooks

リリース

Release Action を実行。