Skip to content

editorFindCallback prevents search results navigation #127

Description

@111nation

Heyy, while doing the kilo guide, i stumbled across a bug with my editor, for some reason when i press the arrow keys to navigate to the previous and next search result the editor jumped to the next result (as expected) but then imediately jumps back to the previous result where we were originally (preventing search navigation)

To fix this, simply edit the editorFindCallback with the changes...

void editorFindCallback(char *query, int key) {
  static int last_match = -1;
  static int direction = 1;


  // Empty queries reset searching from top
  if (strlen(query) == 0) {
	  last_match = -1;
	  return;
  }

  int current;

  if (key == '\r' || key == '\x1b') {
    last_match = -1;
    direction = 1;
    return;
  } else if (key == ARROW_RIGHT || key == ARROW_DOWN) {
	current = last_match+1; // Search from next row
    direction = 1;
  } else if (key == ARROW_LEFT || key == ARROW_UP) {
	current = last_match-1; // Search from previous row
    direction = -1;
  } else {
    direction = 1;
	current = last_match; // Keep search on current row with current result to terminate early
  }

  if (last_match == -1) direction = 1;
  int i;
  for (i = 0; i < E.numrows; i++) {
	// Clamp current
    if (current == -1) current = E.numrows - 1;
    else if (current == E.numrows) current = 0;

	// Immediately search without moving current positon
    erow *row = &E.row[current];
    char *match = strstr(row->render, query);
    if (match) {
      last_match = current;
      E.cy = current;
      E.cx = editorRowRxToCx(row, match - row->render);
      E.rowoff = E.numrows;
      break;
    }

    current += direction;
  }
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions