summaryrefslogtreecommitdiffstats
path: root/contrib/replxx/src/prompt.hxx
blob: 9ed3f5fd9520032f59a8b65ca91e11511d553a19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#ifndef REPLXX_PROMPT_HXX_INCLUDED
#define REPLXX_PROMPT_HXX_INCLUDED 1

#include <cstdlib>

#include "unicodestring.hxx"
#include "terminal.hxx"

namespace replxx {

class Prompt {           // a convenience struct for grouping prompt info
public:
	UnicodeString _text;   // our copy of the prompt text, edited
	int _characterCount;   // visible characters in _text
	int _extraLines;       // extra lines (beyond 1) occupied by prompt
	int _lastLinePosition; // index into _text where last line begins
	int _cursorRowOffset;  // where the cursor is relative to the start of the prompt
private:
	int _screenColumns;    // width of screen in columns [cache]
	Terminal& _terminal;
public:
	Prompt( Terminal& );
	void set_text( UnicodeString const& textPtr );
	void update_state();
	void update_screen_columns( void );
	int screen_columns() const {
		return ( _screenColumns );
	}
	void write();
	int indentation() const;
};

// changing prompt for "(reverse-i-search)`text':" etc.
//
struct DynamicPrompt : public Prompt {
	UnicodeString _searchText; // text we are searching for
	int _direction;            // current search _direction, 1=forward, -1=reverse

	DynamicPrompt( Terminal&, int initialDirection );
	void updateSearchPrompt(void);
};

}

#endif