changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/ffi/readline/readline.lisp

changeset 698: 96958d3eb5b0
parent: 39170f311b8c
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
381
386d51cf61ca add ffi/readline, net updates
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; readline/readline.lisp --- Readline Alien Routines
386d51cf61ca add ffi/readline, net updates
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
658
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
3
 ;; This implementation is based on Vindarel's cl-readline: https://github.com/vindarel/cl-readline
381
386d51cf61ca add ffi/readline, net updates
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
386d51cf61ca add ffi/readline, net updates
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
386d51cf61ca add ffi/readline, net updates
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 (in-package :readline)
386d51cf61ca add ffi/readline, net updates
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 
658
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
8
 (define-alien-enum (rl-completion-type int :test eq)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
9
                    :standard-completion 9
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
10
                    :display-and-perform 33
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
11
                    :insert-all 42
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
12
                    :list-all 63
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
13
                    :not-list-cmn-prefix 64)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
14
 
660
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
15
 (define-alien-type rl-hist-entry (struct rl-hist-entry
658
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
16
                                             (line (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
17
                                             (time (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
18
                                             (data (* t))))
660
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
19
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
20
 ;; HS_STIFLED
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
21
 (define-alien-type rl-history-state
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
22
     (struct rl-history-state
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
23
             (hist-entries (array (* rl-hist-entry)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
24
             (offset int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
25
             (length int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
26
             (size int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
27
             (flags int)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
28
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
29
 (define-alien-enum (rl-undo-code int :test eq)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
30
                    :delete 0
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
31
                    :insert 1
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
32
                    :begin 2
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
33
                    :end 3)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
34
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
35
 (define-alien-type rl-undo-list 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
36
   (struct rl-undo-list
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
37
           (next (* (struct rl-undo-list)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
38
           (start int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
39
           (end int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
40
           (text c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
41
           (what rl-undo-code)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
42
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
43
 (define-alien-type rl-command-func
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
44
     (function int int int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
45
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
46
 (define-alien-type rl-funmap
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
47
   (struct rl-funmap
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
48
           (name c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
49
           (function (* rl-command-func))))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
50
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
51
 (define-alien-type rl-keymap-entry
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
52
     (struct rl-keymap-entry
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
53
             (type char)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
54
             (function (* rl-command-func))))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
55
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
56
 (define-alien-type rl-keymap (array rl-keymap-entry))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
57
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
58
 (define-alien-type readline-state 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
59
   (struct readline-state
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
60
           (point int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
61
           (end int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
62
           (mark int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
63
           (buflen int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
64
           (buffer c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
65
           (ul (* rl-undo-list))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
66
           (prompt c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
67
           (rlstate int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
68
           (done int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
69
           (kmap rl-keymap)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
70
           (lastfunc (* rl-command-func))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
71
           (insmode int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
72
           (edmode int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
73
           (kseq c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
74
           (kseqlen int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
75
           (pendingin int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
76
           (inf (* t))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
77
           (outf (* t))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
78
           (macro c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
79
           (catchsigs int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
80
           (catchsigwinch int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
81
           (entryfunc (* rl-command-func))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
82
           (menuentryfunc (* rl-command-func))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
83
           (ignorefunc (* rl-command-func))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
84
           (attemptfunc (* rl-command-func))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
85
           (wordbreakchars c-string)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
86
           (reserved (array char 64))))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
87
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
88
 ;;; Well Known Vars
658
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
89
 (macrolet ((def-rl-var (name var type)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
90
              `(define-alien-variable (,name ,var) ,type)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
91
   (def-rl-var "rl_line_buffer" *line-buffer* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
92
   (def-rl-var "rl_point" *point* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
93
   (def-rl-var "rl_end" *end* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
94
   (def-rl-var "rl_mark" *mark* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
95
   (def-rl-var "rl_done" *point* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
96
   (def-rl-var "rl_num_chars_to_read" *num-chars-to-read* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
97
   (def-rl-var "rl_pending_input" *pending-input* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
98
   (def-rl-var "rl_dispatching" *point* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
99
   (def-rl-var "rl_erase_empty_line" *erase-empty-line* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
100
   (def-rl-var "rl_prompt" *prompt* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
101
   (def-rl-var "rl_display_prompt" *display-prompt* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
102
   (def-rl-var "rl_already_prompted" *already-prompted* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
103
   (def-rl-var "rl_library_version" *library-version* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
104
   (def-rl-var "rl_readline_version" *readline-version* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
105
   (def-rl-var "rl_gnu_readline_p" *gnu-readline-p* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
106
   (def-rl-var "rl_terminal_name" *terminal-name* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
107
   (def-rl-var "rl_readline_name" *readline-name* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
108
   (def-rl-var "rl_instream" *instream* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
109
   (def-rl-var "rl_outstream" *outstream* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
110
   (def-rl-var "rl_prefer_env_winsize" *prefer-env-winsize* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
111
   (def-rl-var "rl_last_func" *last-func* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
112
   (def-rl-var "rl_startup_hook" *startup-hook* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
113
   (def-rl-var "rl_pre_input_hook" *pre-input-hook* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
114
   (def-rl-var "rl_event_hook" *event-hook* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
115
   (def-rl-var "rl_getc_function" *getc-function* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
116
   (def-rl-var "rl_signal_event_hook" *signal-event-hook* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
117
   (def-rl-var "rl_input-available_hook" *input-available-hook* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
118
   (def-rl-var "rl_redisplay_function" *redisplay-function* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
119
   (def-rl-var "rl_prep_term_function" *prep-term-function* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
120
   (def-rl-var "rl_deprep_term_function" *deprep-term-function* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
121
   (def-rl-var "rl_executing_keymap" *executing-keymap* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
122
   (def-rl-var "rl_binding_keymap" *binding-keymap* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
123
   (def-rl-var "rl_executing_macro" *executing-macro* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
124
   (def-rl-var "rl_executing_key" *executing-key* char)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
125
   (def-rl-var "rl_executing_keyseq" *executing-keyseq* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
126
   (def-rl-var "rl_key_sequence_length" *key-sequence-length* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
127
   (def-rl-var "rl_readline_state" *readline-state* int)  
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
128
   (def-rl-var "rl_explicit_arg" *explicit-arg* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
129
   (def-rl-var "rl_numeric_arg" *numeric-arg* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
130
   (def-rl-var "rl_editing_mode" *editing-mode* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
131
   (def-rl-var "rl_catch_sigwinch" *catch-sigwinch* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
132
   (def-rl-var "rl_change_environment" *change-environment* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
133
   (def-rl-var "rl_attempted_completion_function" *attempted-completion-function* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
134
   (def-rl-var "rl_completion_display_matches_hook" *completion-display-matches-hook* (* t))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
135
   (def-rl-var "rl_basic_word_break_characters" *basic-word-break-characters* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
136
   (def-rl-var "rl_completer_word_break_character" *completer-word-break-characters* c-string)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
137
   (def-rl-var "rl_completion_query_items" *completer-query-items* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
138
   (def-rl-var "rl_completion_append_character" *completion-append-character* char)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
139
   (def-rl-var "rl_ignore_completion_duplicates" *ignore-completion-duplicates* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
140
   (def-rl-var "rl_attempted_completion_over" *attempted-completion-over* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
141
   (def-rl-var "rl_sort_completion_matches" *sort-completion-matches* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
142
   (def-rl-var "rl_completion_type" *completion-type* rl-completion-type)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
143
   (def-rl-var "rl_inhibit_completion" *inhibit-completion* boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
144
   (def-rl-var "history_base" *history-base* int)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
145
   (def-rl-var "history_length" *history-length* int))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
146
 
660
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
147
 ;; low-level
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
148
 (macrolet ((def-rl-int2 (&rest names)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
149
              `(progn
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
150
                 ,@(loop for i in names
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
151
                         collect
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
152
                            (std:with-gensyms (i1 i2)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
153
                              `(define-alien-routine ,i int (,i1 int) (,i2 int)))))))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
154
   (def-rl-int2 "rl_digit_argument" "rl_universal_argument" "rl_forward_byte"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
155
     "rl_forward_char" "rl_forward" "rl_backward_byte" "rl_backward_char" "rl_backward"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
156
     "rl_beg_of_line" "rl_end_of_line" "rl_forward_word" "rl_backward_word" "rl_refresh_line"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
157
     "rl_clear_screen" "rl_clear_display" "rl_skip_csi_sequence" "rl_arrow_keys"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
158
     "rl_previous_screen_line" "rl_next_screen_line"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
159
     "rl_insert" "rl_quoted_insert" "rl_tab_insert" "rl_newline" "rl_do_lowercase_version"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
160
     "rl_rubout" "rl_delete" "rl_rubout_or_delete" "rl_delete_horizontal_space" "rl_delete_or_show_completions"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
161
     "rl_insert_comment" "rl_upcase_word" "rl_downcase_word" "rl_capitalize_word" "rl_transpose_words"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
162
     "rl_transpose_chars" "rl_char_search" "rl_backward_char_search" "rl_beginning_of_history"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
163
     "rl_end_of_history" "rl_get_next_history" "rl_get_previous_history" "rl_operate_and_get_next"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
164
     "rl_fetch_history" "rl_set_mark" "rl_exchange_point_and_mark" "rl_vi_editing_mode"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
165
     "rl_emacs_editing_mode" "rl_overwrite_mode" "rl_re_read_init_file" "rl_dump_functions" "rl_dump_macros"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
166
     "rl_dump_variables" "rl_complete" "rl_possible_completions" "rl_insert_completions" "rl_old_menu_complete"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
167
     "rl_backward_menu_complete" "rl_kill_word" "rl_backward_kill_word" "rl_kill_line" "rl_backward_kill_line"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
168
     "rl_kill_full_line" "rl_unix_word_rubout" "rl_unix_line_discard" "rl_copy_region_to_kill" "rl_kill_region"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
169
     "rl_copy_forward_word" "rl_copy_backward_word" "rl_yank" "rl_yank_pop" "rl_yank_nth_arg" "rl_yank_last_arg"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
170
     "rl_bracketed_paste_begin" 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
171
     #+win32 "rl_paste_from_clipboard"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
172
     "rl_reverse_search_history" "rl_forward_search_history" "rl_start_kbd_macro" "rl_end_kbd_macro"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
173
     "rl_call_last_kbd_macro" "rl_print_last_kbd_macro" "rl_revert_line" "rl_undo_command" "rl_tilde_expand"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
174
     "rl_restart_output" "rl_stop_output" "rl_abort" "rl_tty_status" 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
175
     "rl_history_search_forward" "rl_history_search_backward" "rl_history_substr_search_forward"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
176
     "rl_history_substr_search_backward" "rl_noninc_forward_search" "rl_noninc_reverse_search"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
177
     "rl_noninc_forward_search_again" "rl_noninc_reverse_search_again"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
178
     "rl_insert_close" "rl_vi_redo" "rl_vi_undo" "rl_vi_yank_arg" "rl_vi_fetch_history" "rl_vi_search_again"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
179
     "rl_vi_search" "rl_vi_complete" "rl_vi_tilde_expand" "rl_vi_prev_word" "rl_vi_next_word" "rl_vi_end_word"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
180
     "rl_vi_insert_beg" "rl_vi_append_mode" "rl_vi_append_eol" "rl_vi_eof_maybe" "rl_vi_insertion_mode"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
181
     "rl_vi_insert_mode" "rl_vi_movement_mode" "rl_vi_arg_digit" "rl_vi_change_case" "rl_vi_put" "rl_vi_column" 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
182
     "rl_vi_delete_to" "rl_vi_change_to" "rl_vi_yank_to" "rl_vi_yank_pop" "rl_vi_rubout" "rl_vi_delete"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
183
     "rl_vi_back_to_indent" "rl_vi_unix_word_rubout" "rl_vi_first_print" "rl_vi_char_search" "rl_vi_match" 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
184
     "rl_vi_change_char" "rl_vi_subst" "rl_vi_overstrike" "rl_vi_overstrike_delete" "rl_vi_replace"
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
185
     "rl_vi_set_mark" "rl_vi_goto_mark" 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
186
     ;; NOTE 2024-09-20: there are uppercase versions - fWord eWord
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
187
     "rl_vi_fword" "rl_vi_bword" "rl_vi_eword"))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
188
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
189
 ;;; Well Published Functions
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
190
 (define-alien-routine "readline" c-string (prompt c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
191
 (define-alien-routine "rl_set_prompt" int (prompt c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
192
 (define-alien-routine "rl_expand_prompt" int (prompt c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
193
 (define-alien-routine "rl_initialize" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
194
 ;; undocument; unused by readline
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
195
 ;; (define-alien-routine "rl_discard_argument" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
196
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
197
 ;; [[file:/usr/include/readline/readline.h::/* Utility functions to bind keys to readline commands. */][last]]
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
198
 (define-alien-routine "rl_add_defun" int (name c-string) (func (* rl-command-func)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
199
 (define-alien-routine "rl_bind_key" int (key int) (function (* rl-command-func)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
200
 (define-alien-routine "rl_bind_key_in_map" int (key int) (func (* rl-command-func)) (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
201
 (define-alien-routine "rl_unbind_key" int (key int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
202
 (define-alien-routine "rl_unbind_key_in_map" int (key int) (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
203
 (define-alien-routine "rl_bind_key_if_unbound" int (key int) (function (* rl-command-func)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
204
 (define-alien-routine "rl_bind_key_if_unbound_in_map" int (key int) (function (* rl-command-func)) (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
205
 (define-alien-routine "rl_generic_bind" int (key int) (str c-string) (name c-string) (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
206
 (define-alien-routine "rl_variable_value" c-string (name c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
207
 (define-alien-routine "rl_variable_bind" int (name c-string) (val c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
208
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
209
 (define-alien-routine "rl_read_init_file" int (file c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
210
 (define-alien-routine "rl_parse_and_bind" int (binding c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
211
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
212
 ;; keymaps
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
213
 (define-alien-routine "rl_make_bare_keymap" rl-keymap)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
214
 (define-alien-routine "rl_empty_keymap" int (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
215
 (define-alien-routine "rl_copy_keymap" rl-keymap (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
216
 (define-alien-routine "rl_make_keymap" rl-keymap)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
217
 (define-alien-routine "rl_discard_keymap" void (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
218
 (define-alien-routine "rl_free_keymap" void (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
219
 (define-alien-routine "rl_set_keymap" void (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
220
 (define-alien-routine "rl_get_keymap" rl-keymap)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
221
 (define-alien-routine "rl_set_keymap_name" int (name c-string) (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
222
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
223
 ;; funmaps
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
224
 (define-alien-routine "rl_add_funmap_entry" int (name c-string) (function (* rl-command-func)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
225
 (define-alien-routine "rl_funmap_names" (array c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
226
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
227
 ;; kbd macros
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
228
 (define-alien-routine "rl_push_macro_input" void (input c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
229
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
230
 ;; undo
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
231
 (define-alien-routine "rl_add_undo" void (code rl-undo-code) (i1 int) (i2 int) (input c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
232
 (define-alien-routine "rl_free_undo_list" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
233
 (define-alien-routine "rl_do_undo" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
234
 (define-alien-routine "rl_begin_undo_group" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
235
 (define-alien-routine "rl_end_undo_group" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
236
 (define-alien-routine "rl_modifying" int (i1 int) (i2 int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
237
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
238
 ;; redisplay
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
239
 (define-alien-routine "rl_redisplay" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
240
 (define-alien-routine "rl_on_new_line" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
241
 (define-alien-routine "rl_on_new_line_with_prompt" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
242
 (define-alien-routine "rl_forced_update_display" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
243
 (define-alien-routine "rl_clear_visible_line" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
244
 (define-alien-routine "rl_clear_message" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
245
 (define-alien-routine "rl_reset_line_state" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
246
 (define-alien-routine "rl_crlf" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
247
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
248
 ;; mark and region
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
249
 (define-alien-routine "rl_keep_mark_active" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
250
 (define-alien-routine "rl_activate_mark" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
251
 (define-alien-routine "rl_deactivate_mark" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
252
 (define-alien-routine "rl_mark_active_p" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
253
 (define-alien-routine "rl_message" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
254
 (define-alien-routine "rl_show_char" int (char int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
255
 ;; undocumented
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
256
 (define-alien-routine "rl_character_len" int (i1 int) (i2 int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
257
 (define-alien-routine "rl_redraw_prompt_last_line" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
258
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
259
 (define-alien-routine "rl_save_prompt" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
260
 (define-alien-routine "rl_restore_prompt" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
261
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
262
 ;; text editing
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
263
 (define-alien-routine "rl_replace_line" void (line c-string) (idx int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
264
 (define-alien-routine "rl_insert_text" int (text c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
265
 (define-alien-routine "rl_delete_text" int (i1 int) (i2 int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
266
 (define-alien-routine "rl_kill_text" int (i1 int) (i2 int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
267
 (define-alien-routine "rl_copy_text" c-string (i1 int) (i2 int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
268
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
269
 ;; tty
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
270
 (define-alien-routine "rl_prep_terminal" void (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
271
 (define-alien-routine "rl_deprep_terminal" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
272
 (define-alien-routine "rl_tty_set_default_bindings" void (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
273
 (define-alien-routine "rl_tty_unset_default_bindings" void (map rl-keymap))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
274
 (define-alien-routine "rl_tty_set_echoing" int (val int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
275
 (define-alien-routine "rl_reset_terminal" int (val c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
276
 (define-alien-routine "rl_resize_terminal" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
277
 (define-alien-routine "rl_set_screen_size" void (x int) (y int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
278
 (define-alien-routine "rl_get_screen_size" void (i1 (* int)) (i2 (* int)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
279
 (define-alien-routine "rl_reset_screen_size" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
280
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
281
 (define-alien-routine "rl_get_termcap" c-string (key c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
282
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
283
 ;; character input
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
284
 (define-alien-routine "rl_stuff_char" int (c int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
285
 (define-alien-routine "rl_execute_next" int (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
286
 (define-alien-routine "rl_clear_pending_input" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
287
 (define-alien-routine "rl_read_key" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
288
 (define-alien-routine "rl_getc" int (c (* t))) ;; NOTE: (* FILE)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
289
 (define-alien-routine "rl_set_keyboard_input_timeout" int (val int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
290
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
291
 ;;timeouts 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
292
 (define-alien-routine "rl_set_timeout" int (n1 unsigned-int) (n2 unsigned-int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
293
 (define-alien-routine "rl_timeout_remaining" int (n1 (* unsigned-int)) (n2 (* unsigned-int)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
294
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
295
 ;; public utils
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
296
 (define-alien-routine "rl_extend_lind_buffer" void (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
297
 (define-alien-routine "rl_ding" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
298
 (define-alien-routine "rl_alphabetic" int (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
299
 (define-alien-routine "rl_free" void (o (* t)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
300
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
301
 ;; signals
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
302
 (define-alien-routine "rl_set_signals" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
303
 (define-alien-routine "rl_clear_signals" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
304
 (define-alien-routine "rl_cleanup_after_signal" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
305
 (define-alien-routine "rl_reset_after_signal" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
306
 (define-alien-routine "rl_free_line_state" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
307
 (define-alien-routine "rl_pending_signal" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
308
 (define-alien-routine "rl_check_signals" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
309
 (define-alien-routine "rl_echo_signal_char" void (c int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
310
 (define-alien-routine "rl_set_paren_blink_timeout" int (val int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
311
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
312
 ;; history
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
313
 (define-alien-routine "rl_clear_history" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
314
 (define-alien-routine "rl_maybe_save_line" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
315
 (define-alien-routine "rl_maybe_unsave_line" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
316
 (define-alien-routine "rl_maybe_replace_line" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
317
 
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
318
 ;; completion
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
319
 (define-alien-routine "rl_complete_internal" int (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
320
 (define-alien-routine "rl_display_match_list" void (list (array c-string)) (i1 int) (i2 int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
321
 ;; (define-alien-routine "rl_completion_matches" (array c-string) (input c-string) (function (* rl-compentry-func)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
322
 (define-alien-routine "rl_username_completion_function" c-string (name c-string) (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
323
 (define-alien-routine "rl_filename_completion_function" c-string (name c-string) (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
324
 (define-alien-routine "rl_completion_mode" int (function (* rl-command-func)))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
325
 
661
39170f311b8c add sk-def and sk-bind
Richard Westhaver <ellis@rwest.io>
parents: 660
diff changeset
326
 ;; state
39170f311b8c add sk-def and sk-bind
Richard Westhaver <ellis@rwest.io>
parents: 660
diff changeset
327
 (define-alien-routine "rl_save_state" int (state (* readline-state)))
39170f311b8c add sk-def and sk-bind
Richard Westhaver <ellis@rwest.io>
parents: 660
diff changeset
328
 (define-alien-routine "rl_restore_state" int (state (* readline-state)))
39170f311b8c add sk-def and sk-bind
Richard Westhaver <ellis@rwest.io>
parents: 660
diff changeset
329
 
660
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
330
 ;; history.h
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
331
 (define-alien-routine "using_history" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
332
 (define-alien-routine "add_history" void (line c-string))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
333
 (define-alien-routine "clear_history" void)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
334
 (define-alien-routine "stifle_history" void (i int))
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
335
 (define-alien-routine "unstifle_history" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
336
 (define-alien-routine "history_is_stifled" int)
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
337
 (define-alien-routine "history_list" (array (* rl-hist-entry)))
661
39170f311b8c add sk-def and sk-bind
Richard Westhaver <ellis@rwest.io>
parents: 660
diff changeset
338
 (define-alien-routine "previous_history" (* rl-hist-entry))
39170f311b8c add sk-def and sk-bind
Richard Westhaver <ellis@rwest.io>
parents: 660
diff changeset
339
 (define-alien-routine "next_history" (* rl-hist-entry))
658
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
340
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
341
 (defvar +c-buffer-size+ 256
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
342
   "How many bytes to allocate per Lisp string when converting list of
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
343
 Lisp strings into array of C strings.")
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
344
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
345
 (defmacro produce-callback (function return-type &optional func-arg-list)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
346
   "Return pointer to callback that calls FUNCTION. RETURN-TYPE specifies
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
347
 return type of the function and FUNC-ARG-LIST is list of argument types (it
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
348
 can be ommited if FUNCTION doesn't take any arguments)."
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
349
   (let ((gensymed-list (mapcar (lambda (x) (list (gensym) x))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
350
                                func-arg-list)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
351
     (std:with-gensyms (temp)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
352
       `(when ,function
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
353
          (progn
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
354
            (define-alien-callable ,temp ,return-type ,gensymed-list
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
355
              (funcall ,function ,@(mapcar #'car gensymed-list)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
356
            (alien-callable-function ',temp))))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
357
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
358
 (defun produce-callback* (function return-type &optional func-arg-list)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
359
   "Variant of PRODUCE-CALLBACK that should hopefully be more portable.
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
360
 This avoids using a GENSYM as the name of a callback, and is also funcallable."
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
361
   (let ((gensymed-list (mapcar (lambda (x) (list (gensym) x))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
362
                                func-arg-list)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
363
     (std:with-gensyms (temp)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
364
       (when function
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
365
         (progn
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
366
           (eval `(define-alien-callable ,temp ,return-type ,gensymed-list
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
367
                    (funcall ,function ,@(mapcar #'car gensymed-list))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
368
           (alien-callable-function temp))))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
369
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
370
 ;;; cl-readline
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
371
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
372
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
373
 (defun recent-history-line-satisfies-p (predicate)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
374
   "Check if the most recent history line satisfies given predicate
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
375
 PREDICATE. Return T if there is no history saved."
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
376
   (if (zerop *history-length*)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
377
       t
660
da507f0274b3 readline FFI
Richard Westhaver <ellis@rwest.io>
parents: 658
diff changeset
378
       (with-alien ((s rl-hist-entry))
658
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
379
         (funcall predicate
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
380
                  ;; TODO 2024-09-19: does SBCL know how to conver this to a lisp string automatically?
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
381
                  (with-alien-slots
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
382
                      (line)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
383
                      ;; (alien-funcall "history_get"
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
384
                      ;;                :int 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
385
                      ;;                (1- (+ *history-base*
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
386
                      ;;                       *history-length*)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
387
                      s
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
388
                    line)))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
389
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
390
 (defun rl (&key
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
391
            prompt
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
392
            already-prompted
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
393
            num-chars
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
394
            erase-empty-line
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
395
            add-history
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
396
            novelty-check)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
397
   "Get a line from user with editing. PROMPT, if supplied, is printed before
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
398
 reading of input. Non-NIL value of ALREADY-PROMPTED will tell Readline that
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
399
 the application has printed prompt already. However, PROMPT must be supplied
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
400
 in this case too, so redisplay functions can update the display properly. If
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
401
 NUM-CHARS argument is a positive number, Readline will return after
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
402
 accepting that many characters. If ERASE-EMPTY-LINE is not NIL, `readline'
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
403
 will completely erase the current line, including any prompt, any time a
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
404
 newline is typed as the only character on an otherwise-empty line. The
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
405
 cursor is moved to the beginning of the newly-blank line. Supplying
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
406
 ADD-HISTORY tells Readline that user's input should be added to
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
407
 history. However, blank lines don't get into history anyway. NOVELTY-CHECK,
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
408
 if given, must be a predicate that takes two strings: the actual line and
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
409
 the most recent history line. Only when the predicate evaluates to non-NIL
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
410
 value new line will be added to the history. Return value on success is the
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
411
 actual string and NIL on failure."
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
412
   (setf *already-prompted*  already-prompted
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
413
         *num-chars-to-read* (or num-chars 0)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
414
         *erase-empty-line*  erase-empty-line)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
415
   (let* ((prompt (if prompt (string prompt) ""))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
416
          (ptr (readline prompt)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
417
     (unless (null ptr)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
418
       (unwind-protect
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
419
            (let ((str ptr))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
420
              (when (and add-history
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
421
                         (not (sequence:emptyp str))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
422
                         (or (not novelty-check)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
423
                             (recent-history-line-satisfies-p
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
424
                              (std:curry novelty-check str))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
425
                (add-history str))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
426
              str)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
427
         (free-alien ptr)))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
428
 
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
429
 ;; (defmacro with-possible-redirection (filename append &body body)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
430
 ;;   "If FILENAME is not NIL, try to create C file named FILENAME,
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
431
 ;; temporarily reassign `*outstream*' to pointer to this file, perform BODY,
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
432
 ;; then close the file and assign `*outstream*' the old value. If APPEND is not
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
433
 ;; NIL, output will be appended to the file. Returns NIL on success and T on
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
434
 ;; failure."
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
435
 ;;   (std:with-gensyms (temp-outstream file-pointer body-fnc)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
436
 ;;     `(flet ((,body-fnc ()
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
437
 ;;               ,@body))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
438
 ;;        (if ,filename
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
439
 ;;            (let ((,temp-outstream *outstream*)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
440
 ;;                  (,file-pointer (foreign-funcall "fopen"
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
441
 ;;                                                  :string ,filename
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
442
 ;;                                                  :string (if ,append "a" "w")
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
443
 ;;                                                  :pointer)))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
444
 ;;              (if (null-alien ,file-pointer)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
445
 ;;                  t
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
446
 ;;                  (unwind-protect
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
447
 ;;                       (progn
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
448
 ;;                         (setf *outstream* ,file-pointer)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
449
 ;;                         (,body-fnc))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
450
 ;;                    (foreign-funcall "fclose"
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
451
 ;;                                     :pointer ,file-pointer
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
452
 ;;                                     :boolean)
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
453
 ;;                    (setf *outstream* ,temp-outstream))))
804b5ee20a46 zstd completed (besides zdict), working on readline
Richard Westhaver <ellis@rwest.io>
parents: 381
diff changeset
454
 ;;            (,body-fnc)))))