source: history.c @ ad37b39

release-1.10release-1.8release-1.9
Last change on this file since ad37b39 was ad37b39, checked in by Anders Kaseorg <andersk@mit.edu>, 13 years ago
history: Remove partial entries in owl_history_reset Signed-off-by: Anders Kaseorg <andersk@mit.edu>
  • Property mode set to 100644
File size: 1.7 KB
Line 
1#include "owl.h"
2
3void owl_history_init(owl_history *h)
4{
5  owl_list_create(&(h->hist));
6  h->cur=0;                     /* current position in history */
7  h->partial=0;                 /* is the 0th element is partially composed? */
8}
9
10const char *owl_history_get_prev(owl_history *h)
11{
12
13  if (!h) return NULL;
14
15  if (owl_list_get_size(&(h->hist))==0) return(NULL);
16
17  if (h->cur == owl_list_get_size(&(h->hist))-1) {
18    return(NULL);
19  }
20
21  h->cur++;
22
23  return(owl_list_get_element(&(h->hist), h->cur));
24}
25
26const char *owl_history_get_next(owl_history *h)
27{
28  if (!h) return NULL;
29  if (owl_list_get_size(&(h->hist))==0) return(NULL);
30  if (h->cur==0) {
31    return(NULL);
32  }
33
34  h->cur--;
35  return(owl_list_get_element(&(h->hist), h->cur));
36}
37
38void owl_history_store(owl_history *h, const char *line)
39{
40  int size;
41
42  if (!h) return;
43  size=owl_list_get_size(&(h->hist));
44
45  owl_history_reset(h);
46
47  /* check if the line is the same as the last */
48  if (owl_list_get_size(&(h->hist))>0) {
49    if (!strcmp(line, owl_list_get_element(&(h->hist), 0))) return;
50  }
51
52  /* if we've reached the max history size, pop off the last element */
53  if (size>OWL_HISTORYSIZE) {
54    g_free(owl_list_get_element(&(h->hist), size-1));
55    owl_list_remove_element(&(h->hist), size-1);
56  }
57
58  /* add the new line */
59  owl_list_prepend_element(&(h->hist), g_strdup(line));
60}
61
62void owl_history_set_partial(owl_history *h)
63{
64  if (!h) return;
65  h->partial=1;
66}
67
68void owl_history_reset(owl_history *h)
69{
70  if (!h) return;
71
72  /* if partial is set, remove the first entry first */
73  if (h->partial) {
74    g_free(owl_list_get_element(&(h->hist), 0));
75    owl_list_remove_element(&(h->hist), 0);
76    h->partial = 0;
77  }
78
79  h->cur=0;
80}
81
82int owl_history_is_touched(const owl_history *h)
83{
84  if (!h) return(0);
85  return h->cur > 0;
86}
Note: See TracBrowser for help on using the repository browser.