keys.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package model
  2. import "charm.land/bubbles/v2/key"
  3. type KeyMap struct {
  4. Editor struct {
  5. AddFile key.Binding
  6. SendMessage key.Binding
  7. OpenEditor key.Binding
  8. Newline key.Binding
  9. AddImage key.Binding
  10. PasteImage key.Binding
  11. MentionFile key.Binding
  12. Commands key.Binding
  13. // Attachments key maps
  14. AttachmentDeleteMode key.Binding
  15. Escape key.Binding
  16. DeleteAllAttachments key.Binding
  17. // History navigation
  18. HistoryPrev key.Binding
  19. HistoryNext key.Binding
  20. }
  21. Chat struct {
  22. NewSession key.Binding
  23. AddAttachment key.Binding
  24. Cancel key.Binding
  25. Tab key.Binding
  26. Details key.Binding
  27. TogglePills key.Binding
  28. PillLeft key.Binding
  29. PillRight key.Binding
  30. Down key.Binding
  31. Up key.Binding
  32. UpDown key.Binding
  33. DownOneItem key.Binding
  34. UpOneItem key.Binding
  35. UpDownOneItem key.Binding
  36. PageDown key.Binding
  37. PageUp key.Binding
  38. HalfPageDown key.Binding
  39. HalfPageUp key.Binding
  40. Home key.Binding
  41. End key.Binding
  42. Copy key.Binding
  43. ClearHighlight key.Binding
  44. Expand key.Binding
  45. }
  46. Initialize struct {
  47. Yes,
  48. No,
  49. Enter,
  50. Switch key.Binding
  51. }
  52. // Global key maps
  53. Quit key.Binding
  54. Help key.Binding
  55. Commands key.Binding
  56. Models key.Binding
  57. Suspend key.Binding
  58. Sessions key.Binding
  59. Tab key.Binding
  60. }
  61. func DefaultKeyMap() KeyMap {
  62. km := KeyMap{
  63. Quit: key.NewBinding(
  64. key.WithKeys("ctrl+c"),
  65. key.WithHelp("ctrl+c", "quit"),
  66. ),
  67. Help: key.NewBinding(
  68. key.WithKeys("ctrl+g"),
  69. key.WithHelp("ctrl+g", "more"),
  70. ),
  71. Commands: key.NewBinding(
  72. key.WithKeys("ctrl+p"),
  73. key.WithHelp("ctrl+p", "commands"),
  74. ),
  75. Models: key.NewBinding(
  76. key.WithKeys("ctrl+m", "ctrl+l"),
  77. key.WithHelp("ctrl+l", "models"),
  78. ),
  79. Suspend: key.NewBinding(
  80. key.WithKeys("ctrl+z"),
  81. key.WithHelp("ctrl+z", "suspend"),
  82. ),
  83. Sessions: key.NewBinding(
  84. key.WithKeys("ctrl+s"),
  85. key.WithHelp("ctrl+s", "sessions"),
  86. ),
  87. Tab: key.NewBinding(
  88. key.WithKeys("tab"),
  89. key.WithHelp("tab", "change focus"),
  90. ),
  91. }
  92. km.Editor.AddFile = key.NewBinding(
  93. key.WithKeys("/"),
  94. key.WithHelp("/", "add file"),
  95. )
  96. km.Editor.SendMessage = key.NewBinding(
  97. key.WithKeys("enter"),
  98. key.WithHelp("enter", "send"),
  99. )
  100. km.Editor.OpenEditor = key.NewBinding(
  101. key.WithKeys("ctrl+o"),
  102. key.WithHelp("ctrl+o", "open editor"),
  103. )
  104. km.Editor.Newline = key.NewBinding(
  105. key.WithKeys("shift+enter", "ctrl+j"),
  106. // "ctrl+j" is a common keybinding for newline in many editors. If
  107. // the terminal supports "shift+enter", we substitute the help tex
  108. // to reflect that.
  109. key.WithHelp("ctrl+j", "newline"),
  110. )
  111. km.Editor.AddImage = key.NewBinding(
  112. key.WithKeys("ctrl+f"),
  113. key.WithHelp("ctrl+f", "add image"),
  114. )
  115. km.Editor.PasteImage = key.NewBinding(
  116. key.WithKeys("ctrl+v"),
  117. key.WithHelp("ctrl+v", "paste image from clipboard"),
  118. )
  119. km.Editor.MentionFile = key.NewBinding(
  120. key.WithKeys("@"),
  121. key.WithHelp("@", "mention file"),
  122. )
  123. km.Editor.Commands = key.NewBinding(
  124. key.WithKeys("/"),
  125. key.WithHelp("/", "commands"),
  126. )
  127. km.Editor.AttachmentDeleteMode = key.NewBinding(
  128. key.WithKeys("ctrl+r"),
  129. key.WithHelp("ctrl+r+{i}", "delete attachment at index i"),
  130. )
  131. km.Editor.Escape = key.NewBinding(
  132. key.WithKeys("esc", "alt+esc"),
  133. key.WithHelp("esc", "cancel delete mode"),
  134. )
  135. km.Editor.DeleteAllAttachments = key.NewBinding(
  136. key.WithKeys("r"),
  137. key.WithHelp("ctrl+r+r", "delete all attachments"),
  138. )
  139. km.Editor.HistoryPrev = key.NewBinding(
  140. key.WithKeys("up"),
  141. )
  142. km.Editor.HistoryNext = key.NewBinding(
  143. key.WithKeys("down"),
  144. )
  145. km.Chat.NewSession = key.NewBinding(
  146. key.WithKeys("ctrl+n"),
  147. key.WithHelp("ctrl+n", "new session"),
  148. )
  149. km.Chat.AddAttachment = key.NewBinding(
  150. key.WithKeys("ctrl+f"),
  151. key.WithHelp("ctrl+f", "add attachment"),
  152. )
  153. km.Chat.Cancel = key.NewBinding(
  154. key.WithKeys("esc", "alt+esc"),
  155. key.WithHelp("esc", "cancel"),
  156. )
  157. km.Chat.Tab = key.NewBinding(
  158. key.WithKeys("tab"),
  159. key.WithHelp("tab", "change focus"),
  160. )
  161. km.Chat.Details = key.NewBinding(
  162. key.WithKeys("ctrl+d"),
  163. key.WithHelp("ctrl+d", "toggle details"),
  164. )
  165. km.Chat.TogglePills = key.NewBinding(
  166. key.WithKeys("ctrl+t", "ctrl+space"),
  167. key.WithHelp("ctrl+t", "toggle tasks"),
  168. )
  169. km.Chat.PillLeft = key.NewBinding(
  170. key.WithKeys("left"),
  171. key.WithHelp("←/→", "switch section"),
  172. )
  173. km.Chat.PillRight = key.NewBinding(
  174. key.WithKeys("right"),
  175. key.WithHelp("←/→", "switch section"),
  176. )
  177. km.Chat.Down = key.NewBinding(
  178. key.WithKeys("down", "ctrl+j", "j"),
  179. key.WithHelp("↓", "down"),
  180. )
  181. km.Chat.Up = key.NewBinding(
  182. key.WithKeys("up", "ctrl+k", "k"),
  183. key.WithHelp("↑", "up"),
  184. )
  185. km.Chat.UpDown = key.NewBinding(
  186. key.WithKeys("up", "down"),
  187. key.WithHelp("↑↓", "scroll"),
  188. )
  189. km.Chat.UpOneItem = key.NewBinding(
  190. key.WithKeys("shift+up", "K"),
  191. key.WithHelp("shift+↑", "up one item"),
  192. )
  193. km.Chat.DownOneItem = key.NewBinding(
  194. key.WithKeys("shift+down", "J"),
  195. key.WithHelp("shift+↓", "down one item"),
  196. )
  197. km.Chat.UpDownOneItem = key.NewBinding(
  198. key.WithKeys("shift+up", "shift+down"),
  199. key.WithHelp("shift+↑↓", "scroll one item"),
  200. )
  201. km.Chat.HalfPageDown = key.NewBinding(
  202. key.WithKeys("d"),
  203. key.WithHelp("d", "half page down"),
  204. )
  205. km.Chat.PageDown = key.NewBinding(
  206. key.WithKeys("pgdown", " ", "f"),
  207. key.WithHelp("f/pgdn", "page down"),
  208. )
  209. km.Chat.PageUp = key.NewBinding(
  210. key.WithKeys("pgup", "b"),
  211. key.WithHelp("b/pgup", "page up"),
  212. )
  213. km.Chat.HalfPageUp = key.NewBinding(
  214. key.WithKeys("u"),
  215. key.WithHelp("u", "half page up"),
  216. )
  217. km.Chat.Home = key.NewBinding(
  218. key.WithKeys("g", "home"),
  219. key.WithHelp("g", "home"),
  220. )
  221. km.Chat.End = key.NewBinding(
  222. key.WithKeys("G", "end"),
  223. key.WithHelp("G", "end"),
  224. )
  225. km.Chat.Copy = key.NewBinding(
  226. key.WithKeys("c", "y", "C", "Y"),
  227. key.WithHelp("c/y", "copy"),
  228. )
  229. km.Chat.ClearHighlight = key.NewBinding(
  230. key.WithKeys("esc", "alt+esc"),
  231. key.WithHelp("esc", "clear selection"),
  232. )
  233. km.Chat.Expand = key.NewBinding(
  234. key.WithKeys("space"),
  235. key.WithHelp("space", "expand/collapse"),
  236. )
  237. km.Initialize.Yes = key.NewBinding(
  238. key.WithKeys("y", "Y"),
  239. key.WithHelp("y", "yes"),
  240. )
  241. km.Initialize.No = key.NewBinding(
  242. key.WithKeys("n", "N", "esc", "alt+esc"),
  243. key.WithHelp("n", "no"),
  244. )
  245. km.Initialize.Switch = key.NewBinding(
  246. key.WithKeys("left", "right", "tab"),
  247. key.WithHelp("tab", "switch"),
  248. )
  249. km.Initialize.Enter = key.NewBinding(
  250. key.WithKeys("enter"),
  251. key.WithHelp("enter", "select"),
  252. )
  253. return km
  254. }