summaryrefslogtreecommitdiff
path: root/lua/telescope/config.lua
blob: 9b749edabf1ecbac8e43a8da1dda5703d3910422 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
-- Keep the values around between reloads
_TelescopeConfigurationValues = _TelescopeConfigurationValues or {}

local function first_non_null(...)
  local n = select('#', ...)
  for i = 1, n do
    local value = select(i, ...)

    if value ~= nil then
      return value
    end
  end
end

local sorters = require('telescope.sorters')

-- TODO: Add other major configuration points here.
-- selection_strategy

local config = {}

config.values = _TelescopeConfigurationValues
config.descriptions = {}

function config.set_defaults(defaults)
  defaults = defaults or {}

  local function get(name, default_val)
    return first_non_null(defaults[name], config.values[name], default_val)
  end

  local function set(name, default_val, description)
    -- TODO(doc): Once we have descriptions for all of these, then we can add this back in.
    -- assert(description, "Config values must always have a description")

    config.values[name] = get(name, default_val)
    if description then
      config.descriptions[name] = vim.trim(description)
    end
  end

  set("sorting_strategy", "descending", [[
    Determines the direction "better" results are sorted towards.

      Available options are:
      - "descending" (default)
      - "ascending"
  ]])

  set("selection_strategy", "reset", [[
    Determines how the cursor acts after each sort iteration.

      Available options are:
      - "reset" (default)
      - "follow"
      - "row"
  ]])

  set("scroll_strategy", "cycle", [[
    Determines what happens you try to scroll past view of the picker.

      Available options are:
      - "cycle" (default)
      - "limit"
  ]])

  set("layout_strategy", "horizontal")
  set("layout_defaults", {})

  set("width", 0.75)
  set("winblend", 0)
  set("prompt_position", "bottom")
  set("preview_cutoff", 120)

  set("results_height", 1)
  set("results_width", 0.8)

  set("prompt_prefix", ">")
  set("initial_mode", "insert")

  set("border", {})
  set("borderchars", { '─', '│', '─', '│', '╭', '╮', '╯', '╰'})

  set("get_status_text", function(self)
    local xx = (self.stats.processed or 0) - (self.stats.filtered or 0)
    local yy = self.stats.processed or 0
    if xx == 0 and yy == 0 then return "" end

    return string.format("%s / %s", xx, yy)
  end)

  -- Builtin configuration

  -- List that will be executed.
  --    Last argument will be the search term (passed in during execution)
  set("vimgrep_arguments",
      {'rg', '--color=never', '--no-heading', '--with-filename', '--line-number', '--column', '--smart-case'}
  )
  set("use_less", true)
  set("color_devicons", true)

  set("set_env", nil)

  -- TODO: Add motions to keybindings

  -- To disable a keymap, put [map] = false
  --        So, to not map "<C-n>", just put
  --
  --            ...,
  --            ["<C-n>"] = false,
  --            ...,
  --
  --        Into your config.
  --
  -- Otherwise, just set the mapping to the function that you want it to be.
  --
  --            ...,
  --            ["<C-i>"] = actions.select_default
  --            ...,
  --
  set("mappings", {})
  set("default_mappings", nil)

  set("generic_sorter", sorters.get_generic_fuzzy_sorter)
  set("file_sorter", sorters.get_fuzzy_file)

  set("file_ignore_patterns", nil)

  set("file_previewer", function(...) return require('telescope.previewers').vim_buffer_cat.new(...) end)
  set("grep_previewer", function(...) return require('telescope.previewers').vim_buffer_vimgrep.new(...) end)
  set("qflist_previewer", function(...) return require('telescope.previewers').vim_buffer_qflist.new(...) end)
  set("buffer_previewer_maker", function(...) return require('telescope.previewers').buffer_previewer_maker(...) end)
end

function config.clear_defaults()
  for k, _ in pairs(config.values) do
    config.values[k] = nil
  end
end

config.set_defaults()


return config