debian/0000755000000000000000000000000012234114006007157 5ustar debian/install0000644000000000000000000000006411762663102010563 0ustar contrib/cdargs.el usr/share/emacs/site-lisp/ debian/patches/0000755000000000000000000000000012234112457010616 5ustar debian/patches/10_no_path_max.patch0000644000000000000000000000163512234111410014425 0ustar Description: Fix FTBFS when PATH_MAX is not defined, e.g. on GNU Hurd Forwarded: no Author: Mike Miller Last-Update: 2013-10-30 --- a/src/cdargs.cc +++ b/src/cdargs.cc @@ -930,8 +930,12 @@ string get_resultfile(void) { } char* get_cwd_as_charp(void) { - char buf[PATH_MAX]; - char* result = getcwd(buf, sizeof(buf)); + char *buf; + char *result = NULL; + + size_t size = (size_t)pathconf(".", _PC_PATH_MAX); + if ((buf = (char *)malloc(size)) != NULL) + result = getcwd(buf, size); if(result == NULL) { message("cannot determine current working directory.exit."); @@ -940,7 +944,9 @@ char* get_cwd_as_charp(void) { } /* this can be a memleak if not freed again */ /* but then ... how long does cdargs usually run? */ - return strdup(buf); + result = strdup(buf); + free(buf); + return result; } string get_cwd_as_string(void) { debian/patches/series0000644000000000000000000000036512234111306012027 0ustar 01_typos.patch 02_remove_shebang.patch 03_absolute_paths.patch 04_zsh_support.patch 05_manpage_hyphens.patch 06_manpage_paths.patch 07_manpage_fsf_address.patch 08_gcc_format_security.patch 09_avoid_backupfile_warning.patch 10_no_path_max.patch debian/patches/07_manpage_fsf_address.patch0000644000000000000000000000112612234103064016112 0ustar Description: Update FSF's address in manpage Forwarded: no Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=470446 Author: Jari Aalto Last-Update: 2008-03-11 --- a/doc/cdargs.1 +++ b/doc/cdargs.1 @@ -334,5 +334,4 @@ MERCHANTABILITY or FITNESS FOR A PARTICU GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +along with this program. If not, see . debian/patches/01_typos.patch0000644000000000000000000000214311762663102013320 0ustar Description: Fix typos in program messages Forwarded: yes Author: Francois Marier Last-Update: 2010-11-28 --- a/src/cdargs.cc +++ b/src/cdargs.cc @@ -1006,7 +1006,7 @@ void version(void) { void usage(void) { printf("expanding the shell built-in cd with bookmarks and browser\n\n"); - printf(" Usually you don't call this programm directly.\n"); + printf(" Usually you don't call this program directly.\n"); printf(" Copy it somewhere into your path and create\n"); printf(" a shell alias (which takes arguments) as described\n"); printf(" in the file INSTALL which came with this program.\n"); @@ -1308,7 +1308,7 @@ void fatal_exit(char* msg) { void terminate(int sig) { endwin(); if(sig == 11) { - fprintf(stderr,"programm received signal %d\n",sig); + fprintf(stderr,"program received signal %d\n",sig); fprintf(stderr,"This should never happen.\n"); fprintf(stderr,"Maybe you want to send an email to the author and report a bug?\n"); fprintf(stderr,"Author: Stefan Kamphausen \n"); debian/patches/08_gcc_format_security.patch0000644000000000000000000000056011764021143016200 0ustar Description: Fix for FTBFS with -Werror=format-security from dpkg-buildflags Forwarded: no Author: Mike Miller Last-Update: 2012-06-06 --- a/src/cdargs.cc +++ b/src/cdargs.cc @@ -1301,7 +1301,7 @@ void helpscreen(void) { void fatal_exit(char* msg) { endwin(); - fprintf(stderr, msg); + fprintf(stderr, "%s", msg); exit(1); } debian/patches/03_absolute_paths.patch0000644000000000000000000000610512234103053015150 0ustar Description: Add absolute paths to the shell utilities Forwarded: no Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=337548 Author: Petra Malik Last-Update: 2006-04-17 --- a/contrib/cdargs-bash.sh +++ b/contrib/cdargs-bash.sh @@ -30,15 +30,15 @@ function _cdargs_get_dir () # if there is one exact match (possibly with extra path info after it), # then just use that match without calling cdargs if [ -e "$HOME/.cdargs" ]; then - dir=`grep "^$1 " "$HOME/.cdargs"` + dir=`/bin/grep "^$1 " "$HOME/.cdargs"` if [ -z "$dir" ]; then bookmark="${1/\/*/}" if [ "$bookmark" != "$1" ]; then - dir=`grep "^$bookmark " "$HOME/.cdargs"` - extrapath=`echo "$1" | sed 's#^[^/]*/#/#'` + dir=`/bin/grep "^$bookmark " "$HOME/.cdargs"` + extrapath=`echo "$1" | /bin/sed 's#^[^/]*/#/#'` fi fi - [ -n "$dir" ] && dir=`echo "$dir" | sed 's/^[^ ]* //'` + [ -n "$dir" ] && dir=`echo "$dir" | /bin/sed 's/^[^ ]* //'` fi if [ -z "$dir" -o "$dir" != "${dir/ /}" ]; then @@ -47,7 +47,7 @@ function _cdargs_get_dir () dir= if cdargs --noresolve "${1/\/*/}"; then dir=`cat "$HOME/.cdargsresult"` - rm -f "$HOME/.cdargsresult"; + /bin/rm -f "$HOME/.cdargsresult"; fi fi if [ -z "$dir" ]; then @@ -164,10 +164,10 @@ function mark () local tmpfile # first clear any bookmarks with this same alias, if file exists - if [[ "$CDARGS_NODUPS" && -e "$HOME/.cdargs" ]]; then - tmpfile=`echo ${TEMP:-${TMPDIR:-/tmp}} | sed -e "s/\\/$//"` + if [ "$CDARGS_NODUPS" -a -e "$HOME/.cdargs" ]; then + tmpfile=`echo ${TEMP:-${TMPDIR:-/tmp}} | /bin/sed -e "s/\\/$//"` tmpfile=$tmpfile/cdargs.$USER.$$.$RANDOM - grep -v "^$1 " "$HOME/.cdargs" > $tmpfile && 'mv' -f $tmpfile "$HOME/.cdargs"; + /bin/grep -v "^$1 " "$HOME/.cdargs" > $tmpfile && 'mv' -f $tmpfile "$HOME/.cdargs"; fi # add the alias to the list of bookmarks cdargs --add=":$1:`pwd`"; @@ -216,7 +216,7 @@ function _cdargs_aliases () cur=${COMP_WORDS[COMP_CWORD]} if [ "$cur" != "${cur/\//}" ]; then # if at least one / bookmark="${cur/\/*/}" - dir=`grep "^$bookmark " "$HOME/.cdargs" | sed 's#^[^ ]* ##'` + dir=`/bin/grep "^$bookmark " "$HOME/.cdargs" | /bin/sed 's#^[^ ]* ##'` if [ -n "$dir" -a "$dir" = "${dir/ /}" -a -d "$dir" ]; then strip="${dir//?/.}" @@ -224,8 +224,8 @@ function _cdargs_aliases () IFS=' ' COMPREPLY=( $( - compgen -d "$dir`echo "$cur" | sed 's#^[^/]*##'`" \ - | sed -e "s/^$strip/$bookmark/" -e "s/\([^\/a-zA-Z0-9#%_+\\\\,.-]\)/\\\\\\1/g" ) ) + compgen -d "$dir`echo "$cur" | /bin/sed 's#^[^/]*##'`" \ + | /bin/sed -e "s/^$strip/$bookmark/" -e "s/\([^\/a-zA-Z0-9#%_+\\\\,.-]\)/\\\\\\1/g" ) ) IFS="$oldIFS" fi else debian/patches/05_manpage_hyphens.patch0000644000000000000000000000410012234103057015300 0ustar Description: Fix hyphens in manpage Forwarded: no Author: Francois Marier Last-Update: 2009-03-29 --- a/doc/cdargs.1 +++ b/doc/cdargs.1 @@ -22,7 +22,7 @@ you can jump to various places throughou that are defined using a plain text, line oriented bookmarks file. .PP You can create bookmarks by editing your bookmarks file -"$HOME/.cdargs" using your favorite editor, by using the "--add" +"$HOME/.cdargs" using your favorite editor, by using the "\-\-add" option to .I cdargs or by using the built-in mechanism that will be described later. @@ -59,7 +59,7 @@ binary somewhere into your path. Of course you can create functions and/or aliases for different purposes. You might want to add a \fIpwd\fR call to echo your current -directories or put --nowrap in your functions to enable a different +directories or put \-\-nowrap in your functions to enable a different scrolling behavior. See section SHELL FUNCTIONS below. Since version 1.19 cdargs brings a collection of bash functions (and @@ -125,7 +125,7 @@ of directories takes place). If it doesn't match a line, that line won't be displayed. And to make things even more complicated you can affect this behavior -by using the "--noresolve" option. This option is used when you think +by using the "\-\-noresolve" option. This option is used when you think you give a \fINeedle\fR which matches descriptions exactly but you don't want it to be resolved if it does. This option is internally turned on when you delete an entry (otherwise the deletion of entries until only @@ -134,7 +134,7 @@ contains only one entry. Finally, if the filtered list (but not the bookmarks file) contains only one entry it is selected and the program exits successfully, -unless you chose --noresolve. +unless you chose \-\-noresolve. I can only hope that you understand this nested if babble... @@ -234,7 +234,7 @@ reports it's result: function cv () { .br cdargs "$1" && cd "`cat "$HOME/.cdargsresult"`" - && rm -f "$HOME/.cdargsresult"; + && rm \-f "$HOME/.cdargsresult"; .br } debian/patches/06_manpage_paths.patch0000644000000000000000000000147712234103062014754 0ustar Description: Include actual Debian paths in manpage Forwarded: not needed Author: Petra Malik Last-Update: 2003-01-31 --- a/doc/cdargs.1 +++ b/doc/cdargs.1 @@ -284,19 +284,22 @@ bold font (if the terminal emulation und .SH "FILES" +.I "/usr/bin/cdargs" +the cdargs executable. +.TP .I "$HOME/.cdargs" personal bookmarks file. .TP .I "$HOME/.cdargsresult" temporary file for passing results to shell. .TP -.I "contrib/cdargs-bash.sh" +.I "/usr/share/doc/cdargs/examples/cdargs-bash.sh" example collection of bash functions. .TP -.I "contrib/cdargs-tcsh.csh" +.I "/usr/share/doc/cdargs/examples/cdargs-tcsh.csh" example collection of tcsh functions. .TP -.I "contrib/cdargs.el" +.I "/usr/share/emacs/site-lisp/cdargs.el" (X)Emacs front-end to personal bookmarks file .SH "REPORTING BUGS" debian/patches/04_zsh_support.patch0000644000000000000000000000121712234103055014535 0ustar Description: Add support for ZSH Forwarded: not needed Origin: http://www.skamphausen.de/cgi-bin/ska/cdargs-zsh-completion.patch Last-Update: 2009-03-29 --- a/contrib/cdargs-bash.sh +++ b/contrib/cdargs-bash.sh @@ -254,4 +254,14 @@ _cdargs_complete() { complete $nospace -S / -X '*/' -F _cdargs_aliases cv cb cdb } +# Support ZSH via its BASH completion emulation +if [ -n "$ZSH_VERSION" ]; then + autoload bashcompinit + bashcompinit +elif [ -z "${BASH_VERSION}" ]; then + # we do not support anything besides bash completion + # (however patches to support other shells are very welcome) + return 100 +fi + _cdargs_complete debian/patches/09_avoid_backupfile_warning.patch0000644000000000000000000000152312234104477017167 0ustar Description: Check for existence of ~/.cdargs before making a backup copy Forwarded: no Author: Mike Miller Bug-Debian: http://bugs.debian.org/713007 Last-Update: 2013-10-30 --- a/src/cdargs.cc +++ b/src/cdargs.cc @@ -728,9 +728,12 @@ void list_to_file(void) { if(opt_user.size() > 0) { return; } - string backup_file = mylistfile + "~"; - if(rename(mylistfile.c_str(),backup_file.c_str()) == -1) { - fprintf(stderr,"warning: could not create backupfile\n"); + struct stat buf; + if(stat(mylistfile.c_str(),&buf) == 0) { + string backup_file = mylistfile + "~"; + if(rename(mylistfile.c_str(),backup_file.c_str()) == -1) { + fprintf(stderr,"warning: could not create backupfile\n"); + } } ofstream listfile(mylistfile.c_str()); if (!listfile) { debian/patches/02_remove_shebang.patch0000644000000000000000000000075111762663102015132 0ustar Description: Remove shebang lines in sample shell scripts Forwarded: no Author: Francois Marier Last-Update: 2011-10-12 --- a/contrib/cdargs-bash.sh +++ b/contrib/cdargs-bash.sh @@ -1,5 +1,3 @@ -#!/bin/sh - # (C) 2002-2003 Dan Allen and Stefan Kamphausen # Written by Dan Allen --- a/contrib/cdargs-tcsh.csh +++ b/contrib/cdargs-tcsh.csh @@ -1,5 +1,3 @@ -#!/bin/csh - # (C) 2002-2005 Stefan Kamphausen # (T)CShell extensions written by debian/watch0000644000000000000000000000011611762663102010221 0ustar version=3 http://www.skamphausen.de/downloads/cdargs/ cdargs-([0-9.]+).tar.gz debian/copyright0000644000000000000000000000217011762663102011125 0ustar This package was debianized by Petra Malik on Wed, 1 Jan 2003 12:25:26 +1300. It was downloaded from http://www.skamphausen.de/downloads/cdargs/ Upstream Authors: Stefan Kamphausen , Claus Brunzema Copyright (c) 2001-2003 Stefan Kamphausen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. On Debian systems, the complete text of the GNU General Public License, version 2, can be found in /usr/share/common-licenses/GPL-2. debian/compat0000644000000000000000000000000211762663102010370 0ustar 9 debian/changelog0000644000000000000000000001370712234112547011051 0ustar cdargs (1.35-10) unstable; urgency=low * Create symlink to emacs lisp source as required by Debian Emacs Policy. (Closes: #713003) * debian/patches/09_avoid_backupfile_warning.patch: Check for existence of ~/.cdargs before making a backup copy. (Closes: #713007) * debian/patches/10_no_path_max.patch: Fix FTBFS when PATH_MAX is not defined, e.g. on GNU Hurd. * Refresh all patches so they apply cleanly. * Canonicalize Vcs-* control fields. * Remove obsolete DM-Upload-Allowed control field. * Bump Standards-Version to 3.9.4. No changes needed. -- Mike Miller Wed, 30 Oct 2013 01:13:10 -0400 cdargs (1.35-9) unstable; urgency=low [ Francois Marier ] * Update upstream author's email address * Bump debhelper compatibility to 9 * Bump Standards-Version up to 3.9.3 [ Mike Miller ] * Adopt this package. (Closes: #674833) Thanks to Francois Marier. * Add 08_gcc_format_security.patch to build with dpkg-buildflags. * Add DM-Upload-Allowed flag. -- Francois Marier Thu, 07 Jun 2012 19:33:32 +1200 cdargs (1.35-8) unstable; urgency=low * Use a standard debhelper rules file * Move patches to DEP-3 files (closes: #643075) * Bump Standards-Version up to 3.9.2 -- Francois Marier Wed, 12 Oct 2011 13:21:08 +1300 cdargs (1.35-7) unstable; urgency=low * Patch some small typos * Bump debhelper compatibility to 8 -- Francois Marier Wed, 22 Dec 2010 13:26:45 +1300 cdargs (1.35-6) unstable; urgency=medium * Remove emacsen-common dependency to fix upgrade problems from lenny Thanks to Marc Fournier for the patch! (closes: #603789) * Downgrade emacs from Recommends to Suggests * Bump Standards-Version to 3.9.1 (no changes) -- Francois Marier Sun, 28 Nov 2010 08:15:27 +1300 cdargs (1.35-5) unstable; urgency=low * Bump Standards-Version to 3.8.4 * Add dependency on ${misc:Depends} * Switch to 3.0 (quilt) source format * Add dependency on emacsen-common and recommends emacs|xemacs (LP: 437625) -- Francois Marier Thu, 11 Feb 2010 08:59:15 +1300 cdargs (1.35-4) unstable; urgency=low * Adopt this package (closes: #521484) * Move the packaging to git.debian.org * Update FSF address in manpage (closes: #470446) * Apply Fedora patch to fix parse errors when the login shell is not bash, see https://bugzilla.redhat.com/show_bug.cgi?id=479398 (LP: #319489) * Adapt upstream's patch to add support for zsh, see http://www.skamphausen.de/cgi-bin/ska/cdargs-zsh-completion.patch * Bump Standards-Version to 3.8.1 * Bump debhelper compatibility to 7 * debian/rules: make use of dh_prep and stop ignoring distclean errors * Update upstream URLs * Add watch file * Fix hyphens in manpage * Expand long description -- Francois Marier Sun, 29 Mar 2009 13:21:09 +1300 cdargs (1.35-3) unstable; urgency=low * Provide paths for commands in the example script (Closes: #337548) -- Petra Malik Mon, 17 Apr 2006 21:21:38 +1200 cdargs (1.35-2) unstable; urgency=low * Upgrade to debhelper compatibility level 5 -- Petra Malik Sat, 8 Apr 2006 06:06:23 +1200 cdargs (1.35-1) unstable; urgency=low * New upstream release -- Petra Malik Sat, 1 Apr 2006 21:59:09 +1200 cdargs (1.32-1) unstable; urgency=low * update the copyright file to use the new FSF address * Update to the latest version of debian policy (standards-version 3.6.2). * New upstream release -- Petra Malik Wed, 2 Nov 2005 21:14:41 +1300 cdargs (1.31-1) unstable; urgency=low * New upstream release -- Petra Malik Mon, 28 Feb 2005 16:37:38 +1300 cdargs (1.29-1) unstable; urgency=low * New upstream release -- Petra Malik Sat, 3 Apr 2004 09:31:32 +1200 cdargs (1.28-2) unstable; urgency=low * Changed maintainer in debian/control to the new debian address. -- Petra Malik Sat, 13 Mar 2004 20:43:16 +1300 cdargs (1.28-1) unstable; urgency=low * Update to the latest version of debian policy (standards-version 3.6.1). * Clean up debian/copyright file. * New upstream release -- Petra Malik Wed, 31 Dec 2003 17:36:14 +1300 cdargs (1.26-2) unstable; urgency=low * Renamed function abort to build with g++-3.3 (Closes: #195146) * Upgraded to Standards-Version 3.5.10 (no changes necessary) -- Petra Malik Thu, 29 May 2003 18:10:40 +1200 cdargs (1.26-1) unstable; urgency=low * Changed compiling options to comply with debian-policy. * New upstream release -- Petra Malik Wed, 26 Feb 2003 22:48:42 +1300 cdargs (1.25-1) unstable; urgency=low * New upstream release -- Petra Malik Tue, 18 Feb 2003 20:29:30 +1300 cdargs (1.24-1) unstable; urgency=low * New upstream release -- Petra Malik Fri, 14 Feb 2003 09:46:10 +1300 cdargs (1.23-1) unstable; urgency=low * New upstream release -- Petra Malik Fri, 7 Feb 2003 12:25:46 +1300 cdargs (1.22-1) unstable; urgency=low * New upstream release -- Petra Malik Wed, 5 Feb 2003 12:37:13 +1300 cdargs (1.21-1) unstable; urgency=low * Changed the manual page to comply with the debian package. * New upstream release. (Closes: #178280, #178286) -- Petra Malik Fri, 31 Jan 2003 11:01:56 +1300 cdargs (1.20-2) unstable; urgency=low * Added missing build dependency libncurses5-dev. (Closes: #178118) -- Petra Malik Fri, 24 Jan 2003 11:47:07 +1300 cdargs (1.20-1) unstable; urgency=low * Initial Release. (Closes: #171357) * Changed to compile with g++-3.2.2. * Changed to comply with debian-policy (use /usr/bin/editor instead of vi). -- Petra Malik Wed, 1 Jan 2003 12:25:26 +1300 debian/dirs0000644000000000000000000000003611762663102010055 0ustar usr/share/doc/cdargs/examples debian/README.Debian0000644000000000000000000000175711762663102011245 0ustar cdargs for Debian ----------------- If you use bash =============== simply copy the file examples/cdargs-bash.sh somewhere into your $PATH and put a line like source cdargs-bash.sh in your ~/.bashrc. If you use tcsh =============== copy the file examples/cdargs-tcsh.csh to a place that you like and source it from your ~/.cshrc (or ~/.tcsh ?). Any help appreciated in making the tcsh expansion more powerful. cdargs in emacs/xemacs ====================== Add the line (load-library "cdargs") to your .emacs-File. WRAPPING ======== If you do not like the cursor wrapping around on the top and the bottom of the list, start cdargs with the additional option --nowrap: Example: function cb () { cdargs --nowrap "$1" && cd `cat $HOME/.cdargsresult` ; } This works for a bash-like shell, but I think this is rather easy to port... MORE HELP ========= For more information try: $ configure --help $ cdargs --help or press 'H' or '?' while running cdargs. Additionally, cdargs comes with a manpage. debian/cdargs.emacsen-install0000644000000000000000000000107312234076040013431 0ustar #!/bin/sh -eu FLAVOR="$1" echo "install/cdargs: Handling install of emacsen flavor $FLAVOR" byte_compile_options="-batch -f batch-byte-compile" el_file="cdargs.el" el_dir="/usr/share/emacs/site-lisp" elc_dir="/usr/share/$FLAVOR/site-lisp" if [ "$FLAVOR" != emacs ] then echo "install/cdargs: byte-compiling for $FLAVOR" # Create symlinks to the .el files (debian-emacs policy section 5E) ( cd "$elc_dir" && ln -sf "$el_dir/$el_file" "$el_file" ) # Byte compile them "$FLAVOR" $byte_compile_options "$elc_dir/$el_file" > /dev/null 2>&1 fi exit 0 debian/examples0000644000000000000000000000005711762663102010735 0ustar contrib/cdargs-bash.sh contrib/cdargs-tcsh.csh debian/cdargs.emacsen-remove0000644000000000000000000000046112234076163013266 0ustar #!/bin/sh -eu FLAVOR="$1" echo "remove/cdargs: Handling removal of emacsen flavor $FLAVOR" if [ "$FLAVOR" != emacs ] then echo "remove/cdargs: purging byte-compiled files for ${FLAVOR}" rm -f "/usr/share/$FLAVOR/site-lisp/cdargs.elc" rm -f "/usr/share/$FLAVOR/site-lisp/cdargs.el" fi exit 0 debian/source/0000755000000000000000000000000011762663102010472 5ustar debian/source/format0000644000000000000000000000001411762663102011700 0ustar 3.0 (quilt) debian/rules0000755000000000000000000000020211762663102010244 0ustar #!/usr/bin/make -f # -*- makefile -*- %: dh $@ override_dh_compress: dh_compress --exclude=cdargs-bash --exclude=cdargs-tcsh debian/control0000644000000000000000000000152612234102166010572 0ustar Source: cdargs Section: utils Priority: optional Maintainer: Mike Miller Build-Depends: debhelper (>= 9), libncurses5-dev Standards-Version: 3.9.4 Homepage: http://www.skamphausen.de/cgi-bin/ska/CDargs Vcs-Git: git://anonscm.debian.org/collab-maint/cdargs.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=collab-maint/cdargs.git;a=summary Package: cdargs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Suggests: emacs23 | xemacs21 | emacsen Description: bookmarks and browsing for the cd command CDargs is a tool which enhances the navigation of the common unix file-system inside the shell. It plugs into the shell built-in cd-command (via a shell function or an alias) and adds bookmarks and a browser to it. . It enables you to move to a very distant place in the file-system with just a few keystrokes.