summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bin/man/psfed.16
-rw-r--r--bin/psfed.c11
2 files changed, 17 insertions, 0 deletions
diff --git a/bin/man/psfed.1 b/bin/man/psfed.1
index bd15d897..f0709594 100644
--- a/bin/man/psfed.1
+++ b/bin/man/psfed.1
@@ -61,6 +61,12 @@ Select previous/next glyph.
 .It Ic k Ic j
 Select glyph in previous/next row.
 .
+.It Ic f
+Select glyph of next input character.
+.
+.It Ic '
+Return to previously selected glyph.
+.
 .It Ic y
 Copy selected glyph.
 .
diff --git a/bin/psfed.c b/bin/psfed.c
index 8cf792da..fb7de3b7 100644
--- a/bin/psfed.c
+++ b/bin/psfed.c
@@ -252,6 +252,8 @@ static struct {
 	uint32_t scale;
 	uint32_t index;
 	bool modified;
+	bool to;
+	uint32_t from;
 } normal;
 
 static struct {
@@ -292,6 +294,13 @@ static void normalPrint(const char *prefix) {
 }
 
 static void inputNormal(char ch) {
+	if (normal.to) {
+		if (ch < header.glyph.len) normal.index = ch;
+		normalPrint("index");
+		normal.to = false;
+		return;
+	}
+
 	switch (ch) {
 		break; case 'q': {
 			if (!normal.modified) exit(EX_OK);
@@ -308,6 +317,8 @@ static void inputNormal(char ch) {
 		break; case 'l': normalInc(1); normalPrint("index");
 		break; case 'k': normalDec(NormalCols); normalPrint("index");
 		break; case 'j': normalInc(NormalCols); normalPrint("index");
+		break; case 'f': normal.from = normal.index; normal.to = true;
+		break; case 047: normal.index = normal.from; normalPrint("index");
 		break; case 'y': {
 			if (!edit.copy) edit.copy = malloc(header.glyph.size);
 			if (!edit.copy) err(EX_OSERR, "malloc");