From 481c0faeb50b86ad4fd7b946ca9e4a94932a382f Mon Sep 17 00:00:00 2001 From: fluxgen <fluxgen> Date: Thu, 10 Jul 2003 10:18:08 +0000 Subject: patch that keeps the fbrun_history clean by not allowing duplicates to get placed in the history. Thanks David J Burger --- util/fbrun/FbRun.cc | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/util/fbrun/FbRun.cc b/util/fbrun/FbRun.cc index 9c4d1d5..6c7a53a 100644 --- a/util/fbrun/FbRun.cc +++ b/util/fbrun/FbRun.cc @@ -19,7 +19,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: FbRun.cc,v 1.13 2003/06/25 12:01:23 fluxgen Exp $ +// $Id: FbRun.cc,v 1.14 2003/07/10 10:18:08 fluxgen Exp $ #include "FbRun.hh" @@ -86,12 +86,35 @@ void FbRun::run(const std::string &command) { // save command history to file if (m_runtext.size() != 0) { // no need to save empty command - // open file in append mode - ofstream outfile(m_history_file.c_str(), ios::app); - if (outfile) - outfile<<m_runtext<<endl; - else - cerr<<"FbRun Warning: Can't write command history to file: "<<m_history_file<<endl; + + // don't allow duplicates into the history file, first + // look for a duplicate + if (m_current_history_item < m_history.size() + && m_runtext == m_history[m_current_history_item]) { + // m_current_history_item is the duplicate + } else { + int i; + for (i = 0; i < m_history.size(); i++) + if (m_runtext == m_history[i]) break; + m_current_history_item = i; + } + + // now m_current_history_item points at the duplicate, or + // at m_history.size() if no duplicate + fstream inoutfile(m_history_file.c_str(), ios::in|ios::out); + if (inoutfile) { + int i = 0; + // read past history items before current + for (string line; !inoutfile.eof() && i < m_current_history_item; i++) + getline(inoutfile, line); + // write the history items that come after current + for (i++; i < m_history.size(); i++) + inoutfile<<m_history[i]<<endl; + // and append the current one back to the end + inoutfile<<m_runtext<<endl; + inoutfile.close(); + } else + cerr<<"FbRun Warning: Can't write command history to file: "<<m_history_file<<endl; } FbTk::App::instance()->end(); // end application m_end = true; // mark end of processing -- cgit v0.11.2