From 710acf58113ff28440b3f83bbbf77e7ca075e5c6 Mon Sep 17 00:00:00 2001 From: Boris Staletic Date: Sun, 4 Aug 2024 15:27:43 +0200 Subject: [PATCH] Allow soft-wrapping of lines in the signature help window This looks ugly, but at least no data is lost due to lines going off screen. --- python/ycm/signature_help.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/python/ycm/signature_help.py b/python/ycm/signature_help.py index 22ba1d5ca4..32c6271a15 100644 --- a/python/ycm/signature_help.py +++ b/python/ycm/signature_help.py @@ -159,6 +159,17 @@ def UpdateSignatureHelp( state, signature_info ): # noqa # inserting the char ? col = int( screen_pos[ 'curscol' ] ) - 2 + # Vim stops shifting the popup to the left if we turn on soft-wrapping. + # Instead, we want to first shift the popup to the left and then + # and then turn on wrapping. + max_line_length = len( max( + buf_lines, + key = lambda item: len( item[ 'text' ] ) )[ 'text' ] ) + vim_width = vimsupport.GetIntValue( '&columns' ) + line_available = vim_width - int( screen_pos[ 'col' ] ) + if max_line_length > line_available: + col = vim_width - max_line_length + if col <= 0: col = 1 @@ -172,6 +183,7 @@ def UpdateSignatureHelp( state, signature_info ): # noqa # cursorline. So instead, we manually set 'cursorline' in the popup window # and enable syntax based on the current file syntax) "flip": 1, + "fixed": 1, "padding": [ 0, 1, 0, 1 ], # Pad 1 char in X axis to match completion menu "hidden": int( state.state == SignatureHelpState.ACTIVE_SUPPRESSED ) } @@ -196,7 +208,7 @@ def UpdateSignatureHelp( state, signature_info ): # noqa active_signature = int( signature_info.get( 'activeSignature', 0 ) ) vim.eval( f"win_execute( { state.popup_win_id }, " - f"'set syntax={ syntax } cursorline | " + f"'set syntax={ syntax } cursorline wrap | " f"call cursor( [ { active_signature + 1 }, 1 ] )' )" ) return state