Changeset View
Changeset View
Standalone View
Standalone View
lib/libedit/editline.3
.\" $NetBSD: editline.3,v 1.88 2016/02/25 14:59:22 wiz Exp $ | .\" $NetBSD: editline.3,v 1.99 2018/11/18 17:09:39 christos Exp $ | ||||
.\" | .\" | ||||
.\" Copyright (c) 1997-2014 The NetBSD Foundation, Inc. | .\" Copyright (c) 1997-2014 The NetBSD Foundation, Inc. | ||||
.\" All rights reserved. | .\" All rights reserved. | ||||
.\" | .\" | ||||
.\" This file was contributed to The NetBSD Foundation by Luke Mewburn. | .\" This file was contributed to The NetBSD Foundation by Luke Mewburn. | ||||
.\" | .\" | ||||
.\" Redistribution and use in source and binary forms, with or without | .\" Redistribution and use in source and binary forms, with or without | ||||
.\" modification, are permitted provided that the following conditions | .\" modification, are permitted provided that the following conditions | ||||
Show All 13 Lines | |||||
.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||||
.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | .\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | ||||
.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | .\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||||
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
.\" POSSIBILITY OF SUCH DAMAGE. | .\" POSSIBILITY OF SUCH DAMAGE. | ||||
.\" | .\" | ||||
.\" $FreeBSD$ | .\" $FreeBSD$ | ||||
.\" | .\" | ||||
.Dd April 28, 2017 | .Dd November 9, 2018 | ||||
.Dt EDITLINE 3 | .Dt EDITLINE 3 | ||||
.Os | .Os | ||||
.Sh NAME | .Sh NAME | ||||
.Nm editline , | .Nm editline , | ||||
.Nm el_init , | .Nm el_init , | ||||
.Nm el_init_fd , | .Nm el_init_fd , | ||||
.Nm el_end , | .Nm el_end , | ||||
.Nm el_reset , | .Nm el_reset , | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | |||||
.Fn el_reset "EditLine *e" | .Fn el_reset "EditLine *e" | ||||
.Ft const char * | .Ft const char * | ||||
.Fn el_gets "EditLine *e" "int *count" | .Fn el_gets "EditLine *e" "int *count" | ||||
.Ft const wchar_t * | .Ft const wchar_t * | ||||
.Fn el_wgets "EditLine *e" "int *count" | .Fn el_wgets "EditLine *e" "int *count" | ||||
.Ft int | .Ft int | ||||
.Fn el_getc "EditLine *e" "char *ch" | .Fn el_getc "EditLine *e" "char *ch" | ||||
.Ft int | .Ft int | ||||
.Fn el_wgetc "EditLine *e" "wchar_t *ch" | .Fn el_wgetc "EditLine *e" "wchar_t *wc" | ||||
.Ft void | .Ft void | ||||
.Fn el_push "EditLine *e" "const char *str" | .Fn el_push "EditLine *e" "const char *mbs" | ||||
.Ft void | .Ft void | ||||
.Fn el_wpush "EditLine *e" "const wchar_t *str" | .Fn el_wpush "EditLine *e" "const wchar_t *wcs" | ||||
.Ft int | .Ft int | ||||
.Fn el_parse "EditLine *e" "int argc" "const char *argv[]" | .Fn el_parse "EditLine *e" "int argc" "const char *argv[]" | ||||
.Ft int | .Ft int | ||||
.Fn el_wparse "EditLine *e" "int argc" "const wchar_t *argv[]" | .Fn el_wparse "EditLine *e" "int argc" "const wchar_t *argv[]" | ||||
.Ft int | .Ft int | ||||
.Fn el_set "EditLine *e" "int op" "..." | .Fn el_set "EditLine *e" "int op" "..." | ||||
.Ft int | .Ft int | ||||
.Fn el_wset "EditLine *e" "int op" "..." | .Fn el_wset "EditLine *e" "int op" "..." | ||||
.Ft int | .Ft int | ||||
.Fn el_get "EditLine *e" "int op" "..." | .Fn el_get "EditLine *e" "int op" "..." | ||||
.Ft int | .Ft int | ||||
.Fn el_wget "EditLine *e" "int op" "..." | .Fn el_wget "EditLine *e" "int op" "..." | ||||
.Ft int | .Ft int | ||||
.Fn el_source "EditLine *e" "const char *file" | .Fn el_source "EditLine *e" "const char *file" | ||||
.Ft void | .Ft void | ||||
.Fn el_resize "EditLine *e" | .Fn el_resize "EditLine *e" | ||||
.Fn int | .Ft int | ||||
.Fn el_cursor "EditLine *e" "int count" | .Fn el_cursor "EditLine *e" "int count" | ||||
.Ft const LineInfo * | .Ft const LineInfo * | ||||
.Fn el_line "EditLine *e" | .Fn el_line "EditLine *e" | ||||
.Ft const LineInfoW * | .Ft const LineInfoW * | ||||
.Fn el_wline "EditLine *e" | .Fn el_wline "EditLine *e" | ||||
.Ft int | .Ft int | ||||
.Fn el_insertstr "EditLine *e" "const char *str" | .Fn el_insertstr "EditLine *e" "const char *str" | ||||
.Ft int | .Ft int | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
.Pp | .Pp | ||||
The | The | ||||
.Nm | .Nm | ||||
library respects the | library respects the | ||||
.Ev LC_CTYPE | .Ev LC_CTYPE | ||||
locale set by the application program and never uses | locale set by the application program and never uses | ||||
.Xr setlocale 3 | .Xr setlocale 3 | ||||
to change the locale. | to change the locale. | ||||
The only locales supported are UTF-8 and the default C or POSIX locale. | |||||
If any other locale is set, behaviour is undefined. | |||||
.Sh LINE EDITING FUNCTIONS | .Sh LINE EDITING FUNCTIONS | ||||
The line editing functions use a common data structure, | The line editing functions use a common data structure, | ||||
.Fa EditLine , | .Fa EditLine , | ||||
which is created by | which is created by | ||||
.Fn el_init | .Fn el_init | ||||
or | or | ||||
.Fn el_init_fd | .Fn el_init_fd | ||||
and freed by | and freed by | ||||
▲ Show 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
is set to \-1 and | is set to \-1 and | ||||
.Dv errno | .Dv errno | ||||
contains the error code that caused it. | contains the error code that caused it. | ||||
The return value may not remain valid across calls to | The return value may not remain valid across calls to | ||||
.Fn el_gets | .Fn el_gets | ||||
and must be copied if the data is to be retained. | and must be copied if the data is to be retained. | ||||
.It Fn el_wgetc | .It Fn el_wgetc | ||||
Read a wide character from the tty, respecting the current locale, | Read a wide character from the tty, respecting the current locale, | ||||
or from the input stream written by | or from the input queue described in | ||||
.Fn el_wpush | .Xr editline 7 | ||||
and | |||||
.Fn el_push | |||||
if that is not empty, and store it in | if that is not empty, and store it in | ||||
.Fa ch . | .Fa wc . | ||||
If an invalid or incomplete character is found, it is discarded, | If an invalid or incomplete character is found, it is discarded, | ||||
.Va errno | .Va errno | ||||
is set to | is set to | ||||
.Er EILSEQ , | .Er EILSEQ , | ||||
and the next character is read and stored in | and the next character is read and stored in | ||||
.Fa ch . | .Fa wc . | ||||
Returns 1 if a valid character was read, 0 on end of file, or \-1 on | Returns 1 if a valid character was read, 0 on end of file, or \-1 on | ||||
.Xr read 2 | .Xr read 2 | ||||
failure. | failure. | ||||
In the latter case, | In the latter case, | ||||
.Va errno | .Va errno | ||||
is set to indicate the error. | is set to indicate the error. | ||||
.It Fn el_getc | .It Fn el_getc | ||||
Read a wide character as described for | Read a wide character as described for | ||||
.Fn el_wgetc | .Fn el_wgetc | ||||
and return 0 on end of file or \-1 on failure. | and return 0 on end of file or \-1 on failure. | ||||
If the wide character can be represented as a single-byte character, | If the wide character can be represented as a single-byte character, | ||||
convert it with | convert it with | ||||
.Xr wctob 3 , | .Xr wctob 3 , | ||||
store the result in | store the result in | ||||
.Fa ch , | .Fa ch , | ||||
and return 1; otherwise, set | and return 1; otherwise, set | ||||
.Va errno | .Va errno | ||||
to | to | ||||
.Er ERANGE | .Er ERANGE | ||||
and return \-1. | and return \-1. | ||||
In the C or POSIX locale, this simply reads a byte, but for any other | In the C or POSIX locale, this simply reads a byte, but for any other | ||||
locale, including UTF-8, this is rarely useful. | locale, including UTF-8, this is rarely useful. | ||||
.It Fn el_wpush | |||||
Push the wide character string | |||||
.Fa wcs | |||||
back onto the input queue described in | |||||
.Xr editline 7 . | |||||
If the queue overflows, for example due to a recursive macro, | |||||
or if an error occurs, for example because | |||||
.Fa wcs | |||||
is | |||||
.Dv NULL | |||||
or memory allocation fails, the function beeps at the user, | |||||
but does not report the problem to the caller. | |||||
.It Fn el_push | .It Fn el_push | ||||
Pushes | Use the current locale to convert the multibyte string | ||||
.Fa str | .Fa mbs | ||||
back onto the input stream. | to a wide character string, and pass the result to | ||||
This is used by the macro expansion mechanism. | .Fn el_wpush . | ||||
Refer to the description of | |||||
.Ic bind | |||||
.Fl s | |||||
in | |||||
.Xr editrc 5 | |||||
for more information. | |||||
.It Fn el_parse | .It Fn el_parse | ||||
Parses the | Parses the | ||||
.Fa argv | .Fa argv | ||||
array (which is | array (which is | ||||
.Fa argc | .Fa argc | ||||
elements in size) | elements in size) | ||||
to execute builtin | to execute builtin | ||||
.Nm | .Nm | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | |||||
.Pp | .Pp | ||||
If a start/stop literal character is found in the prompt, the | If a start/stop literal character is found in the prompt, the | ||||
character itself | character itself | ||||
is not printed, but characters after it are printed directly to the | is not printed, but characters after it are printed directly to the | ||||
terminal without affecting the state of the current line. | terminal without affecting the state of the current line. | ||||
A subsequent second start/stop literal character ends this behavior. | A subsequent second start/stop literal character ends this behavior. | ||||
This is typically used to embed literal escape sequences that change the | This is typically used to embed literal escape sequences that change the | ||||
color/style of the terminal in the prompt. | color/style of the terminal in the prompt. | ||||
Note that the literal escape character cannot be the last character in the | |||||
prompt, as the escape sequence is attached to the next character in the prompt. | |||||
.Dv 0 | .Dv 0 | ||||
unsets it. | unsets it. | ||||
.It Dv EL_REFRESH | .It Dv EL_REFRESH | ||||
Re-display the current line on the next terminal line. | Re-display the current line on the next terminal line. | ||||
.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" | .It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" | ||||
Define right side prompt printing function as | Define right side prompt printing function as | ||||
.Fa f , | .Fa f , | ||||
which is to return a string that contains the prompt. | which is to return a string that contains the prompt. | ||||
▲ Show 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | |||||
.It Dv EL_UNBUFFERED , Fa "int flag" | .It Dv EL_UNBUFFERED , Fa "int flag" | ||||
If | If | ||||
.Fa flag | .Fa flag | ||||
is zero, | is zero, | ||||
unbuffered mode is disabled (the default). | unbuffered mode is disabled (the default). | ||||
In unbuffered mode, | In unbuffered mode, | ||||
.Fn el_gets | .Fn el_gets | ||||
will return immediately after processing a single character. | will return immediately after processing a single character. | ||||
.It Dv EL_GETCFN , Fa "int (*f)(EditLine *, char *c)" | .It Dv EL_GETCFN , Fa "el_rfunc_t f" | ||||
Define the character reading function as | Whenever reading a character, use the function | ||||
.Fa f , | .Bd -ragged -offset indent -compact | ||||
which is to return the number of characters read and store them in | .Ft int | ||||
.Fa c . | .Fo f | ||||
This function is called internally by | .Fa "EditLine *e" | ||||
.Fn el_gets | .Fa "wchar_t *wc" | ||||
.Fc | |||||
.Ed | |||||
which stores the character in | |||||
.Fa wc | |||||
and returns 1 on success, 0 on end of file, or \-1 on I/O or encoding | |||||
errors. | |||||
Functions internally using it include | |||||
.Fn el_wgets , | |||||
.Fn el_wgetc , | |||||
.Fn el_gets , | |||||
and | and | ||||
.Fn el_getc . | .Fn el_getc . | ||||
The builtin function can be set or restored with the special function | Initially, a builtin function is installed, and replacing it | ||||
name | is discouraged because writing such a function is very error prone. | ||||
.Dq Dv EL_BUILTIN_GETCFN . | The builtin function can be restored at any time by passing the | ||||
special value | |||||
.Dv EL_BUILTIN_GETCFN | |||||
instead of a function pointer. | |||||
.It Dv EL_CLIENTDATA , Fa "void *data" | .It Dv EL_CLIENTDATA , Fa "void *data" | ||||
Register | Register | ||||
.Fa data | .Fa data | ||||
to be associated with this EditLine structure. | to be associated with this EditLine structure. | ||||
It can be retrieved with the corresponding | It can be retrieved with the corresponding | ||||
.Fn el_get | .Fn el_get | ||||
call. | call. | ||||
.It Dv EL_SETFP , Fa "int fd" , Fa "FILE *fp" | .It Dv EL_SETFP , Fa "int fd" , Fa "FILE *fp" | ||||
Show All 27 Lines | |||||
.Pp | .Pp | ||||
The following values for | The following values for | ||||
.Fa op | .Fa op | ||||
are supported, along with actual type of | are supported, along with actual type of | ||||
.Fa result : | .Fa result : | ||||
.Bl -tag -width 4n | .Bl -tag -width 4n | ||||
.It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c" | .It Dv EL_PROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c" | ||||
Set | Set | ||||
.Fa f . | .Fa f | ||||
to a pointer to the function that displays the prompt. | to a pointer to the function that displays the prompt. | ||||
If | If | ||||
.Fa c | .Fa c | ||||
is not | is not | ||||
.Dv NULL , | .Dv NULL , | ||||
set it to the start/stop literal prompt character. | set it to the start/stop literal prompt character. | ||||
.It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c" | .It Dv EL_RPROMPT , Fa "char *(*f)(EditLine *)" , Fa "char *c" | ||||
Set | Set | ||||
.Fa f . | .Fa f | ||||
to a pointer to the function that displays the prompt. | to a pointer to the function that displays the prompt. | ||||
If | If | ||||
.Fa c | .Fa c | ||||
is not | is not | ||||
.Dv NULL , | .Dv NULL , | ||||
set it to the start/stop literal prompt character. | set it to the start/stop literal prompt character. | ||||
.It Dv EL_EDITOR , Fa "const char **n" | .It Dv EL_EDITOR , Fa "const char **n" | ||||
Set the name of the editor in | Set the name of the editor in | ||||
.Fa n , | .Fa n , | ||||
which will be one of | which will be one of | ||||
.Dq emacs | .Dq emacs | ||||
or | or | ||||
.Dq vi . | .Dq vi . | ||||
.It Dv EL_GETTC , Fa "const char *name" , Fa "void *value" | .It Dv EL_GETTC , Fa "const char *name" , Fa "void *value" | ||||
If | If | ||||
.Fa name | .Fa name | ||||
is a valid | is a valid | ||||
.Xr termcap 5 | .Xr termcap 5 | ||||
capability set | capability set | ||||
.Fa value | .Fa value | ||||
to the current value of that capability. | to the current value of that capability. | ||||
.It Dv EL_SIGNAL , Fa "int *s" | .It Dv EL_SIGNAL , Fa "int *s" | ||||
Set | Set | ||||
.Fa s | .Fa s | ||||
to non zero if | to non-zero if | ||||
.Nm | .Nm | ||||
has installed private signal handlers (see | has installed private signal handlers (see | ||||
.Fn el_get | .Fn el_get | ||||
above). | above). | ||||
.It Dv EL_EDITMODE , Fa "int *c" | .It Dv EL_EDITMODE , Fa "int *c" | ||||
Set | Set | ||||
.Fa c | .Fa c | ||||
to non-zero if editing is enabled. | to non-zero if editing is enabled. | ||||
.It Dv EL_GETCFN , Fa "int (**f)(EditLine *, char *)" | .It Dv EL_GETCFN , Fa "el_rfunc_t *f" | ||||
Return a pointer to the function that read characters, which is equal to | Set | ||||
.Dq Dv EL_BUILTIN_GETCFN | .Fa f | ||||
in the case of the default builtin function. | to a pointer to the function that reads characters, or to | ||||
.Dv EL_BUILTIN_GETCFN | |||||
if the builtin function is in use. | |||||
.It Dv EL_CLIENTDATA , Fa "void **data" | .It Dv EL_CLIENTDATA , Fa "void **data" | ||||
Set | Set | ||||
.Fa data | .Fa data | ||||
to the previously registered client data set by an | to the previously registered client data set by an | ||||
.Fn el_set | .Fn el_set | ||||
call. | call. | ||||
.It Dv EL_UNBUFFERED , Fa "int *c" | .It Dv EL_UNBUFFERED , Fa "int *c" | ||||
Set | Set | ||||
Show All 27 Lines | |||||
.Fn el_parse | .Fn el_parse | ||||
is called for each line in | is called for each line in | ||||
.Fa file . | .Fa file . | ||||
If | If | ||||
.Fa file | .Fa file | ||||
is | is | ||||
.Dv NULL , | .Dv NULL , | ||||
try | try | ||||
.Pa $EDITRC | |||||
and if that is not set | |||||
.Pa $HOME/.editrc . | .Pa $HOME/.editrc . | ||||
Refer to | Refer to | ||||
.Xr editrc 5 | .Xr editrc 5 | ||||
for details on the format of | for details on the format of | ||||
.Fa file . | .Fa file . | ||||
.Fn el_source | .Fn el_source | ||||
returns 0 on success and \-1 on error. | returns 0 on success and \-1 on error. | ||||
.It Fn el_resize | .It Fn el_resize | ||||
▲ Show 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | |||||
.Fa ptr | .Fa ptr | ||||
is the argument given to a function when it's invoked. | is the argument given to a function when it's invoked. | ||||
.It Dv H_FIRST | .It Dv H_FIRST | ||||
Return the first element in the history. | Return the first element in the history. | ||||
.It Dv H_LAST | .It Dv H_LAST | ||||
Return the last element in the history. | Return the last element in the history. | ||||
.It Dv H_PREV | .It Dv H_PREV | ||||
Return the previous element in the history. | Return the previous element in the history. | ||||
It is newer than the current one. | |||||
.It Dv H_NEXT | .It Dv H_NEXT | ||||
Return the next element in the history. | Return the next element in the history. | ||||
It is older than the current one. | |||||
.It Dv H_CURR | .It Dv H_CURR | ||||
Return the current element in the history. | Return the current element in the history. | ||||
.It Dv H_SET , Fa "int position" | .It Dv H_SET , Fa "int position" | ||||
Set the cursor to point to the requested element. | Set the cursor to point to the requested element. | ||||
.It Dv H_ADD , Fa "const char *str" | .It Dv H_ADD , Fa "const char *str" | ||||
Append | Append | ||||
.Fa str | .Fa str | ||||
to the current element of the history, or perform the | to the current element of the history, or perform the | ||||
Show All 39 Lines | |||||
.It Dv H_SAVE , Fa "const char *file" | .It Dv H_SAVE , Fa "const char *file" | ||||
Save the history list to | Save the history list to | ||||
.Fa file . | .Fa file . | ||||
.It Dv H_SAVE_FP , Fa "FILE *fp" | .It Dv H_SAVE_FP , Fa "FILE *fp" | ||||
Save the history list to the opened | Save the history list to the opened | ||||
.Ft FILE | .Ft FILE | ||||
pointer | pointer | ||||
.Fa fp . | .Fa fp . | ||||
.It Dv H_NSAVE_FP , Fa "size_t n" , Fa "FILE *fp" | |||||
Save the last | |||||
.Ft n | |||||
history entries to the opened | |||||
.Ft FILE | |||||
pointer | |||||
.Fa fp . | |||||
.It Dv H_SETUNIQUE , Fa "int unique" | .It Dv H_SETUNIQUE , Fa "int unique" | ||||
Set flag that adjacent identical event strings should not be entered | Set flag that adjacent identical event strings should not be entered | ||||
into the history. | into the history. | ||||
.It Dv H_GETUNIQUE | .It Dv H_GETUNIQUE | ||||
Retrieve the current setting if adjacent identical elements should | Retrieve the current setting if adjacent identical elements should | ||||
be entered into the history. | be entered into the history. | ||||
.It Dv H_DEL , Fa "int e" | .It Dv H_DEL , Fa "int e" | ||||
Delete the event numbered | Delete the event numbered | ||||
.Fa e . | .Fa e . | ||||
This function is only provided for | This function is only provided for | ||||
.Xr readline 3 | .Nm readline | ||||
compatibility. | compatibility. | ||||
The caller is responsible for free'ing the string in the returned | The caller is responsible for free'ing the string in the returned | ||||
.Fa HistEvent . | .Fa HistEvent . | ||||
.El | .El | ||||
.Pp | .Pp | ||||
.Fn history | .Fn history | ||||
returns \*[Gt]= 0 if the operation | returns >= 0 if the operation | ||||
.Fa op | .Fa op | ||||
succeeds. | succeeds. | ||||
Otherwise, \-1 is returned and | Otherwise, \-1 is returned and | ||||
.Fa ev | .Fa ev | ||||
is updated to contain more details about the error. | is updated to contain more details about the error. | ||||
.El | .El | ||||
.Sh TOKENIZATION FUNCTIONS | .Sh TOKENIZATION FUNCTIONS | ||||
The tokenization functions use a common data structure, | The tokenization functions use a common data structure, | ||||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Lines | |||||
. | . | ||||
.\"XXX.Sh EXAMPLES | .\"XXX.Sh EXAMPLES | ||||
.\"XXX: provide some examples | .\"XXX: provide some examples | ||||
.Sh SEE ALSO | .Sh SEE ALSO | ||||
.Xr sh 1 , | .Xr sh 1 , | ||||
.Xr signal 3 , | .Xr signal 3 , | ||||
.Xr termcap 3 , | .Xr termcap 3 , | ||||
.Xr editrc 5 , | .Xr editrc 5 , | ||||
.Xr termcap 5 | .Xr termcap 5 , | ||||
.Xr editline 7 | |||||
.Sh HISTORY | .Sh HISTORY | ||||
The | The | ||||
.Nm | .Nm | ||||
library first appeared in | library first appeared in | ||||
.Bx 4.4 . | .Bx 4.4 . | ||||
.Dv CC_REDISPLAY | .Dv CC_REDISPLAY | ||||
appeared in | appeared in | ||||
.Nx 1.3 . | .Nx 1.3 . | ||||
▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines |