[net.emacs] ksh-like search-within-line macros for Gosling's emacs

hansen@pegasus.UUCP (Tony L. Hansen) (12/20/85)

Having gotten used to having the ^] command within ksh, I wrote similar
commands for use within gmacs. This version takes a count and also has the
couterpart ESC-^] to move backwards within the line. For those that know vi,
these commands are similar to the 'f' and 'F' vi commands.

					Tony Hansen
					ihnp4!pegasus!hansen

#!/bin/sh
# This is a shar archive.
# The rest of this file is a shell script which will extract:
# lgoto.ml
# Archive created: Fri Dec 20 10:37:06 EST 1985
echo x - lgoto.ml
sed 's/^X//' > lgoto.ml << '~FUNKY STUFF~'
	;;;; LastEditDate="Wed Feb 20 09:49:22 1985"
	;;;; Written by Tony Hansen.
	;;;;
	;;;; forward-to-character - ^]
	;;;; backward-to-character - ESC-^]
	;;;;
	;;;;	Go forward or backward to the char in the line matching
	;;;;	the next character typed. This was inspired by the similar
	;;;;	capabilities available in emacs mode within ksh.
	;;;;
	;;;; middle-of-window - ESC-m
	;;;;
	;;;;	Go to the line in the middle of the window.
	;;;;

(defun
    (forward-to-character char current-dot
	(setq current-dot (dot))
	(setq char (get-tty-character))
	(prefix-argument-loop
	    (if (= char (following-char))
		(forward-character))
	    (while (& (!= char (following-char))
		      (! (eolp)))
		   (forward-character))
	    (if (eolp)
		(progn
		      (beginning-of-line)
		      (while (& (!= char (following-char))
				(< (dot) current-dot))
			     (forward-character))
		      (if (= (dot) current-dot)
			  (error-message (char-to-string char) " not found!"))
		))
	))
    
    (backward-to-character char current-dot
	(setq current-dot (dot))
	(setq char (get-tty-character))
	(prefix-argument-loop
	    (while (& (!= char (preceding-char))
		      (! (bolp)))
		   (backward-character))
	    (if (bolp)
		(progn
		      (end-of-line)
		      (while (& (!= char (preceding-char))
				(> (dot) current-dot))
			     (backward-character))
		      (if (= (dot) current-dot)
			  (error-message (char-to-string char) " not found!"))
		))
	    (backward-character)))

    ; This is fairly simple minded. If lines are folding, it will mess
    ; up, but won't do worse than end-of-window would.
    (middle-of-window
	(beginning-of-window)
	(provide-prefix-argument (/ (window-height) 2)
	    (next-line))
	(while (! (dot-is-visible))
	       (previous-line))
    )
)
~FUNKY STUFF~
ls -l lgoto.ml
# The following exit is to ensure that extra garbage 
# after the end of the shar file will be ignored.
exit 0