diff --git a/library/Console-posix.cpp b/library/Console-posix.cpp index 9a049173c..fcc56b205 100644 --- a/library/Console-posix.cpp +++ b/library/Console-posix.cpp @@ -46,6 +46,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -625,29 +626,6 @@ namespace DFHack } } break; - default: - if (raw_buffer.size() == size_t(raw_cursor)) - { - raw_buffer.append(1,c); - raw_cursor++; - if (plen+raw_buffer.size() < size_t(get_columns())) - { - /* Avoid a full update of the line in the - * trivial case. */ - if (::write(fd,&c,1) == -1) return -1; - } - else - { - prompt_refresh(); - } - } - else - { - raw_buffer.insert(raw_cursor,1,c); - raw_cursor++; - prompt_refresh(); - } - break; case 21: // Ctrl+u, delete from current to beginning of line. if (raw_cursor > 0) yank_buffer = raw_buffer.substr(0, raw_cursor); @@ -657,7 +635,7 @@ namespace DFHack break; case 11: // Ctrl+k, delete from current to end of line. if (raw_cursor < raw_buffer.size()) - yank_buffer = raw_buffer.substr(raw_cursor, raw_buffer.size() - raw_cursor); + yank_buffer = raw_buffer.substr(raw_cursor); raw_buffer.erase(raw_cursor); prompt_refresh(); break; @@ -669,6 +647,16 @@ namespace DFHack prompt_refresh(); } break; + case 20: // Ctrl+t, transpose current and previous characters + if (raw_buffer.size() >= 2 && raw_cursor > 0) + { + if (raw_cursor == raw_buffer.size()) + raw_cursor--; + std::swap(raw_buffer[raw_cursor - 1], raw_buffer[raw_cursor]); + raw_cursor++; + prompt_refresh(); + } + break; case 1: // Ctrl+a, go to the start of the line raw_cursor = 0; prompt_refresh(); @@ -680,6 +668,32 @@ namespace DFHack case 12: // ctrl+l, clear screen clear(); prompt_refresh(); + default: + if (c >= 32) // Space + { + if (raw_buffer.size() == size_t(raw_cursor)) + { + raw_buffer.append(1,c); + raw_cursor++; + if (plen+raw_buffer.size() < size_t(get_columns())) + { + /* Avoid a full update of the line in the + * trivial case. */ + if (::write(fd,&c,1) == -1) return -1; + } + else + { + prompt_refresh(); + } + } + else + { + raw_buffer.insert(raw_cursor,1,c); + raw_cursor++; + prompt_refresh(); + } + break; + } } } return raw_buffer.size();