Module Name: src Committed By: christos Date: Mon May 9 21:25:11 UTC 2016
Modified Files: src/lib/libedit: readline.c Log Message: The libedit implementation of history_get() also differs from the GNU implementation: libedit goes to the entry with the given number stored in the HistEvent structure, while GNU subtracts history_base, then advances that many entries from the oldest one. If entries were removed in between, GNU advances further than libedit. The call sequence H_CURR, H_DELDATA, H_CURR, H_NEXT_EVDATA looks weird, as if part of that must somehow be redundant. But actually, the user interface is so counter-intuitive that every single step is really required. - The first H_CURR is needed to be able to go back after an error. - The H_DELDATA is needed to move the cursor. Even though it takes a pointer to ev, that structure is not filled in when the call succeeds. H_DELDATA only moves the cursor, it doesn't tell us the new event number. - Consequently, the second H_CURR is required to get ev.num filled in. But it doesn't return the data because ev has no field for that. - So even though the cursor is already positioned correctly, H_NEXT_EVDATA is needed as the final step merely to get the data. (Ingo Schwarze) To generate a diff of this commit: cvs rdiff -u -r1.130 -r1.131 src/lib/libedit/readline.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.