mirror of
				https://github.com/troglobit/editline.git
				synced 2025-11-01 01:01:34 +08:00 
			
		
		
		
	Compare commits
	
		
			84 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | f735e4d1d5 | ||
|   | 127d995855 | ||
|   | 1eb7924d47 | ||
|   | dd6512ad98 | ||
|   | 46446d00b5 | ||
|   | 37a7255e4e | ||
|   | 6e7f0ad3c2 | ||
|   | 2c40d1f84d | ||
|   | 9df73e8670 | ||
|   | f53bebdbe9 | ||
|   | 50bde4b5c3 | ||
|   | 651c0bf38b | ||
|   | d1ea173949 | ||
|   | 2c0313a3b5 | ||
|   | 41d80b5b14 | ||
|   | c7437c8ce3 | ||
|   | 22bdb0478c | ||
|   | fb4d7268de | ||
|   | 4c4455353a | ||
|   | d0f2a5bc23 | ||
|   | ac81ca6d4b | ||
|   | 93d952291f | ||
|   | caf4b3c0ce | ||
|   | 6207edfe95 | ||
|   | e0f686506a | ||
|   | aefda06a0c | ||
|   | 425584840c | ||
|   | 2b788be1c8 | ||
|   | f444a316f5 | ||
|   | 7633fbceee | ||
|   | d903a940a5 | ||
|   | 3ccc3a5120 | ||
|   | c50d4c34d8 | ||
|   | 70c80ac22e | ||
|   | 9fa05ba384 | ||
|   | 9d4c6f7042 | ||
|   | fc866f60d6 | ||
|   | f7b58d3c0d | ||
|   | 36e0921c71 | ||
|   | ec62e11a72 | ||
|   | 0f4f5b0228 | ||
|   | 265c1fb6a0 | ||
|   | 69c7e86967 | ||
|   | 3acd6a8b60 | ||
|   | 62bba78258 | ||
|   | 63b94d2089 | ||
|   | 2ebe9058a1 | ||
|   | d4b25ca85e | ||
|   | ecabef273e | ||
|   | 751c8ac7d1 | ||
|   | 70d190340a | ||
|   | db318fd765 | ||
|   | d2fa0e4c6e | ||
|   | 3e40e24e11 | ||
|   | 322055b89a | ||
|   | e1981428e7 | ||
|   | d65245abbd | ||
|   | 45c9b94e11 | ||
|   | bfcf222bdc | ||
|   | 49c466a23d | ||
|   | 6702d3262d | ||
|   | d8f3759367 | ||
|   | 8d5d04f667 | ||
|   | ceee039cfc | ||
|   | 02cccd1e87 | ||
|   | 01dd4045b4 | ||
|   | 99ae6b86cb | ||
|   | 1305d05b75 | ||
|   | d9f725f20a | ||
|   | 7278fd8581 | ||
|   | f619d9d788 | ||
|   | 6c74203cbd | ||
|   | b44335f413 | ||
|   | e36aae07f8 | ||
|   | cf8f962e4f | ||
|   | deb2884310 | ||
|   | 81840c0f84 | ||
|   | 0b295197f6 | ||
|   | 1802e086e0 | ||
|   | 12d5584721 | ||
|   | 35506cd22e | ||
|   | f35af9f20d | ||
|   | 498b041a35 | ||
|   | d3109109c4 | 
							
								
								
									
										38
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| name: Bob the Builder | ||||
|  | ||||
| # Run on all branches, including all pull requests, except the 'dev' | ||||
| # branch which we use for Coverity Scan (limited tokens/day) | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - '**' | ||||
|       - '!dev' | ||||
|   pull_request: | ||||
|     branches: | ||||
|       - '**' | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|     name: ${{ matrix.compiler }} | ||||
|     runs-on: ubuntu-latest | ||||
|     strategy: | ||||
|       matrix: | ||||
|         compiler: [gcc, clang] | ||||
|       fail-fast: false | ||||
|     env: | ||||
|       MAKEFLAGS: -j3 | ||||
|       CC: ${{ matrix.compiler }} | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - name: Configure | ||||
|         run: | | ||||
|           ./autogen.sh | ||||
|           ./configure --prefix= --disable-silent-rules \ | ||||
|                       --enable-sigstop --enable-terminal-bell | ||||
|       - name: Build | ||||
|         run: | | ||||
|           make | ||||
|       - name: Install to ~/tmp and Inspect | ||||
|         run: | | ||||
|           DESTDIR=~/tmp make install-strip | ||||
|           ls -lR ~/tmp | ||||
							
								
								
									
										76
									
								
								.github/workflows/coverity.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								.github/workflows/coverity.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| name: Coverity Scan | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - 'dev' | ||||
|  | ||||
| env: | ||||
|   PROJECT_NAME: editline | ||||
|   CONTACT_EMAIL: troglobit@gmail.com | ||||
|   COVERITY_NAME: troglobit-editline | ||||
|   COVERITY_PROJ: troglobit%2Feditline | ||||
|  | ||||
| jobs: | ||||
|   coverity: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - name: Fetch latest Coverity Scan MD5 | ||||
|         id: var | ||||
|         env: | ||||
|           TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} | ||||
|         run: | | ||||
|           wget -q https://scan.coverity.com/download/cxx/linux64         \ | ||||
|                --post-data "token=$TOKEN&project=${COVERITY_PROJ}&md5=1" \ | ||||
|                -O coverity-latest.tar.gz.md5 | ||||
|           echo "md5=$(cat coverity-latest.tar.gz.md5)" | tee -a $GITHUB_OUTPUT | ||||
|       - uses: actions/cache@v4 | ||||
|         id: cache | ||||
|         with: | ||||
|           path: coverity-latest.tar.gz | ||||
|           key: ${{ runner.os }}-coverity-${{ steps.var.outputs.md5 }} | ||||
|           restore-keys: | | ||||
|             ${{ runner.os }}-coverity-${{ steps.var.outputs.md5 }} | ||||
|             ${{ runner.os }}-coverity- | ||||
|             ${{ runner.os }}-coverity | ||||
|       - name: Download Coverity Scan | ||||
|         env: | ||||
|           TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} | ||||
|         run: | | ||||
|           if [ ! -f coverity-latest.tar.gz ]; then | ||||
|             wget -q https://scan.coverity.com/download/cxx/linux64   \ | ||||
|                  --post-data "token=$TOKEN&project=${COVERITY_PROJ}" \ | ||||
|                  -O coverity-latest.tar.gz | ||||
|           else | ||||
|             echo "Latest Coverity Scan available from cache :-)" | ||||
|             md5sum coverity-latest.tar.gz | ||||
|           fi | ||||
|           mkdir coverity | ||||
|           tar xzf coverity-latest.tar.gz --strip 1 -C coverity | ||||
|       - name: Configure | ||||
|         run: | | ||||
|           ./autogen.sh | ||||
|           ./configure --prefix= --enable-sigstop --enable-terminal-bell --enable-examples | ||||
|       - name: Build | ||||
|         run: | | ||||
|           export PATH=`pwd`/coverity/bin:$PATH | ||||
|           cov-build --dir cov-int make | ||||
|       - name: Submit results to Coverity Scan | ||||
|         env: | ||||
|           TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} | ||||
|         run: | | ||||
|           tar czvf ${PROJECT_NAME}.tgz cov-int | ||||
|           curl \ | ||||
|             --form project=${COVERITY_NAME} \ | ||||
|             --form token=$TOKEN \ | ||||
|             --form email=${CONTACT_EMAIL} \ | ||||
|             --form file=@${PROJECT_NAME}.tgz \ | ||||
|             --form version=trunk \ | ||||
|             --form description="${PROJECT_NAME} $(git rev-parse HEAD)" \ | ||||
|             https://scan.coverity.com/builds?project=${COVERITY_PROJ} | ||||
|       - name: Upload build.log | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: coverity-build.log | ||||
|           path: cov-int/build-log.txt | ||||
							
								
								
									
										33
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.github/workflows/release.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| name: Release General | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     tags: | ||||
|       - '[0-9]+.[0-9]+*' | ||||
|  | ||||
| jobs: | ||||
|   release: | ||||
|     name: Build and upload release tarball | ||||
|     if: startsWith(github.ref, 'refs/tags/') | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - name: Creating Makefiles ... | ||||
|         run: | | ||||
|           ./autogen.sh | ||||
|           ./configure --prefix= | ||||
|       - name: Build release ... | ||||
|         run: | | ||||
|           make release | ||||
|           mkdir -p artifacts/ | ||||
|           mv ../*.tar.* artifacts/ | ||||
|       - name: Extract ChangeLog entry ... | ||||
|         run: | | ||||
|           awk '/-----*/{if (x == 1) exit; x=1;next}x' ChangeLog.md \ | ||||
|               |head -n -1 > release.md | ||||
|           cat release.md | ||||
|       - uses: ncipollo/release-action@v1 | ||||
|         with: | ||||
|           name: Editline v${{ github.ref_name }} | ||||
|           bodyFile: "release.md" | ||||
|           artifacts: "artifacts/*" | ||||
							
								
								
									
										34
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										34
									
								
								.travis.yml
									
									
									
									
									
								
							| @@ -1,34 +0,0 @@ | ||||
| # Travis CI integration | ||||
| # Defaults to GNU GCC and autotools: ./configure && make && make test | ||||
| language: c | ||||
|  | ||||
| # We don't need to install packages, use dockerized build, quicker | ||||
| sudo: false | ||||
|  | ||||
| # Test build with both GCC and Clang (LLVM) | ||||
| compiler: | ||||
|   - gcc | ||||
|   - clang | ||||
|  | ||||
| env: | ||||
|   global: | ||||
|    # The next declaration is the encrypted COVERITY_SCAN_TOKEN, created | ||||
|    #   via the "travis encrypt" command using the project repo's public key | ||||
|    - secure: "iFll6pD0lzVYVRUlbPBGOTB0xqoEsC0BeUdftfRQdnEssruWOEKtf3VH6gSNRu8QMPeTCNhl4fsWUJhnowZgoobi/XcsXxFv/oJQZ1sa7cQUXizeEYUmsDZxUiw/sNsWlUz6dBKPepQStYyOK/tJLQ1GfLi1ESTPt6anokMVDbk=" | ||||
|  | ||||
| addons: | ||||
|   coverity_scan: | ||||
|     project: | ||||
|       name: "troglobit/editline" | ||||
|       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" | ||||
|     branch_pattern: dev | ||||
|  | ||||
| # We don't store generated files (configure and Makefile) in GIT, | ||||
| # so we must customize the default build script to run ./autogen.sh | ||||
| script: | ||||
|   - ./autogen.sh | ||||
|   - ./configure --enable-sigstop --enable-terminal-bell  | ||||
|   - make -j5 | ||||
							
								
								
									
										41
									
								
								ChangeLog.md
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								ChangeLog.md
									
									
									
									
									
								
							| @@ -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: | ||||
|   --> | ||||
|   | ||||
							
								
								
									
										28
									
								
								Makefile.am
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								Makefile.am
									
									
									
									
									
								
							| @@ -2,23 +2,15 @@ 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 | ||||
|  | ||||
| ## Generate MD5 checksum file | ||||
| MD5 = md5sum | ||||
| md5-dist: | ||||
| 	@for file in $(DIST_ARCHIVES); do	\ | ||||
| 		$(MD5) $$file > ../$$file.md5;	\ | ||||
| 		mv $$file ../;			\ | ||||
| 	done | ||||
| if ENABLE_EXAMPLES | ||||
| SUBDIRS            += examples | ||||
| endif | ||||
|  | ||||
| ## Check if tagged in git | ||||
| release-hook: | ||||
| 	if [ ! `git tag | grep $(PACKAGE_VERSION)` ]; then				\ | ||||
| 	if [ ! `git tag | grep $(PACKAGE_VERSION) | grep $(PACKAGE_VERSION)` ]; then	\ | ||||
| 		echo;									\ | ||||
| 		printf "\e[1m\e[41mCannot find release tag $(PACKAGE_VERSION)\e[0m\n";	\ | ||||
| 		printf "\e[1m\e[5mDo release anyway?\e[0m "; read yorn;			\ | ||||
| @@ -39,13 +31,19 @@ package: | ||||
| 	dpkg-buildpackage -uc -us -B | ||||
|  | ||||
| ## Target to run when building a release | ||||
| release: distcheck release-hook md5-dist package | ||||
| release: release-hook distcheck | ||||
| 	@for file in $(DIST_ARCHIVES); do						\ | ||||
| 		md5sum    $$file > ../$$file.md5;					\ | ||||
| 		sha256sum $$file > ../$$file.sha256;					\ | ||||
| 	done | ||||
| 	@mv $(DIST_ARCHIVES) ../ | ||||
| 	@echo | ||||
| 	@echo "Resulting release files:" | ||||
| 	@echo "=========================================================================" | ||||
| 	@for file in $(DIST_ARCHIVES); do						\ | ||||
| 		printf "%-40s Distribution tarball\n" $$file;				\ | ||||
| 		printf "%-40s " $$file.md5; cat ../$$file.md5 | cut -f1 -d' ';		\ | ||||
| 		printf "%-40s " $$file.md5;    cat ../$$file.md5    | cut -f1 -d' ';	\ | ||||
| 		printf "%-40s " $$file.sha256; cat ../$$file.sha256 | cut -f1 -d' ';	\ | ||||
| 	done | ||||
| 	@for file in `cd ..; ls *$(PACKAGE)*_$(subst _,.,$(VERSION))*`; do		\ | ||||
| 		printf "%-40s Debian/Ubuntu package file\n" $$file;			\ | ||||
|   | ||||
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | ||||
| Editline | ||||
| ======== | ||||
| [![License Badge][]][License] [![Travis Status]][Travis] [![Coverity Status]][Coverity Scan] | ||||
| [![License Badge][]][License] [![GitHub Status][]][GitHub] [![Coverity Status]][Coverity Scan] | ||||
|  | ||||
|  | ||||
| Table of Contents | ||||
| @@ -31,7 +31,9 @@ supplying different options to the GNU configure script.  See the output | ||||
| from <kbd>configure --help</kbd> for details.  Some useful hints on how | ||||
| to use the library is available in the `examples/` directory. | ||||
|  | ||||
| Editline is maintained collaboratively at [GitHub][]. | ||||
| Editline is maintained collaboratively at [GitHub][1]. | ||||
|  | ||||
| > **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> | ||||
| @@ -247,7 +251,7 @@ efforts. | ||||
|  | ||||
| Outstanding issues are listed in the [TODO.md][] file. | ||||
|  | ||||
| [GitHub]:          https://github.com/troglobit/editline | ||||
| [1]:               https://github.com/troglobit/editline | ||||
| [line editing]:    https://github.com/troglobit/editline/blob/master/docs/README | ||||
| [release tarball]: https://github.com/troglobit/editline/releases | ||||
| [maintainer]:      http://troglobit.com | ||||
| @@ -266,7 +270,7 @@ Outstanding issues are listed in the [TODO.md][] file. | ||||
| [Steve Tell]:      http://www.cs.unc.edu/~tell/dist.html | ||||
| [License]:         https://github.com/troglobit/editline/blob/master/LICENSE | ||||
| [License Badge]:   https://img.shields.io/badge/License-C%20News-orange.svg | ||||
| [Travis]:          https://travis-ci.org/troglobit/editline | ||||
| [Travis Status]:   https://travis-ci.org/troglobit/editline.png?branch=master | ||||
| [GitHub]:          https://github.com/troglobit/editline/actions/workflows/build.yml/ | ||||
| [GitHub Status]:   https://github.com/troglobit/editline/actions/workflows/build.yml/badge.svg | ||||
| [Coverity Scan]:   https://scan.coverity.com/projects/2982 | ||||
| [Coverity Status]: https://scan.coverity.com/projects/2982/badge.svg | ||||
|   | ||||
							
								
								
									
										44
									
								
								configure.ac
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								configure.ac
									
									
									
									
									
								
							| @@ -1,10 +1,11 @@ | ||||
| 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.2-pre, 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]) | ||||
| AC_CONFIG_SRCDIR([src/editline.c]) | ||||
| AC_CONFIG_HEADER([config.h]) | ||||
| AC_CONFIG_HEADERS([config.h]) | ||||
| AC_CONFIG_FILES([Makefile libeditline.pc src/Makefile include/Makefile man/Makefile examples/Makefile]) | ||||
|  | ||||
| # Checks for programs. | ||||
| @@ -17,7 +18,7 @@ LT_INIT | ||||
| # Checks for header files. | ||||
| AC_HEADER_DIRENT | ||||
| AC_HEADER_STAT | ||||
| AC_HEADER_STDC | ||||
|  | ||||
| # Check for malloc.h instead of AC_FUNC_MALLOC/REALLOC AIX and others | ||||
| # mess up the traditional malloc check. | ||||
| AC_CHECK_HEADERS([malloc.h signal.h stdlib.h string.h termcap.h termio.h termios.h sgtty.h unistd.h]) | ||||
| @@ -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], | ||||
| 	[AS_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,8 @@ AS_IF([test "x$enable_termcap" = "xyes"], | ||||
|                ]) | ||||
|             ]) | ||||
|          ]) | ||||
|       ])) | ||||
|       ]) | ||||
|     ]) | ||||
|  | ||||
| # Generate all files | ||||
| AC_OUTPUT | ||||
|   | ||||
							
								
								
									
										17
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							| @@ -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
									
									
								
							
							
						
						
									
										2
									
								
								debian/compat
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1 @@ | ||||
| 9 | ||||
| 10 | ||||
|   | ||||
							
								
								
									
										8
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								debian/control
									
									
									
									
										vendored
									
									
								
							| @@ -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
									
									
								
							
							
						
						
									
										25
									
								
								debian/copyright
									
									
									
									
										vendored
									
									
								
							| @@ -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. | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								debian/libeditline-dev.install
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/libeditline-dev.install
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,5 @@ | ||||
| usr/include/*.h | ||||
| usr/lib/*/libeditline*.*a | ||||
| usr/lib/*/libeditline.so | ||||
| usr/lib/*/pkgconfig/* | ||||
| usr/share/man/man3/* | ||||
|   | ||||
							
								
								
									
										1
									
								
								debian/libeditline0.install
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/libeditline0.install
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | ||||
| usr/lib/*/libeditline*.so* | ||||
							
								
								
									
										1
									
								
								debian/libeditline1.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								debian/libeditline1.install
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| usr/lib/*/libeditline.so.* | ||||
							
								
								
									
										67
									
								
								debian/libeditline1.symbols
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								debian/libeditline1.symbols
									
									
									
									
										vendored
									
									
										Normal 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
									
									
								
							
							
						
						
									
										12
									
								
								debian/rules
									
									
									
									
										vendored
									
									
								
							| @@ -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 | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -39,6 +39,7 @@ Jeff | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <sys/types.h> | ||||
| #include <sys/select.h> | ||||
|  | ||||
| #ifdef HAVE_STDLIB_H | ||||
| #include <stdlib.h> | ||||
|   | ||||
| @@ -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; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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! */ | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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,20 +251,43 @@ 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); | ||||
|  | ||||
|     do { | ||||
| 	if (ptr) { | ||||
| 	    snprintf(ptr, len, "%s%s", dir, av[i++]); | ||||
| 	    if (ac == 1) | ||||
| 		rl_add_slash(ptr, ptr); | ||||
|  | ||||
| 	    return ptr; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     while (i > 0) | ||||
| 	free(av[--i]); | ||||
|     } while (i > 0); | ||||
|  | ||||
|     if (av) { | ||||
| 	free(av); | ||||
| 	av = NULL; | ||||
|     } | ||||
|     if (dir) { | ||||
| 	free(dir); | ||||
| 	dir = NULL; | ||||
|     } | ||||
|     if (file) { | ||||
| 	free(file); | ||||
| 	file = NULL; | ||||
|     } | ||||
|  | ||||
|     return NULL; | ||||
| } | ||||
| @@ -274,11 +295,11 @@ char *rl_filename_completion_function(const char *text, int state) | ||||
| /* 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 +307,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 +388,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 +403,9 @@ static char *complete(char *token, int *match) | ||||
| 	    return word; | ||||
|     } | ||||
|  | ||||
|     if (word) | ||||
| 	free(word); | ||||
|  | ||||
| fallback: | ||||
|     return el_filename_complete(token, match); | ||||
| } | ||||
|   | ||||
							
								
								
									
										688
									
								
								src/editline.c
									
									
									
									
									
								
							
							
						
						
									
										688
									
								
								src/editline.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Reference in New Issue
	
	Block a user