1:mod:`readline` --- GNU readline interface 2========================================== 3 4.. module:: readline 5 :platform: Unix 6 :synopsis: GNU readline support for Python. 7 8.. sectionauthor:: Skip Montanaro <skip@pobox.com> 9 10-------------- 11 12The :mod:`readline` module defines a number of functions to facilitate 13completion and reading/writing of history files from the Python interpreter. 14This module can be used directly, or via the :mod:`rlcompleter` module, which 15supports completion of Python identifiers at the interactive prompt. Settings 16made using this module affect the behaviour of both the interpreter's 17interactive prompt and the prompts offered by the built-in :func:`input` 18function. 19 20Readline keybindings may be configured via an initialization file, typically 21``.inputrc`` in your home directory. See `Readline Init File 22<https://tiswww.cwru.edu/php/chet/readline/rluserman.html#SEC9>`_ 23in the GNU Readline manual for information about the format and 24allowable constructs of that file, and the capabilities of the 25Readline library in general. 26 27.. note:: 28 29 The underlying Readline library API may be implemented by 30 the ``libedit`` library instead of GNU readline. 31 On macOS the :mod:`readline` module detects which library is being used 32 at run time. 33 34 The configuration file for ``libedit`` is different from that 35 of GNU readline. If you programmatically load configuration strings 36 you can check for the text "libedit" in :const:`readline.__doc__` 37 to differentiate between GNU readline and libedit. 38 39 If you use *editline*/``libedit`` readline emulation on macOS, the 40 initialization file located in your home directory is named 41 ``.editrc``. For example, the following content in ``~/.editrc`` will 42 turn ON *vi* keybindings and TAB completion:: 43 44 python:bind -v 45 python:bind ^I rl_complete 46 47 48Init file 49--------- 50 51The following functions relate to the init file and user configuration: 52 53 54.. function:: parse_and_bind(string) 55 56 Execute the init line provided in the *string* argument. This calls 57 :c:func:`rl_parse_and_bind` in the underlying library. 58 59 60.. function:: read_init_file([filename]) 61 62 Execute a readline initialization file. The default filename is the last filename 63 used. This calls :c:func:`rl_read_init_file` in the underlying library. 64 65 66Line buffer 67----------- 68 69The following functions operate on the line buffer: 70 71 72.. function:: get_line_buffer() 73 74 Return the current contents of the line buffer (:c:data:`rl_line_buffer` 75 in the underlying library). 76 77 78.. function:: insert_text(string) 79 80 Insert text into the line buffer at the cursor position. This calls 81 :c:func:`rl_insert_text` in the underlying library, but ignores 82 the return value. 83 84 85.. function:: redisplay() 86 87 Change what's displayed on the screen to reflect the current contents of the 88 line buffer. This calls :c:func:`rl_redisplay` in the underlying library. 89 90 91History file 92------------ 93 94The following functions operate on a history file: 95 96 97.. function:: read_history_file([filename]) 98 99 Load a readline history file, and append it to the history list. 100 The default filename is :file:`~/.history`. This calls 101 :c:func:`read_history` in the underlying library. 102 103 104.. function:: write_history_file([filename]) 105 106 Save the history list to a readline history file, overwriting any 107 existing file. The default filename is :file:`~/.history`. This calls 108 :c:func:`write_history` in the underlying library. 109 110 111.. function:: append_history_file(nelements[, filename]) 112 113 Append the last *nelements* items of history to a file. The default filename is 114 :file:`~/.history`. The file must already exist. This calls 115 :c:func:`append_history` in the underlying library. This function 116 only exists if Python was compiled for a version of the library 117 that supports it. 118 119 .. versionadded:: 3.5 120 121 122.. function:: get_history_length() 123 set_history_length(length) 124 125 Set or return the desired number of lines to save in the history file. 126 The :func:`write_history_file` function uses this value to truncate 127 the history file, by calling :c:func:`history_truncate_file` in 128 the underlying library. Negative values imply 129 unlimited history file size. 130 131 132History list 133------------ 134 135The following functions operate on a global history list: 136 137 138.. function:: clear_history() 139 140 Clear the current history. This calls :c:func:`clear_history` in the 141 underlying library. The Python function only exists if Python was 142 compiled for a version of the library that supports it. 143 144 145.. function:: get_current_history_length() 146 147 Return the number of items currently in the history. (This is different from 148 :func:`get_history_length`, which returns the maximum number of lines that will 149 be written to a history file.) 150 151 152.. function:: get_history_item(index) 153 154 Return the current contents of history item at *index*. The item index 155 is one-based. This calls :c:func:`history_get` in the underlying library. 156 157 158.. function:: remove_history_item(pos) 159 160 Remove history item specified by its position from the history. 161 The position is zero-based. This calls :c:func:`remove_history` in 162 the underlying library. 163 164 165.. function:: replace_history_item(pos, line) 166 167 Replace history item specified by its position with *line*. 168 The position is zero-based. This calls :c:func:`replace_history_entry` 169 in the underlying library. 170 171 172.. function:: add_history(line) 173 174 Append *line* to the history buffer, as if it was the last line typed. 175 This calls :c:func:`add_history` in the underlying library. 176 177 178.. function:: set_auto_history(enabled) 179 180 Enable or disable automatic calls to :c:func:`add_history` when reading 181 input via readline. The *enabled* argument should be a Boolean value 182 that when true, enables auto history, and that when false, disables 183 auto history. 184 185 .. versionadded:: 3.6 186 187 .. impl-detail:: 188 Auto history is enabled by default, and changes to this do not persist 189 across multiple sessions. 190 191 192Startup hooks 193------------- 194 195 196.. function:: set_startup_hook([function]) 197 198 Set or remove the function invoked by the :c:data:`rl_startup_hook` 199 callback of the underlying library. If *function* is specified, it will 200 be used as the new hook function; if omitted or ``None``, any function 201 already installed is removed. The hook is called with no 202 arguments just before readline prints the first prompt. 203 204 205.. function:: set_pre_input_hook([function]) 206 207 Set or remove the function invoked by the :c:data:`rl_pre_input_hook` 208 callback of the underlying library. If *function* is specified, it will 209 be used as the new hook function; if omitted or ``None``, any 210 function already installed is removed. The hook is called 211 with no arguments after the first prompt has been printed and just before 212 readline starts reading input characters. This function only exists 213 if Python was compiled for a version of the library that supports it. 214 215 216Completion 217---------- 218 219The following functions relate to implementing a custom word completion 220function. This is typically operated by the Tab key, and can suggest and 221automatically complete a word being typed. By default, Readline is set up 222to be used by :mod:`rlcompleter` to complete Python identifiers for 223the interactive interpreter. If the :mod:`readline` module is to be used 224with a custom completer, a different set of word delimiters should be set. 225 226 227.. function:: set_completer([function]) 228 229 Set or remove the completer function. If *function* is specified, it will be 230 used as the new completer function; if omitted or ``None``, any completer 231 function already installed is removed. The completer function is called as 232 ``function(text, state)``, for *state* in ``0``, ``1``, ``2``, ..., until it 233 returns a non-string value. It should return the next possible completion 234 starting with *text*. 235 236 The installed completer function is invoked by the *entry_func* callback 237 passed to :c:func:`rl_completion_matches` in the underlying library. 238 The *text* string comes from the first parameter to the 239 :c:data:`rl_attempted_completion_function` callback of the 240 underlying library. 241 242 243.. function:: get_completer() 244 245 Get the completer function, or ``None`` if no completer function has been set. 246 247 248.. function:: get_completion_type() 249 250 Get the type of completion being attempted. This returns the 251 :c:data:`rl_completion_type` variable in the underlying library as 252 an integer. 253 254 255.. function:: get_begidx() 256 get_endidx() 257 258 Get the beginning or ending index of the completion scope. 259 These indexes are the *start* and *end* arguments passed to the 260 :c:data:`rl_attempted_completion_function` callback of the 261 underlying library. The values may be different in the same 262 input editing scenario based on the underlying C readline implementation. 263 Ex: libedit is known to behave differently than libreadline. 264 265 266.. function:: set_completer_delims(string) 267 get_completer_delims() 268 269 Set or get the word delimiters for completion. These determine the 270 start of the word to be considered for completion (the completion scope). 271 These functions access the :c:data:`rl_completer_word_break_characters` 272 variable in the underlying library. 273 274 275.. function:: set_completion_display_matches_hook([function]) 276 277 Set or remove the completion display function. If *function* is 278 specified, it will be used as the new completion display function; 279 if omitted or ``None``, any completion display function already 280 installed is removed. This sets or clears the 281 :c:data:`rl_completion_display_matches_hook` callback in the 282 underlying library. The completion display function is called as 283 ``function(substitution, [matches], longest_match_length)`` once 284 each time matches need to be displayed. 285 286 287.. _readline-example: 288 289Example 290------- 291 292The following example demonstrates how to use the :mod:`readline` module's 293history reading and writing functions to automatically load and save a history 294file named :file:`.python_history` from the user's home directory. The code 295below would normally be executed automatically during interactive sessions 296from the user's :envvar:`PYTHONSTARTUP` file. :: 297 298 import atexit 299 import os 300 import readline 301 302 histfile = os.path.join(os.path.expanduser("~"), ".python_history") 303 try: 304 readline.read_history_file(histfile) 305 # default history len is -1 (infinite), which may grow unruly 306 readline.set_history_length(1000) 307 except FileNotFoundError: 308 pass 309 310 atexit.register(readline.write_history_file, histfile) 311 312This code is actually automatically run when Python is run in 313:ref:`interactive mode <tut-interactive>` (see :ref:`rlcompleter-config`). 314 315The following example achieves the same goal but supports concurrent interactive 316sessions, by only appending the new history. :: 317 318 import atexit 319 import os 320 import readline 321 histfile = os.path.join(os.path.expanduser("~"), ".python_history") 322 323 try: 324 readline.read_history_file(histfile) 325 h_len = readline.get_current_history_length() 326 except FileNotFoundError: 327 open(histfile, 'wb').close() 328 h_len = 0 329 330 def save(prev_h_len, histfile): 331 new_h_len = readline.get_current_history_length() 332 readline.set_history_length(1000) 333 readline.append_history_file(new_h_len - prev_h_len, histfile) 334 atexit.register(save, h_len, histfile) 335 336The following example extends the :class:`code.InteractiveConsole` class to 337support history save/restore. :: 338 339 import atexit 340 import code 341 import os 342 import readline 343 344 class HistoryConsole(code.InteractiveConsole): 345 def __init__(self, locals=None, filename="<console>", 346 histfile=os.path.expanduser("~/.console-history")): 347 code.InteractiveConsole.__init__(self, locals, filename) 348 self.init_history(histfile) 349 350 def init_history(self, histfile): 351 readline.parse_and_bind("tab: complete") 352 if hasattr(readline, "read_history_file"): 353 try: 354 readline.read_history_file(histfile) 355 except FileNotFoundError: 356 pass 357 atexit.register(self.save_history, histfile) 358 359 def save_history(self, histfile): 360 readline.set_history_length(1000) 361 readline.write_history_file(histfile) 362