If you press an incomplete key sequence, previously WeeChat would send
the key_pressed signal again for the same keys on the next key.
E.g. if you press escape and then 1, previously you would get the
key_pressed signal with signal_data `\x01[` when you pressed escape, and
then key_pressed with `\x01[` again when you pressed 1 (plus key_pressed
with `1` for the 1 key). So two signals for the escape key, even though
it was only pressed once.
With this patch, you only get one signal for each key press. So one with
`\x01[` when you press escape and then one with `1` when you press 1.
Instead of replacing newline/tabs when paste is started, do it when the
paste is accepted instead. This makes a difference if you paste again
while the paste confirmation is active, where instead of running it
again for each paste, it will now be run for all the text at the end.
For now this doesn't make a practical difference, but the next commit
will remove the final newline when multiple lines are pasted too, which
we only want to do for the final paste.
This pointer is the first argument received by callbacks, and the
existing argument "data" is now automatically freed by WeeChat when the
object containing the callback is removed.
With this new pointer, the linked list of callbacks in scripts has been
removed. This will improve speed of scripts (using a lot of hooks),
reduce memory used by scripts and reduce time to unload scripts.
Following functions are affected in the C API:
* exec_on_files
* config_new
* config_new_section
* config_new_option
* hook_command
* hook_command_run
* hook_timer
* hook_fd
* hook_process
* hook_process_hashtable
* hook_connect
* hook_print
* hook_signal
* hook_hsignal
* hook_config
* hook_completion
* hook_modifier
* hook_info
* hook_info_hashtable
* hook_infolist
* hook_hdata
* hook_focus
* unhook_all_plugin
* buffer_new
* bar_item_new
* upgrade_new
* upgrade_read
The problem was introduced in commit eef3b57075
which was storing split commands inside keys themselves (for optimization).
This causes a problem when weechat.conf is reloaded, because all keys are
then deleted and created again, which removes the array of commands which
is currently used. And then it leads to a crash of WeeChat.
This commit reverts this behavior and the key commands are split when they
are executed.
Changes:
- wait control sequence for end of bracketed paste (and only after, check if
we should ask confirmation to user)
- add option weechat.look.paste_bracketed_timer_delay to force the end of
bracketed paste if the control sequence for end of bracketed paste was not
received in time
- in bracketed paste mode, with paste_max_lines=1, do not ask confirmation for
one line (ask for one line only if paste_max_lines=0)
- fix bugs with mintty: bracketed paste should be ok every time (even if some
codes are sometimes partially received, WeeChat will now handle that properly);
the standard paste often fails (due to bug in mintty, which sends paste very
slowly to remote app); so the bracketed paste mode is highly recommended with
mintty
- after paste in bracketed paste mode, the undo key (ctrl+"_" by default) will
undo whole paste, not chars one by one
New features and bugs fixed:
- mouse support: new command /mouse, new option weechat.look.mouse, new key context "mouse"
- free movement of cursor: new command /cursor, new key context "cursor"
- new hook_focus (used by cursor and mouse)
- info "cursor_mode"
- bugs fixed with key "^"
- allow plugin name in /buffer name
- fix bugs with bar windows: do not create bar windows for hidden bars
- fix completion bug when two words for completion are equal but with different case
- automatic scroll direction in /bar scroll (x/y is now optional)