-
-
Notifications
You must be signed in to change notification settings - Fork 6.3k
[RDY] menu_get() / export menus #6322
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
0b23039
to
8c196cd
Compare
Removed the crash. |
fb97fde
to
869cea5
Compare
I use a function to test locally:
So far it generates:
It doesn't handle icons as neovim removed support for icons and it feels too much to have neovim handle icons IMO. if that's ok I can proceed to clean up & write the tests ? any advice as how to write the advice ? I believe I can compare a lua table against the expored json ?
|
If you get the map through a API function (e.g.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I will complete the tests when the form of the exported dict seems correct, maybe the mnemonic should be converted back to a chracter ?
runtime/doc/eval.txt
Outdated
@@ -5449,6 +5449,30 @@ max({list}) Return the maximum value of all items in {list}. | |||
be used as a Number this results in an error. | |||
An empty |List| results in zero. | |||
|
|||
menu_get({path}, {modes}) *dump_menu()* |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dump_menu => menu_get
runtime/doc/eval.txt
Outdated
ilent': 0, 'sid': 1, 'rhs': 'x'}, 'i': {'noremap': 1, 'enabled': 1, 'silent': 0, 'sid': 1, 'rhs': 'insert'}, | ||
'n': {'noremap': 1, 'enabled': 1, 'silent': 0, 'sid': 1, 'rhs': 'inormal'}}}], 'name': 'Test', 'priority': | ||
500, 'shortcut': 84} | ||
] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ZyX-l suggested to add an example, too bad we can't generate it from the code. is there any vim-prettify that I could use to properly format this part ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Heh. Sadly gqq
can't format Vim's own syntax. But I would:
J
oin it to one linejson_encode()
it::put =json_encode(<C-R>=getline('.')<CR>)
- Format it:
:setl formatprg=python\ -m\ json.tool gqq
(If it's just showing a generic map, doesn't matter if it's JSON or VimL, I suppose. Though in this case the JSON is valid VimL)
src/nvim/eval.lua
Outdated
@@ -85,6 +85,7 @@ return { | |||
exists={args=1}, | |||
exp={args=1, func="float_op_wrapper", data="&exp"}, | |||
expand={args={1, 3}}, | |||
menu_get={args={1, 2}}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Need to put in alphabetical order.
AFAIR it was not me who suggested to add an example. Actually documentation I write tends to be more “raw description” then something with examples. (I am not saying that this is how documentation should be written, only how I normally write it.) As for how you get the results: use |
Maybe I misunderstood; from vim/vim#1563:
whatever, the example is helpful anyway. I don't think adding API functions is helpful either. Without further comments, I consider the PR ready (functional tests pass locallly, hopes it passes here), icons & hints can be added later when UIs need it. |
@teto You are referring to vim/vim#1563 (comment)? This is comment from Bram, he is quoting me. |
7d0c93a
to
6d7f1df
Compare
440e8ba
to
670bebb
Compare
You can try :PaletteMenu to just have menu items, :Palette should mix both neovim/neovim#6322
I made a poc in this plugin (not optimized, still brittle but works locally) https://github.com/teto/nvim-palette. While waiting for #6288, I embed a copy https://github.com/teto/nvim-palette/tree/master/data in the plugin so the palette can load option descriptions. |
runtime/doc/eval.txt
Outdated
echo menu_get("") | ||
> | ||
should produce an output with a similar structure: | ||
< |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think these > ... <
pairs are reversed.
For instance, executing: >
nnoremenu &Test.Test inormal
inoremenu Test.Test insert
vnoremenu Test.Test x
echo menu_get("")
<
should produce an output with a similar structure: >
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The sample output could be abbreviated like this:
{
"hidden": 0,
"name": "Test",
"priority": 500,
"shortcut": 84,
"submenus": [
{
"hidden": 0,
"implementations": {
"i": {
"enabled": 1,
"noremap": 1,
"rhs": "insert",
"sid": 1,
"silent": 0
},
"n": { ... },
"s": { ... },
"v": { ... }
},
"name": "Test",
"priority": 500,
"shortcut": 0
}
]
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
several things were wrong with the doc ('>' pairs, spaces vs tabs, json format etc). I updated it and checked, I think it's fine now.
Instead of "implementations", "definitions" or "mappings" would be a more familiar name (if either of those makes sense in context). |
I don't see any reason to keep this waiting. Anyone else have comments? |
rebased, renamed "implementations" to "mappings". |
menu_get({path}, {modes}). See :h menu_get.
merged. nicely done! |
menu_get({path}, {modes}). See :h menu_get.
FEATURES: 0e873a3 Lua(Jit) built-in neovim#4411 5b32bce Windows: `:terminal` neovim#7007 7b0ceb3 UI/API: externalize cmdline neovim#7173 b67f58b UI/API: externalize wildmenu neovim#7454 b23aa1c UI: 'winhighlight' neovim#6597 17531ed UI: command-line coloring (`:help input()-highlight`) neovim#6364 244a1f9 API: execute lua directly from the remote api neovim#6704 45626de API: `get_keymap()` neovim#6236 db99982 API: `nvim_get_hl_by_name()`, `nvim_get_hl_by_id()` neovim#7082 dc68538 menu_get() function neovim#6322 9db42d4 :cquit : take an error code argument neovim#7336 9cc185d job-control: serverstart(): support ipv6 neovim#6680 1b7a9bf job-control: sockopen() neovim#6594 6efe84a clipboard: fallback to tmux clipboard neovim#6894 6016ac2 clipboard: customize clipboard with `g:clipboard` neovim#6030 3a86dd5 ruby: override ruby host via `g:ruby_host_prog` neovim#6841 16cce1a debug: $NVIM_LOG_FILE neovim#6827 0cba3da `:checkhealth` built-in, validates $VIMRUNTIME neovim#7399 FIXES: 105d680 TUI: more terminals, improve scroll/resize neovim#6816 cb912a3 :terminal : handle F1-F12, other keys neovim#7241 619838f inccommand: improve performance neovim#6949 04b3c32 inccommand: Fix matches for zero-width neovim#7487 60b1e8a inccommand: multiline, other fixes neovim#7315 f1f7f3b inccommand: Ignore leading modifiers in the command neovim#6967 1551f71 inccommand: fix 'gdefault' lockup neovim#7262 6338199 API: bufhl: support creating new groups neovim#7414 541dde3 API: allow K_EVENT during operator-pending 8c732f7 terminal: adjust for 'number' neovim#7440 5bec946 UI: preserve wildmenu during jobs/events neovim#7110 c349083 UI: disable 'lazyredraw' during ui_refresh. neovim#6259 51808a2 send FocusGained/FocusLost event instead of pseudokey neovim#7221 133f8bc shada: preserve unnamed register on restart neovim#4700 1b70a1d shada: avoid assertion on corrupt shada file neovim#6958 9f534f3 mksession: Restore tab-local working directory neovim#6859 de1084f fix buf_write() crash neovim#7140 7f76986 syntax: register 'Normal' highlight group neovim#6973 6e7a8c3 RPC: close channel if stream was closed neovim#7081 85f3084 clipboard: disallow recursion; show hint only once neovim#7203 8d1ccb6 clipboard: performance, avoid weird edge-cases neovim#7193 01487d4 'titleold' neovim#7358 01e53a5 Windows: better path-handling, separator (slash) hygiene neovim#7349 0f2873c Windows: multibyte startup arguments neovim#7060 CHANGES: 9ff0cc7 :terminal : start in normal-mode neovim#6808 032b088 lower priority of 'cursorcolumn', 'colorcolumn' neovim#7364 2a3bcd1 RPC: Don't delay notifications when request is pending neovim#6544 023f67c :terminal : Do not change 'number', 'relativenumber' neovim#6796 1ef2d76 socket.c: Disable Nagle's algorithm on TCP sockets neovim#6915 6720fe2 help: `K` tries Vim help instead of manpage neovim#3104 7068370 help, man.vim: change "outline" map to `gO` neovim#7405
adds export_menu that saves menus to a dict.
let l = export_menus("")
With json_encode, this allows UIs to retrieve the menus (likewise for plugins, eg, a certain "palette")
Crashes for now.