Skip to main content
Module

x/ddc_vim/deps.ts>fn.getchar

Dark deno-powered completion framework for neovim/Vim8
Go to Latest
function fn.getchar
import { fn } from "https://deno.land/x/ddc_vim@v2.3.0/deps.ts";
const { getchar } = fn;

Get a single character from the user or input stream. If [expr] is omitted, wait until a character is available. If [expr] is 0, only get a character when one is available. Return zero otherwise. If [expr] is 1, only check if a character is available, it is not consumed. Return zero if no character available. If you prefer always getting a string use |getcharstr()|. Without [expr] and when [expr] is 0 a whole character or special key is returned. If it is a single character, the result is a number. Use nr2char() to convert it to a String. Otherwise a String is returned with the encoded character. For a special key it's a String with a sequence of bytes starting with 0x80 (decimal: 128). This is the same value as the String "<Key>", e.g., "<Left>". The returned value is also a String when a modifier (shift, control, alt) was used that is not included in the character. When [expr] is 0 and Esc is typed, there will be a short delay while Vim waits to see if this is the start of an escape sequence. When [expr] is 1 only the first byte is returned. For a one-byte character it is the character itself as a number. Use nr2char() to convert it to a String. Use getcharmod() to obtain any additional modifiers. When the user clicks a mouse button, the mouse event will be returned. The position can then be found in |v:mouse_col|, |v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|. |getmousepos()| can also be used. Mouse move events will be ignored. This example positions the mouse as it would normally happen: let c = getchar() if c == "<LeftMouse>" && v:mouse_win > 0 exe v:mouse_win . "wincmd w" exe v:mouse_lnum exe "normal " . v:mouse_col . "|" endif When using bracketed paste only the first character is returned, the rest of the pasted text is dropped. |xterm-bracketed-paste|. There is no prompt, you will somehow have to make clear to the user that a character has to be typed. The screen is not redrawn, e.g. when resizing the window. When using a popup window it should work better with a |popup-filter|. There is no mapping for the character. Key codes are replaced, thus when the user presses the <Del key you get the code for the key, not the raw character sequence. Examples: getchar() == "<Del>" getchar() == "<S-Left>" This example redefines "f" to ignore case: :nmap f :call FindChar()<CR :function FindChar() : let c = nr2char(getchar()) : while col('.') < col('$') - 1 : normal l : if getline('.')[col('.') - 1] ==? c : break : endif : endwhile :endfunction You may also receive synthetic characters, such as ||. Often you will want to ignore this and get another character: :function GetKey() : let c = getchar() : while c == "<CursorHold>" : let c = getchar() : endwhile : return c :endfunction

Parameters

denops: Denops
optional
expr: unknown

Returns

Promise<unknown>