### 4.4 Programming the Input Bar ¶

New input behavior can be added to the input bar by creating editing functions and binding them to keys in the *input-map* using `define-key`, just like other key bindings.

An input function takes 2 arguments: the input structure and the key pressed.

Function: read-one-line screen prompt &key completions initial-input require-match password ¶

  Default Values:

        completions    nil
        initial-input  ""
        require-match  nil
        password       nil

  Read a line of input through stumpwm and return it. Returns nil if the user aborted.

Function: read-one-char screen ¶

  Read a single character from the user.

Function: completing-read screen prompt completions &key initial-input require-match ¶

  Default Values:

        initial-input  ""
        require-match  nil

  Read a line of input through stumpwm and return it with TAB completion. Completions can be a list, an fbound symbol, or a function. If its an fbound symbol or a function then that function is passed the substring to complete on and is expected to return a list of matches. If require-match argument is non-nil then the input must match with an element of the completions.

Function: input-insert-string input string ¶

  Insert string into the input at the current position. input must be of type input-line. Input functions are passed this structure as their first argument.

Function: input-insert-char input char ¶

  Insert char into the input at the current position. input must be of type input-line. Input functions are passed this structure as their first argument.

Variable: *input-map* ¶

  This is the keymap containing all input editing key bindings.