Skip to content

Latest commit

 

History

History
278 lines (211 loc) · 7.12 KB

README.ja.md

File metadata and controls

278 lines (211 loc) · 7.12 KB

ライブラリとして使用する

目次

インストール

まず go get で最新バージョンをインストールしてください。

$ go get -u github.com/koki-develop/go-fzf

次に go-fzf を import してください。

import "github.com/koki-develop/go-fzf"

使い方

基本

まず fzf.New() で Fuzzy Finder を初期化します。

f, err := fzf.New()
if err != nil {
  // ...
}

次に Find() を実行すると Fuzzy Finder が起動します。
第一引数には検索対象のアイテムの slice を渡します。
第二引数には i 番目のアイテムのテキストを返す関数を渡します。

idxs, err := f.Find(items, func(i int) string { return items[i] })
if err != nil {
  // ...
}

Example

複数選択

fzf.WithLimit() を使用すると選択できるアイテムの数を設定できます。

f, err := fzf.New(fzf.WithLimit(4))
if err != nil {
  // ...
}

fzf.WithNoLimit() を使用するとアイテムを無制限に選択できるようになります。

f, err := fzf.New(fzf.WithNoLimit(true)) // no limit
if err != nil {
  // ...
}

Example

大文字 / 小文字を区別する

fzf.WithCaseSensitive() を使用するとあいまい検索で大文字/小文字を区別するようにできます。

f, err := fzf.New(fzf.WithCaseSensitive(true))
if err != nil {
  // ...
}

Example

キーマップ

fzf.WithKeyMap() を使用するとキーマップをカスタマイズできます。
カスタマイズできるキーマップは次の通りです。

  • Up - カーソルを上に移動する
  • Down - カーソルを下に移動する
  • Toggle - アイテムを選択もしくは選択解除する
  • Choose - 検索を完了する
  • Abort - 検索を中止する。
f, err := fzf.New(
  fzf.WithNoLimit(true),
  fzf.WithKeyMap(fzf.KeyMap{
    Up:     []string{"up", "ctrl+b"},   // ↑, Ctrl+b
    Down:   []string{"down", "ctrl+f"}, // ↓, Ctrl+f
    Toggle: []string{"tab"},            // tab
    Choose: []string{"enter"},          // Enter
    Abort:  []string{"esc"},            // esc
  }),
)
if err != nil {
  // ...
}

Example

ホットリロード

fzf.WithHotReload() を使用するとホットリロードを有効にできます。

var items []string
var mu sync.Mutex

go func() {
  i := 0
  for {
    time.Sleep(50 * time.Millisecond)
    mu.Lock()
    items = append(items, strconv.Itoa(i))
    mu.Unlock()
    i++
  }
}()

f, err := fzf.New(fzf.WithHotReload(&mu))
if err != nil {
  // ...
}

// NOTE: slice のポインタを渡す必要があることに注意してください。
idxs, err := f.Find(&items, func(i int) string { return items[i] })
if err != nil {
  // ...
}

Example

見た目をカスタマイズする

プロンプト

fzf.WithPrompt() を使用するとプロンプトの文字列を設定できます。

f, err := fzf.New(fzf.WithPrompt("=> "))
if err != nil {
  // ...
}

Example

カーソル

fzf.WithCursor() を使用するとカーソルの文字列を設定できます。

f, err := fzf.New(fzf.WithCursor("=> "))
if err != nil {
  // ...
}

Example

選択中 / 未選択アイテムの接頭辞

fzf.WithSelectedPrefix() を使用すると選択中アイテムの接頭辞を設定できます。
同じ様に fzf.WithUnselectedPrefix() を使用すると未選択アイテムの接頭辞を設定できます。

f, err := fzf.New(
  fzf.WithSelectedPrefix("[x] "),
  fzf.WithUnselectedPrefix("[ ] "),
)
if err != nil {
  // ...
}

Example

インプットの位置

fzf.WithInputPosition() を使用するとインプットの位置を設定できます。

f, err := fzf.New(
  fzf.WithInputPosition(fzf.InputPositionBottom),
)
if err != nil {
  // ...
}

Example

インプットのプレースホルダ

fzf.WithInputPlaceholder() を使用するとインプットのプレースホルダを設定できます。

f, err := fzf.New(fzf.WithInputPlaceholder("Search..."))
if err != nil {
  // ...
}

Example

カウントビュー

fzf.WithCountViewEnabled() を使用するとカウントビューの有効/無効を切り替えることができます ( デフォルトは有効 ) 。
fzf.WithCountView() を使用するとカウントビューをレンダリングする関数を設定することができます。
関数の引数にはカウントビューに必要な情報が含まれる fzf.CountViewMeta 構造体が渡されます。

f, err := fzf.New(
  fzf.WithNoLimit(true),
  fzf.WithCountViewEnabled(true),
  fzf.WithCountView(func(meta fzf.CountViewMeta) string {
    return fmt.Sprintf("items: %d, selected: %d", meta.ItemsCount, meta.SelectedCount)
  }),
)
if err != nil {
  // ...
}

Example

スタイル

fzf.WithStyles() を使用すると各コンポーネントのスタイルを設定することができます。
使用できるスタイルについてはリファレンスをご参照ください。

f, err := fzf.New(
  fzf.WithNoLimit(true),
  fzf.WithStyles(
    fzf.WithStylePrompt(fzf.Style{Faint: true}),                                       // プロンプト
    fzf.WithStyleInputPlaceholder(fzf.Style{Faint: true, ForegroundColor: "#ff0000"}), // インプットのプレースホルダ
    fzf.WithStyleInputText(fzf.Style{Italic: true}),                                   // インプットのテキスト
    fzf.WithStyleCursor(fzf.Style{Bold: true}),                                        // カーソル
    fzf.WithStyleCursorLine(fzf.Style{Bold: true}),                                    // カーソル行
    fzf.WithStyleMatches(fzf.Style{ForegroundColor: "#ff0000"}),                       // 一致文字
    fzf.WithStyleSelectedPrefix(fzf.Style{ForegroundColor: "#ff0000"}),                // 選択中アイテムの接頭辞
    fzf.WithStyleUnselectedPrefix(fzf.Style{Faint: true}),                             // 未選択のアイテムの接頭辞
  ),
)
if err != nil {
  // ...
}

Example