Compare commits

...

76 Commits

Author SHA1 Message Date
Joachim Wiberg
9df73e8670
Merge pull request #74 from tgree/macos_prototypes_fix
Fix function prototypes
2025-04-06 13:34:10 +02:00
Terry Greeniaus
f53bebdbe9 Fix function prototypes.
This allows it to compile on macOS 15.3.2 using the default command-line
tools (clang-1600.0.26.6).
2025-04-05 23:17:20 -06:00
Joachim Wiberg
50bde4b5c3 Constify
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-08 21:41:48 +01:00
Joachim Wiberg
651c0bf38b examples: update prompt in fileman to show cwd
This shows off the rl_set_prompt() API to provide a more dynamic prompt.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-08 21:36:12 +01:00
Joachim Wiberg
d1ea173949 Fix and make sure to use rl_set_prompt() API
Fixes #51

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-08 21:34:56 +01:00
Joachim Wiberg
2c0313a3b5 Move forward wordwise should move to end of current word
For a similar feel like GNU Readline we should not skip to the next word
but stop at the end of the current.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-08 08:22:27 +01:00
Joachim Wiberg
41d80b5b14 Calling Ctrl-U should delete from cursor to beginning
Fixes #71

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-08 08:12:19 +01:00
Joachim Wiberg
c7437c8ce3 Fix doube free in completion
When falling back to rl_filename_completion_fuction as compentry
generator, the complete() function caused double free because the
generator did not return a strdup'ed entry but one of its own that
it freed when done.

Fixes #56

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-07 10:38:57 +01:00
Joachim Wiberg
22bdb0478c Minor, update maintainer last name
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-12-07 08:33:54 +01:00
Joachim Wiberg
fb4d7268de
Merge pull request #70 from 9999years/recognize-meta-arrows
Recognize `Meta+Left` and `Meta+Right` for word navigation
2024-12-07 08:32:55 +01:00
Rebecca Turner
4c4455353a
Add support for \e[1;3C and \e[1;3D 2024-09-09 09:44:44 -07:00
Rebecca Turner
d0f2a5bc23
Recognize Meta+Left and Meta+Right
I'm not sure exactly where to find canonical documentation for these
codes, but this seems to match what my terminal produces (macOS + iTerm2
+ Fish + Tmux).

It might also be nice to have some more support for editing the bindings
for these characters; sequences of more than one character are not
supported by `el_bind_key` and similar.
2024-09-08 19:32:28 -07:00
Joachim Wiberg
ac81ca6d4b
Merge pull request #69 from vikrrrr/missing-global
Add rl_attempted_completion_over global to header

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2024-09-07 11:02:46 +02:00
Arthur Michas
93d952291f
Add rl_attempted_completion_over global to header
Signed-off-by: Arthur Michas <vikr@protonmail.com>
2024-09-07 02:53:08 +02:00
Joachim Wiberg
caf4b3c0ce
Merge pull request #67 from Feoramund/respect-hist-size 2024-05-27 17:44:43 +02:00
Joachim Wiberg
6207edfe95
Merge pull request #68 from Feoramund/respect-default-prompt 2024-05-27 17:44:05 +02:00
Feoramund
e0f686506a
Respect default prompt
A prompt `"? "` is set in `rl_initialize`, but it is never seen, because
this line was replacing it with `NILSTR`.
2024-05-26 04:13:29 -04:00
Feoramund
aefda06a0c
Respect el_hist_size
It was previously subject to a sort of off-by-one error, because of the
addition of `NILSTR` in `el_prep`. This should allow a history size of 1
to function correctly now.
2024-05-26 03:38:04 -04:00
Joachim Wiberg
425584840c
Merge pull request #64 from trofi/autoconf-2.72-fix 2023-12-24 03:45:37 +01:00
Sergei Trofimovich
2b788be1c8 configure.ac: add second parameter quoting around the rest of AS_IF for consistency 2023-12-23 19:17:19 +00:00
Sergei Trofimovich
f444a316f5 configure.ac: fix autoconf-2.72 compatibility
`autoconf-2.72` slightly changed `AS_IF`/`AC_CHECL_LIB` definitions and
exposed the bug of missng quoting around the arguments:

    editline> ./configure: line 13944: syntax error near unexpected token `;;'
    editline> ./configure: line 13944: ` ;;'

The change adds quoting as suggested by https://savannah.gnu.org/support/index.php?110990
2023-12-23 19:13:52 +00:00
Joachim Wiberg
7633fbceee
Merge pull request #63 from nobody5050/patch-1
fix filename inaccuracy

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2023-01-29 06:47:11 +01:00
nobody5050
d903a940a5
fix filename inaccuracy 2023-01-28 12:44:44 -06:00
Joachim Wiberg
3ccc3a5120
Merge pull request #62 from al20878/master
Fix #61: gcc sign extension warnings

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-10-23 15:14:18 +02:00
Tony Lawrence
c50d4c34d8 Avoid using (char) in <ctype.h> macros (#61) 2022-10-22 20:02:23 -04:00
Tony Lawrence
70c80ac22e Mention autoconf.sh in build instructions (#61) 2022-10-22 20:02:16 -04:00
Joachim Wiberg
9fa05ba384 Add early notice on Windows not being supported
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-02-19 22:41:32 +01:00
Joachim Wiberg
9d4c6f7042 Drop orig. effort to support WIN32
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2022-02-19 22:38:55 +01:00
Joachim Wiberg
fc866f60d6
Merge pull request #57 from rcombs/patch-1
Include stdio.h from editline.h
2022-02-19 22:09:15 +01:00
rcombs
f7b58d3c0d
Include stdio.h from editline.h
Fixes `#include <editline.h>` without first including `<stdio.h>`, which previously errored at the missing typedef for `FILE`.
2022-02-17 17:59:40 -06:00
Joachim Wiberg
36e0921c71
Merge pull request #54 from tejing1/master
handle home and end keys in urxvt
2021-07-06 08:23:08 +02:00
Jeff Huffman
ec62e11a72
handle home and end keys in urxvt 2021-06-27 22:44:30 -04:00
Joachim Wiberg
0f4f5b0228
Merge pull request #53 from oxalica/fix/tmux-home-end
Fix Home (\e[1~) and End (\e[4~) in tmux
2021-05-29 15:22:18 +02:00
oxalica
265c1fb6a0
Fix Home (\e[1~) and End (\e[4~) in tmux 2021-05-29 14:30:05 +08:00
Joachim Wiberg
69c7e86967 Merge branch 'mlundh-bufferOverrunFix'
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2021-02-25 10:51:58 +01:00
Martin Lundh
3acd6a8b60 Fixed buffer overrun issue detected by address sanitizer. 2021-02-25 10:22:50 +01:00
Joachim Nilsson
62bba78258 Fix #41: add missing include in example
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-08-02 02:15:37 +02:00
Joachim Nilsson
63b94d2089 configure: Add --enable-examples option to build examples/
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-06-08 18:47:17 +02:00
Joachim Nilsson
2ebe9058a1
Merge pull request #40 from gh-fork-dump/master
POSIX recommends <sys/select.h> for select()
2020-06-08 18:43:27 +02:00
Stephen Gregoratto
d4b25ca85e include <sys/select.h> in excallback
Fixes an build issue when cross-compiling for SerenityOS[1]

[1] https://github.com/SerenityOS/serenity
2020-06-09 00:21:11 +10:00
Joachim Nilsson
ecabef273e debian: Upload to stable
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 19:07:45 +01:00
Joachim Nilsson
751c8ac7d1 Check for release tag before calling distcheck
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:46:59 +01:00
Joachim Nilsson
70d190340a Update changelogs and bump version for v1.17.1 release
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:46:48 +01:00
Joachim Nilsson
db318fd765 Drop duplicate package: rule
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
d2fa0e4c6e Put auxillary files generated by autotools in aux/
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
3e40e24e11 Reintroduce .tar.gz for distribution archives
For systems that don't have xz in the base install.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
322055b89a debian: Ship upstream ChangeLog in .deb
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
e1981428e7 debian: Add hardening, recommended by lintian
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
d65245abbd debian: .so symlinks should be in -dev package, found by lintian
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
45c9b94e11 debian: Update to Standards-Version 4.3.0 and fix shlib deps
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
bfcf222bdc debian: Add symbols file, found by lintian
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
49c466a23d man: Update mdoc markup of functions
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
6702d3262d debian: Update to copyright format 1.0
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
d8f3759367 debian: Fix missing content in libedtline1, introduced in 1.16.0
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-02-23 18:43:52 +01:00
Joachim Nilsson
8d5d04f667
Merge pull request #38 from echoprotocol/ECHO-732
added fix for multiline representing as one line
2020-01-13 19:04:28 +01:00
dvolynets
ceee039cfc added fix for multiline representing as one line 2020-01-13 12:15:27 +03:00
Joachim Nilsson
02cccd1e87 Update ChangeLog and bump version for v1.17.0
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 09:53:19 +01:00
Joachim Nilsson
01dd4045b4 Bump ABI revision, v1.0.1 --> v1.0.2
Most notably, changes in behavior in history functions.

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 09:49:47 +01:00
Joachim Nilsson
99ae6b86cb Revert "Travis-CI: Disable clang temporarily for Coverity Scan run"
This reverts commit d9f725f20a.
2020-01-05 08:29:58 +01:00
Joachim Nilsson
1305d05b75 examples: Refactor CLI unlock gimmick to fix possible Coverity issue
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 08:21:36 +01:00
Joachim Nilsson
d9f725f20a Travis-CI: Disable clang temporarily for Coverity Scan run
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:58:33 +01:00
Joachim Nilsson
7278fd8581 Travis-CI: Clean build between different phases
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:58:13 +01:00
Joachim Nilsson
f619d9d788 Follow-up to d310910, use EOF instead of -1 in calls to reposition()
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:52:31 +01:00
Joachim Nilsson
6c74203cbd Update ChangeLog with latest fixes
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:52:31 +01:00
Joachim Nilsson
b44335f413 Defensive programming, check within boundaries before deref
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:52:31 +01:00
Joachim Nilsson
e36aae07f8 Refactor move_cursor_forward() into tty_forwardn()
- Use same namespace like other tty movement functions
- Replace globally exposed itoa() and dangerous strcpy() with snprintf()

Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:52:31 +01:00
Joachim Nilsson
cf8f962e4f Handle realloc() failures better
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:52:31 +01:00
Joachim Nilsson
deb2884310 Fix error return value from read_history() and write_history()
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2020-01-05 07:52:31 +01:00
Joachim Nilsson
81840c0f84 Update ChangeLog to reflect latest changes
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2019-11-28 07:03:44 +01:00
Joachim Nilsson
0b295197f6 Merge branch 'echoprotocol-simple_multiline' 2019-11-28 07:01:48 +01:00
Joachim Nilsson
1802e086e0 Bump version for v1.17.0 release cycle
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2019-11-28 07:01:13 +01:00
Joachim Nilsson
12d5584721 Fix for() loop; "statement with no effect" warning from GCC
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2019-11-28 06:59:53 +01:00
Joachim Nilsson
35506cd22e Minor, coding style fixups
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
2019-11-28 06:58:37 +01:00
Joachim Nilsson
f35af9f20d Merge branch 'simple_multiline' of https://github.com/echoprotocol/editline into echoprotocol-simple_multiline 2019-11-28 06:41:43 +01:00
dvolynets
498b041a35 fixed indentations 2019-11-20 15:14:21 +03:00
dvolynets
d3109109c4 added simple multiline support 2019-11-20 15:14:02 +03:00
22 changed files with 750 additions and 408 deletions

View File

@ -23,7 +23,7 @@ addons:
description: "A small line editing library"
notification_email: troglobit@gmail.com
build_command_prepend: "./autogen.sh && ./configure --enable-sigstop --enable-terminal-bell"
build_command: "make -j5"
build_command: "make clean all"
branch_pattern: dev
# We don't store generated files (configure and Makefile) in GIT,
@ -31,4 +31,4 @@ addons:
script:
- ./autogen.sh
- ./configure --enable-sigstop --enable-terminal-bell
- make -j5
- make clean all

View File

@ -4,8 +4,35 @@ Change Log
All notable changes to the project are documented in this file.
[1.16.1] - 2019-06-07
---------------------
[1.17.1][] - 2020-02-23
-----------------------
### Fixes
- Fix #38: Fix for multiline representing as one line
- Fix packaging, missing files in libeditline1, regression from 1.16.0
- Fix packaging, update to latest std version
- Fix formatting of function names in man page
- Restore tar.gz distribution, for usability on systems that do not
have xz in their default install
[1.17.0][] - 2020-01-05
-----------------------
### Changes
- Simple multi-line support by Dima Volynets, @dvolynets
### Fixes
- Fix return value from `read_history()` and `write_history()`, could
return `errno` instead of `EOF` to indicate error. Now both functions
have uniform return values on error
- Handle internal `realloc()` errors better. Now memory is not leaked
if `realloc()` fails
- Fix possible NULL pointer dereference in key binding lookup function
[1.16.1][] - 2019-06-07
-----------------------
### Changes
- Major updates to the `editline.3` man page
@ -222,7 +249,9 @@ Adaptations to Debian editline package.
- First version, forked from Minix current 2008-06-06
[UNRELEASED]: https://github.com/troglobit/finit/compare/1.16.0...HEAD
[UNRELEASED]: https://github.com/troglobit/finit/compare/1.17.1...HEAD
[1.17.1]: https://github.com/troglobit/finit/compare/1.17.0...1.17.1
[1.17.0]: https://github.com/troglobit/finit/compare/1.16.1...1.17.0
[1.16.1]: https://github.com/troglobit/finit/compare/1.16.0...1.16.1
[1.16.0]: https://github.com/troglobit/finit/compare/1.15.3...1.16.0
[1.15.3]: https://github.com/troglobit/finit/compare/1.15.2...1.15.3
@ -240,9 +269,3 @@ Adaptations to Debian editline package.
[Travis-CI]: https://travis-ci.org/troglobit/uftpd
[Coverity Scan]: https://scan.coverity.com/projects/2947
[README.md]: https://github.com/troglobit/editline/blob/master/README.md
<!--
-- Local Variables:
-- mode: markdown
-- End:
-->

View File

@ -2,11 +2,11 @@ pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libeditline.pc
doc_DATA = README.md LICENSE
EXTRA_DIST = README.md LICENSE ChangeLog.md INSTALL.md
SUBDIRS = src include man examples
SUBDIRS = src include man
## Generate .deb package
package build-deb:
@dpkg-buildpackage -uc -us
if ENABLE_EXAMPLES
SUBDIRS += examples
endif
## Generate MD5 checksum file
MD5 = md5sum
@ -39,7 +39,7 @@ package:
dpkg-buildpackage -uc -us -B
## Target to run when building a release
release: distcheck release-hook md5-dist package
release: release-hook distcheck md5-dist package
@echo
@echo "Resulting release files:"
@echo "========================================================================="

View File

@ -33,6 +33,8 @@ to use the library is available in the `examples/` directory.
Editline is maintained collaboratively at [GitHub][].
> **Note:** Windows is not a supported target for editline.
Example
-------
@ -56,6 +58,7 @@ sub-directory.
e.g. `~/src/example.c`
```C
#include <stdio.h>
#include <stdlib.h>
#include <editline.h>
@ -195,6 +198,7 @@ current maintainer works exclusively on GNU/Linux systems, so it may use
GCC and GNU Make specific extensions here and there. This is not on
purpose and patches or pull requests to correct this are most welcome!
0. Call <kbd>./autogen.sh</kbd> if you build from git
1. Configure editline with default features: <kbd>./configure</kbd>
2. Build the library and examples: <kbd>make all</kbd>
3. Install using <kbd>make install</kbd>

View File

@ -1,5 +1,6 @@
AC_INIT(editline, 1.16.1, https://github.com/troglobit/editline/issues)
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz])
AC_INIT(editline, 1.17.1, https://github.com/troglobit/editline/issues)
AC_CONFIG_AUX_DIR(aux)
AM_INIT_AUTOMAKE([1.11 foreign dist-xz])
AM_SILENT_RULES([yes])
AC_CONFIG_MACRO_DIR([m4])
@ -60,29 +61,35 @@ AC_ARG_ENABLE(terminal-bell,
AC_ARG_ENABLE(termcap,
AS_HELP_STRING([--enable-termcap], [Use termcap library to query terminal size.]))
AC_ARG_ENABLE([examples],
[AC_HELP_STRING([--enable-examples], [Build examples/ directory])],
[], [enable_examples=no])
#
# Check what features have been enabled
#
AS_IF([test "x$enable_unique_history" != "xno"],
AC_DEFINE(CONFIG_UNIQUE_HISTORY, 1, [Define to skip duplicate lines in the scrollback history.]))
AS_IF([test "x$enable_unique_history" != "xno"], [
AC_DEFINE(CONFIG_UNIQUE_HISTORY, 1, [Define to skip duplicate lines in the scrollback history.])])
AS_IF([test "x$enable_terminal_bell" != "xno"],
AC_DEFINE(CONFIG_ANSI_ARROWS, 1, [Define to include ANSI arrow keys support.]))
AS_IF([test "x$enable_terminal_bell" != "xno"], [
AC_DEFINE(CONFIG_ANSI_ARROWS, 1, [Define to include ANSI arrow keys support.])])
AS_IF([test "x$enable_eof" != "xno"],
AC_DEFINE(CONFIG_EOF, 1, [Define to enable EOF (Ctrl-D) key.]))
AS_IF([test "x$enable_eof" != "xno"], [
AC_DEFINE(CONFIG_EOF, 1, [Define to enable EOF (Ctrl-D) key.])])
AS_IF([test "x$enable_sigint" != "xno"],
AC_DEFINE(CONFIG_SIGINT, 1, [Define to enable SIGINT (Ctrl-C) key.]))
AS_IF([test "x$enable_sigint" != "xno"], [
AC_DEFINE(CONFIG_SIGINT, 1, [Define to enable SIGINT (Ctrl-C) key.])])
AS_IF([test "x$enable_sigstop" = "xyes"],
AC_DEFINE(CONFIG_SIGSTOP, 1, [Define to enable SIGSTOP (Ctrl-Z) key.]))
AS_IF([test "x$enable_sigstop" = "xyes"], [
AC_DEFINE(CONFIG_SIGSTOP, 1, [Define to enable SIGSTOP (Ctrl-Z) key.])])
AS_IF([test "x$enable_terminal_bell" = "xyes"],
AC_DEFINE(CONFIG_TERMINAL_BELL, 1, [Define to enable terminal bell on completion.]))
AS_IF([test "x$enable_terminal_bell" = "xyes"], [
AC_DEFINE(CONFIG_TERMINAL_BELL, 1, [Define to enable terminal bell on completion.])])
AM_CONDITIONAL([ENABLE_EXAMPLES], [test "$enable_examples" = yes])
# Check for a termcap compatible library if enabled
AS_IF([test "x$enable_termcap" = "xyes"],
AS_IF([test "x$enable_termcap" = "xyes"], [
AC_DEFINE(CONFIG_USE_TERMCAP, 1, [Define to use the termcap library for terminal size.])
AC_CHECK_LIB(terminfo, tgetent, , [
AC_CHECK_LIB(termcap, tgetent, , [
@ -93,7 +100,7 @@ AS_IF([test "x$enable_termcap" = "xyes"],
])
])
])
]))
])])
# Generate all files
AC_OUTPUT

17
debian/changelog vendored
View File

@ -1,3 +1,20 @@
editline (1.17.1) stable; urgency=medium
* Fix multiline representing as one line
* Fix missing content in libedtline1, introduced in 1.16.0
* Update packaging to latest std version
-- Joachim Nilsson <troglobit@gmail.com> Sun, 23 Feb 2020 18:46:41 +0100
editline (1.17.0) unstable; urgency=medium
* Simple multi-line support
* Handle internal realloc() errors better
* Fix return value from read_history() and write_history()
* Fix potential NULL pointer dereference in key binging lookup
-- Joachim Nilsson <troglobit@gmail.com> Sun, 05 Jan 2020 09:47:34 +0100
editline (1.16.1) unstable; urgency=medium
* Minor bug fix and documentation update release.

2
debian/compat vendored
View File

@ -1 +1 @@
9
10

8
debian/control vendored
View File

@ -1,9 +1,9 @@
Source: editline
Section: devel
Priority: optional
Build-Depends: debhelper (>= 5.0), libtool
Maintainer: Joachim Nilsson <troglobit@gmail.com>
Standards-Version: 3.8.3
Build-Depends: debhelper (>= 10), libtool
Maintainer: Joachim Wiberg <troglobit@gmail.com>
Standards-Version: 4.3.0
Package: libeditline-dev
Architecture: any
@ -21,7 +21,7 @@ Description: development files for libeditline
Package: libeditline1
Architecture: any
Section: libs
Depends: ${misc:Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: line editing library similar to readline
This is a line-editing library. It can be linked into almost any program
to provide command-line editing and recall. It is call-compatible with a

25
debian/copyright vendored
View File

@ -1,17 +1,23 @@
This package was debianized by Jim Studt <jim@federated.com> on
Fri, 5 May 2000 13:25:51 -0500.
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: editline
Upstream-Contact: Joachim Wiberg <troglobit@gmail.com>
Source: http://github.com/troglobit/editline
Comment: This package was originally debianized by Jim Studt <jim@federated.com>
on Fri, 5 May 2000 13:25:51 -0500. It was received from, then upstream
author, Rich Salz <rsalz@shore.net>
It was received from Rich Salz rsalz@shore.net
Files: *
Copyright: 1992,1993 Simmule Turner and Rich Salz.
License: C-News
Upstream Author: Rich Salz rsalz@shore.net
Copyright:
Copyright 1992,1993 Simmule Turner and Rich Salz. All rights reserved.
Files: debian/*
Copyright: 2010-2020 Joachim Wiberg <troglobit@gmail.com>
License: BSD-2-clause
License: C-News
This software is not subject to any license of the American Telephone
and Telegraph Company or of the Regents of the University of California.
.
Permission is granted to anyone to use this software for any purpose on
any computer system, and to alter it and redistribute it freely, subject
to the following restrictions:
@ -24,4 +30,3 @@ Copyright:
misrepresented as being the original software. Since few users
ever read sources, credits must appear in the documentation.
4. This notice may not be removed or altered.

View File

@ -1,4 +1,5 @@
usr/include/*.h
usr/lib/*/libeditline*.*a
usr/lib/*/libeditline.so
usr/lib/*/pkgconfig/*
usr/share/man/man3/*

View File

@ -1 +0,0 @@
usr/lib/*/libeditline*.so*

1
debian/libeditline1.install vendored Normal file
View File

@ -0,0 +1 @@
usr/lib/*/libeditline.so.*

67
debian/libeditline1.symbols vendored Normal file
View File

@ -0,0 +1,67 @@
libeditline.so.1 libeditline1 #MINVER#
* Build-Depends-Package: libeditline-dev
add_history@Base 1.17.1
el_bind_key@Base 1.17.1
el_bind_key_in_metamap@Base 1.17.1
el_del_char@Base 1.17.1
el_filename_complete@Base 1.17.1
el_filename_list_possib@Base 1.17.1
el_find_word@Base 1.17.1
el_hist_size@Base 1.17.1
el_next_hist@Base 1.17.1
el_no_echo@Base 1.17.1
el_no_hist@Base 1.17.1
el_prev_hist@Base 1.17.1
el_print_columns@Base 1.17.1
el_ring_bell@Base 1.17.1
prompt_len@Base 1.17.1
read_history@Base 1.17.1
readline@Base 1.17.1
rl_add_slash@Base 1.17.1
rl_attempted_completion_function@Base 1.17.1
rl_attempted_completion_over@Base 1.17.1
rl_callback_handler_install@Base 1.17.1
rl_callback_handler_remove@Base 1.17.1
rl_callback_read_char@Base 1.17.1
rl_clear_message@Base 1.17.1
rl_complete@Base 1.17.1
rl_completion_entry_function@Base 1.17.1
rl_completion_matches@Base 1.17.1
rl_deprep_term_function@Base 1.17.1
rl_deprep_terminal@Base 1.17.1
rl_end@Base 1.17.1
rl_eof@Base 1.17.1
rl_erase@Base 1.17.1
rl_event_hook@Base 1.17.1
rl_filename_completion_function@Base 1.17.1
rl_forced_update_display@Base 1.17.1
rl_getc@Base 1.17.1
rl_getc_function@Base 1.17.1
rl_inhibit_complete@Base 1.17.1
rl_initialize@Base 1.17.1
rl_insert_text@Base 1.17.1
rl_instream@Base 1.17.1
rl_intr@Base 1.17.1
rl_kill@Base 1.17.1
rl_line_buffer@Base 1.17.1
rl_list_possib@Base 1.17.1
rl_mark@Base 1.17.1
rl_meta_chars@Base 1.17.1
rl_outstream@Base 1.17.1
rl_point@Base 1.17.1
rl_prep_term_function@Base 1.17.1
rl_prep_terminal@Base 1.17.1
rl_prompt@Base 1.17.1
rl_quit@Base 1.17.1
rl_readline_name@Base 1.17.1
rl_refresh_line@Base 1.17.1
rl_reset_terminal@Base 1.17.1
rl_restore_prompt@Base 1.17.1
rl_save_prompt@Base 1.17.1
rl_set_complete_func@Base 1.17.1
rl_set_getc_func@Base 1.17.1
rl_set_list_possib_func@Base 1.17.1
rl_set_prompt@Base 1.17.1
rl_ttyset@Base 1.17.1
rl_uninitialize@Base 1.17.1
write_history@Base 1.17.1

12
debian/rules vendored
View File

@ -1,8 +1,16 @@
#!/usr/bin/make -f
# export DH_VERBOSE=1
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_CFLAGS_MAINT_APPEND = -W -Wall -Wextra -O3
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
include /usr/share/dpkg/default.mk # provides DEB_VERSION
%:
dh $@ --with autoreconf
override_dh_installchangelogs:
dh_installchangelogs ChangeLog.md

View File

@ -38,9 +38,9 @@ static char *my_rl_complete(char *token, int *match)
int count = 0;
for (i = 0; list[i]; i++) {
int partlen = strlen (token); /* Part of token */
int partlen = strlen(token); /* Part of token */
if (!strncmp (list[i], token, partlen)) {
if (!strncmp(list[i], token, partlen)) {
index = i;
matchlen = partlen;
count ++;
@ -49,7 +49,7 @@ static char *my_rl_complete(char *token, int *match)
if (count == 1) {
*match = 1;
return strdup (list[index] + matchlen);
return strdup(list[index] + matchlen);
}
return NULL;
@ -64,11 +64,14 @@ static int my_rl_list_possib(char *token, char ***av)
for (num = 0; list[num]; num++)
;
copy = (char **) malloc (num * sizeof(char *));
if (!num)
return 0;
copy = malloc(num * sizeof(char *));
for (i = 0; i < num; i++) {
if (!strncmp (list[i], token, strlen (token))) {
copy[total] = strdup (list[i]);
total ++;
if (!strncmp(list[i], token, strlen (token))) {
copy[total] = strdup(list[i]);
total++;
}
}
*av = copy;
@ -106,14 +109,41 @@ el_status_t do_suspend(void)
static void breakit(int signo)
{
(void)signo;
puts("Got SIGINT");
}
/* Use el_no_echo when reading passwords and similar */
static int unlock(const char *passwd)
{
char *prompt = "Enter password: ";
char *line;
int rc = 1;
el_no_echo = 1;
while ((line = readline(prompt))) {
rc = strncmp(line, passwd, strlen(passwd));
free(line);
if (rc) {
printf("\nWrong password, please try again, it's secret.\n");
continue;
}
printf("\nAchievement unlocked!\n");
break;
}
el_no_echo = 0;
return rc;
}
int main(void)
{
char *line;
char *prompt = "cli> ";
char *passwd = "Enter password: ";
signal(SIGINT, breakit);
@ -126,30 +156,12 @@ int main(void)
read_history(HISTORY);
while ((line = readline(prompt))) {
int next = 0;
/* Use el_no_echo when reading passwords and similar */
if (!strncmp(line, "unlock", 6)) {
el_no_echo = 1;
while ((line = readline(passwd))) {
if (strncmp(line, "secret", 6)) {
printf("\nWrong password, please try again, it's secret.\n");
free(line);
continue;
}
el_no_echo = 0;
printf("\nAchievement unlocked!\n");
free(line);
next = 1;
break;
}
if (!strncmp(line, "unlock", 6) && unlock("secret")) {
free(line);
fprintf(stderr, "\nSecurity breach, user logged out!\n");
break;
}
if (next)
continue;
if (*line != '\0')
printf("\t\t\t|%s|\n", line);
free(line);

View File

@ -39,6 +39,7 @@ Jeff
#include <stdio.h>
#include <sys/types.h>
#include <sys/select.h>
#ifdef HAVE_STDLIB_H
#include <stdlib.h>

View File

@ -7,6 +7,7 @@
*/
#include <assert.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/file.h>
@ -22,7 +23,7 @@
#include "editline.h"
void too_dangerous(char *caller);
void initialize_readline();
void initialize_readline(const char *prompt);
int execute_line(char *line);
int valid_argument(char *caller, char *arg);
@ -61,8 +62,15 @@ struct cmd commands[] = {
};
/* Forward declarations. */
char *stripwhite();
struct cmd *find_command();
char *stripwhite(char *string);
struct cmd *find_command(char *name);
/* ~/.fileman_history */
char *fileman_history;
/* Prompt base and current */
const char *prompt_init;
char *prompt_curr;
/* When non-zero, this means the user is done using this program. */
int done;
@ -72,12 +80,11 @@ int main(int argc, char **argv)
char *line, *s;
setlocale(LC_CTYPE, "");
initialize_readline(); /* Bind our completer. */
initialize_readline("(FileMan)");
/* Loop reading and executing lines until the user quits. */
for (; done == 0;) {
line = readline("FileMan: ");
line = readline(NULL);
if (!line)
break;
@ -107,6 +114,10 @@ int main(int argc, char **argv)
free(line);
}
puts("");
write_history(fileman_history);
free(fileman_history);
return 0;
}
@ -188,19 +199,58 @@ char *stripwhite(char *string)
char *command_generator(const char *, int);
char **fileman_completion(const char *, int, int);
void fileman_prompt(void);
/*
* Tell the GNU Readline library how to complete. We want to try to
* complete on command names if this is the first word in the line, or
* on filenames if not.
*/
void initialize_readline(void)
void initialize_readline(const char *prompt)
{
const char *home;
size_t len;
/* Allow conditional parsing of the ~/.inputrc file. */
rl_readline_name = "FileMan";
/* Tell the completer that we want a crack first. */
rl_attempted_completion_function = fileman_completion;
/* Restore command history */
home = getenv("HOME");
len = (home ? strlen(home) : 0) + 14;
fileman_history = malloc(len);
assert(fileman_history);
snprintf(fileman_history, len, "%s/.fileman_history", home ? home : ".");
read_history(fileman_history);
/* Prompt is updated when moving around in the tree */
prompt_init = prompt;
fileman_prompt();
}
/*
* Update prompt when changing directory. Use an allocated string to
* show off the rl_set_prompt() API for issue #51.
*/
void fileman_prompt(void)
{
char cwd[1024];
size_t len;
if (prompt_curr)
free(prompt_curr);
assert(getcwd(cwd, sizeof(cwd)));
len = strlen(prompt_init) + strlen(cwd) + 10;
prompt_curr = malloc(len);
assert(prompt_curr);
snprintf(prompt_curr, len, "%s %s/> ", prompt_init, cwd);
rl_set_prompt(prompt_curr);
}
/*
@ -377,7 +427,8 @@ int com_cd(char *arg)
return 1;
}
com_pwd("");
//com_pwd("");
fileman_prompt();
return 0;
}

View File

@ -21,6 +21,8 @@
#ifndef EDITLINE_H_
#define EDITLINE_H_
#include <stdio.h>
/* Handy macros when binding keys. */
#define CTL(x) ((x) & 0x1F)
#define ISCTL(x) ((x) && (x) < ' ')
@ -82,6 +84,7 @@ extern int rl_point;
extern int rl_mark;
extern int rl_end;
extern int rl_inhibit_complete;
extern int rl_attempted_completion_over;
extern char *rl_line_buffer;
extern const char *rl_readline_name;
extern FILE *rl_instream; /* The stdio stream from which input is read. Defaults to stdin if NULL - Not supported yet! */

View File

@ -1,4 +1,4 @@
.Dd April 27, 2019
.Dd February 23, 2020
.Dt EDITLINE 3
.Os
.Sh NAME
@ -8,10 +8,22 @@
.Lb libeditline
.Sh SYNOPSIS
.In editline.h
.Fn "char *readline" "const char *prompt"
.Fn "void add_history" "const char *line"
.Fn "int read_history" "const char *filename"
.Fn "int write_history" "const char *filename"
.Ft char *
.Fo readline
.Fa const char *prompt
.Fc
.Ft void
.Fo add_history
.Fa const char *line
.Fc
.Ft int
.Fo read_history
.Fa const char *filename
.Fc
.Ft int
.Fo write_history
.Fa const char *filename
.Fc
.Sh DESCRIPTION
.Nm
is a library that provides n line-editing interface with history. It
@ -263,12 +275,13 @@ int main(void)
The original editline library was posted to comp.sources.unix newsgroup
by created by Simmule R. Turner and Rich Salz in 1992. It now exists in
several forks: Debian, Minix, Heimdal, Festival speech tools, Mozilla,
Google Gadgets for Linux, and many other places. The original manual
page was made by David W. Sanderson.
Google Gadgets for Linux, and many others. The original manual page was
made by David W. Sanderson.
.Pp
This version was originally based on the Minix 2 sources, but has since
evolved to include patches from all relevant forks. It is currently
maintained by Joachim Nilsson at GitHub,
.Aq http://github.com/troglobit/editline
This version stems from the Minix 2 sources, but has since evolved to
include patches from all relevant forks. It is currently maintained by
.An Joachim Wiberg
at
.Lk https://github.com/troglobit/editline "GitHub" .
.Sh BUGS
Does not handle multiple lines or unicode characters well.

View File

@ -3,4 +3,4 @@ libeditline_la_SOURCES = editline.c editline.h complete.c sysunix.c unix.h
libeditline_la_CFLAGS = -std=gnu99
libeditline_la_CFLAGS += -W -Wall -Wextra -Wundef -Wunused -Wstrict-prototypes
libeditline_la_CFLAGS += -Werror-implicit-function-declaration -Wshadow -Wcast-qual
libeditline_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:1:0
libeditline_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:2:0

View File

@ -40,7 +40,7 @@ static int compare(const void *p1, const void *p2)
/* Fill in *avp with an array of names that match file, up to its length.
* Ignore . and .. . */
static int FindMatches(char *dir, char *file, char ***avp)
static int FindMatches(const char *dir, const char *file, char ***avp)
{
char **av;
char **word;
@ -128,7 +128,7 @@ static int FindMatches(char *dir, char *file, char ***avp)
/* Split a pathname into allocated directory and trailing filename parts. */
static int SplitPath(const char *path, char **dirpart, char **filepart)
{
static char DOT[] = ".";
static const char DOT[] = ".";
char *dpart;
char *fpart;
@ -197,14 +197,14 @@ char *el_filename_complete(char *pathname, int *match)
if (ac == 1) {
/* Exactly one match -- finish it off. */
*match = 1;
j = strlen(av[0]) - len + 2;
p = malloc(sizeof(char) * (j + 1));
j = strlen(av[0]) - len + 1;
p = malloc(sizeof(char) * (j + 1));
if (p) {
memcpy(p, av[0] + len, j);
len = strlen(dir) + strlen(av[0]) + 2;
path = malloc(sizeof(char) * len);
len = strlen(dir) + strlen(av[0]) + 2;
path = malloc(sizeof(char) * len);
if (path) {
snprintf(path, len, "%s/%s", dir, av[0]);
snprintf(path, len, "%s/%s", dir, av[0]);
rl_add_slash(path, p);
free(path);
}
@ -243,9 +243,7 @@ char *el_filename_complete(char *pathname, int *match)
char *rl_filename_completion_function(const char *text, int state)
{
char *dir;
char *file;
static char **av;
static char **av, *dir, *file;
static size_t i, ac;
if (!state) {
@ -253,32 +251,47 @@ char *rl_filename_completion_function(const char *text, int state)
return NULL;
ac = FindMatches(dir, file, &av);
free(dir);
free(file);
if (!ac)
if (!ac) {
free(dir);
free(file);
return NULL;
}
i = 0;
}
if (i < ac)
return av[i++];
if (i < ac) {
size_t len = (dir ? strlen(dir) : 0) + strlen(av[i]) + 3;
char *ptr = malloc(len);
if (ptr) {
snprintf(ptr, len, "%s%s", dir, av[i++]);
if (ac == 1)
rl_add_slash(ptr, ptr);
return ptr;
}
}
do {
free(av[--i]);
} while (i > 0);
free(av);
free(dir);
free(file);
return NULL;
}
/* Similar to el_find_word(), but used by GNU Readline API */
static char *rl_find_token(size_t *len)
{
char *ptr;
const char *ptr;
int pos;
for (pos = rl_point; pos < rl_end; pos++) {
if (isspace(rl_line_buffer[pos])) {
if (isspace((unsigned char) rl_line_buffer[pos])) {
if (pos > 0)
pos--;
break;
@ -286,7 +299,7 @@ static char *rl_find_token(size_t *len)
}
ptr = &rl_line_buffer[pos];
while (pos >= 0 && !isspace(rl_line_buffer[pos])) {
while (pos >= 0 && !isspace((unsigned char) rl_line_buffer[pos])) {
if (pos == 0)
break;
@ -367,8 +380,12 @@ static char *complete(char *token, int *match)
free(word);
word = NULL;
if (words[0])
/* Exactly one match -- finish it off. */
if (words[0] && !words[1]) {
*match = 1;
word = strdup(words[0] + len);
}
while (words[i])
free(words[i++]);
@ -378,6 +395,9 @@ static char *complete(char *token, int *match)
return word;
}
if (word)
free(word);
fallback:
return el_filename_complete(token, match);
}

File diff suppressed because it is too large Load Diff