Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [PATCH] enable elaped time with incappendhistory
On Thu, 10 Oct 2013 18:30:35 +0100
Peter Stephenson <p.stephenson@xxxxxxxxxxx> wrote:
> I think this change has broken use of "fc -p" to switch files
> temporarily within an zshaddhistory hook, too, but I'll have to look
> tomorrow.
Yes, it did.
I think, after trying it out and pondering the result, this sorts it all
out, but I've added a tortured essay anyway.
There is some kind of law of conservation of spaghetti code for zsh.
I'm wondering if there's a neater way of doing this, but I think the
answer is "not much neater, anyway".
diff --git a/Src/hist.c b/Src/hist.c
index bd650e8..5531f47 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -937,12 +937,21 @@ hbegin(int dohist)
/*
* For INCAPPENDHISTORY, when interactive, save the history here
* as it gives a better estimate of the times of commands.
+ *
* If SHAREHISTORY is also set continue to do so in the
* standard place, because that's safer about reading and
* rewriting history atomically.
+ *
+ * The histsave_stack_pos test won't usually fail here.
+ * We need to test the opposite for the hend() case because we
+ * need to save in the history file we've switched to, but then
+ * we pop immediately after that so the variable becomes zero.
+ * We will already have saved the line and restored the history
+ * so that (correctly) nothing happens here. But it shows
+ * I thought about it.
*/
if (isset(INCAPPENDHISTORY) && !isset(SHAREHISTORY) &&
- !(histactive & HA_NOINC) && !strin)
+ !(histactive & HA_NOINC) && !strin && histsave_stack_pos == 0)
savehistfile(hf, 0, HFILE_USE_OPTIONS | HFILE_FAST);
}
@@ -1348,7 +1357,11 @@ hend(Eprog prog)
chline = hptr = NULL;
chwords = NULL;
histactive = 0;
- if (isset(SHAREHISTORY) && histfileIsLocked())
+ /*
+ * For normal INCAPPENDHISTORY case and reasoning, see hbegin().
+ */
+ if (isset(SHAREHISTORY) ? histfileIsLocked() :
+ (isset(INCAPPENDHISTORY) && histsave_stack_pos != 0))
savehistfile(hf, 0, HFILE_USE_OPTIONS | HFILE_FAST);
unlockhistfile(hf); /* It's OK to call this even if we aren't locked */
/*
--
Peter Stephenson <p.stephenson@xxxxxxxxxxx> Principal Software Engineer
Tel: +44 (0)1223 434724 Samsung Cambridge Solution Centre
St John's House, St John's Innovation Park,
Cowley Road, Cambridge, CB4 0DS, UK
Messages sorted by:
Reverse Date,
Date,
Thread,
Author