Package jline.console

Class ConsoleReader

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable

    public class ConsoleReader
    extends java.lang.Object
    implements java.io.Closeable
    A reader for console applications. It supports custom tab-completion, saveable command history, and command line editing. On some platforms, platform-specific commands will need to be issued before the reader will function properly. See Terminal.init() for convenience methods for issuing platform-specific setup commands.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      private static class  ConsoleReader.State
      Possible states in which the current readline operation may be in.
    • Constructor Summary

      Constructors 
      Constructor Description
      ConsoleReader()  
      ConsoleReader​(java.io.InputStream in, java.io.OutputStream out)  
      ConsoleReader​(java.io.InputStream in, java.io.OutputStream out, Terminal term)  
      ConsoleReader​(java.lang.String appName, java.io.InputStream in, java.io.OutputStream out, Terminal term)  
      ConsoleReader​(java.lang.String appName, java.io.InputStream in, java.io.OutputStream out, Terminal term, java.lang.String encoding)  
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      private void abort()  
      java.lang.String accept()
      The equivalent of hitting <RET>.
      boolean addCompleter​(Completer completer)
      Add the specified Completer to the list of handlers for tab-completion.
      void addTriggeredAction​(char c, java.awt.event.ActionListener listener)
      Adding a triggered Action allows to give another curse of action if a character passed the pre-processing.
      private void afterReadLine()  
      protected void back​(int num)
      Move the visual cursor backward without modifying the buffer cursor.
      boolean backspace()
      Issue a backspace.
      private int backspace​(int num)
      Issue num backspaces.
      private int backspaceAll()  
      void beep()
      Issue an audible keyboard bell.
      private void beforeReadLine​(java.lang.String prompt, java.lang.Character mask)  
      private boolean capitalizeWord()  
      private void clearAhead​(int num, int pos)
      Clear ahead the specified number of characters without moving the cursor.
      private int clearEcho​(int c)
      Clear the echoed characters for the specified character code.
      boolean clearScreen()
      Clear the screen by issuing the ANSI "clear screen" code.
      void close()
      Shuts the console reader down.
      protected boolean complete()
      Use the completers to modify the buffer with the appropriate completions.
      boolean delete()
      Issue a delete.
      private boolean deleteCurrentCharacter()
      Delete the character at the current position and redraw the remainder of the buffer.
      private boolean deleteNextWord()  
      private boolean deletePreviousWord()  
      private boolean downCaseWord()  
      private void drawBuffer()
      Redraw the rest of the buffer from the cursor onwards.
      private void drawBuffer​(int clear)
      Redraw the rest of the buffer from the cursor onwards.
      void drawLine()
      Output put the prompt + the current buffer
      protected java.lang.String expandEvents​(java.lang.String str)
      Expand event designator such as !!, !#, !3, etc...
      protected void finalize()
      Shuts down the ConsoleReader if the JVM attempts to clean it up.
      (package private) java.lang.String finishBuffer()
      Clear the buffer and add its contents to the history.
      void flush()
      Flush the console output stream.
      private int fmtPrint​(java.lang.CharSequence buff, int cursorPos)
      Output the specified characters to the output stream without manipulating the current buffer.
      private int fmtPrint​(java.lang.CharSequence buff, int start, int end)  
      private int fmtPrint​(java.lang.CharSequence buff, int start, int end, int cursorPos)  
      int getAutoprintThreshold()  
      boolean getBellEnabled()
      Get whether the console bell is enabled
      private static int getBracketType​(char ch)
      Given a character determines what type of bracket it is (paren, square, curly, or none).
      java.lang.String getCommentBegin()  
      java.util.Collection<Completer> getCompleters()
      Returns an unmodifiable list of all the completers.
      CompletionHandler getCompletionHandler()  
      CursorBuffer getCursorBuffer()  
      (package private) int getCursorPosition()  
      java.lang.Character getEchoCharacter()
      Returns the echo character.
      boolean getExpandEvents()  
      boolean getHandleLitteralNext()
      Get wether literal next are handled by JLine.
      boolean getHandleUserInterrupt()
      Get whether user interrupt handling is enabled
      History getHistory()  
      java.io.InputStream getInput()  
      static java.net.URL getInputRc()
      Retrieve the URL for the inputrc configuration file in effect.
      java.lang.String getKeyMap()
      Returns the name of the current key mapping.
      KeyMap getKeys()  
      java.lang.String getLastBinding()  
      java.io.Writer getOutput()  
      java.lang.String getPrompt()  
      Terminal getTerminal()  
      private void insertClose​(java.lang.String s)  
      private java.lang.String insertComment​(boolean isViMode)  
      boolean isCopyPasteDetectionEnabled()  
      private static boolean isDelimiter​(char c)
      Checks to see if the specified character is a delimiter.
      boolean isHistoryEnabled()
      Whether or not to add new commands to the history buffer.
      private boolean isInViMoveOperationState()  
      boolean isKeyMap​(java.lang.String name)  
      boolean isPaginationEnabled()
      Whether to use pagination when the number of rows of candidates exceeds the height of the terminal.
      private static boolean isWhitespace​(char c)
      Checks to see if a character is a whitespace character.
      boolean killLine()
      Kill the buffer ahead of the current cursor position.
      private static java.lang.String lastLine​(java.lang.String str)
      Returns the text after the last '\n'.
      int moveCursor​(int num)
      Move the cursor where characters.
      private void moveCursorFromTo​(int i0, int i1)  
      private boolean moveHistory​(boolean next)
      Move up or down the history tree.
      private boolean moveHistory​(boolean next, int count)
      Used in "vi" mode for argumented history move, to move a specific number of history entries forward or back.
      private void moveInternal​(int where)
      Move the cursor where characters, without checking the current buffer.
      protected boolean moveToEnd()  
      (package private) int nextTabStop​(int pos)  
      private boolean nextWord()  
      boolean paste()
      Paste the contents of the clipboard into the console buffer
      private boolean previousWord()  
      void print​(java.lang.CharSequence s)
      Output the specified string to the output stream (but not the buffer).
      void printColumns​(java.util.Collection<? extends java.lang.CharSequence> items)
      Output the specified Collection in proper columns.
      protected void printCompletionCandidates()  
      void printForwardSearchStatus​(java.lang.String searchTerm, java.lang.String match)  
      void println()
      Output a platform-dependant newline.
      void println​(java.lang.CharSequence s)  
      void printSearchStatus​(java.lang.String searchTerm, java.lang.String match)  
      private void printSearchStatus​(java.lang.String searchTerm, java.lang.String match, java.lang.String searchLabel)  
      void putString​(java.lang.CharSequence str)
      Write out the specified string to the buffer and the output stream.
      private void rawPrint​(char c, int num)  
      (package private) void rawPrint​(int c)
      Raw output printing
      (package private) void rawPrint​(java.lang.String str)  
      private void rawPrintln​(java.lang.String s)  
      java.lang.Object readBinding​(KeyMap keys)
      Read from the input stream and decode an operation from the key map.
      int readCharacter()
      Read a character from the console.
      int readCharacter​(boolean checkForAltKeyCombo)
      Read a character from the console.
      int readCharacter​(boolean checkForAltKeyCombo, char... allowed)  
      int readCharacter​(char... allowed)  
      java.lang.String readLine()
      Read the next line and return the contents of the buffer.
      java.lang.String readLine​(java.lang.Character mask)
      Read the next line with the specified character mask.
      java.lang.String readLine​(java.lang.String prompt)  
      java.lang.String readLine​(java.lang.String prompt, java.lang.Character mask)
      Read a line from the in InputStream, and return the line (without any trailing newlines).
      java.lang.String readLine​(java.lang.String prompt, java.lang.Character mask, java.lang.String buffer)
      Read a line from the in InputStream, and return the line (without any trailing newlines).
      private java.lang.String readLineSimple()
      Read a line for unsupported terminals.
      void redrawLine()
      Clear the line and redraw it.
      boolean removeCompleter​(Completer completer)
      Remove the specified Completer from the list of handlers for tab-completion.
      protected boolean resetLine()
      Erase the current line.
      void resetPromptLine​(java.lang.String prompt, java.lang.String buffer, int cursorDest)
      Erases the current line with the existing prompt, then redraws the line with the provided prompt and buffer
      void restoreLine​(java.lang.String originalPrompt, int cursorDest)  
      int searchBackwards​(java.lang.String searchTerm)
      Search backwards in history from the current position.
      int searchBackwards​(java.lang.String searchTerm, int startIndex)
      Search backward in history from a given position.
      int searchBackwards​(java.lang.String searchTerm, int startIndex, boolean startsWith)  
      int searchForwards​(java.lang.String searchTerm)
      Search forwards in history from the current position.
      int searchForwards​(java.lang.String searchTerm, int startIndex)
      Search forward in history from a given position.
      int searchForwards​(java.lang.String searchTerm, int startIndex, boolean startsWith)  
      void setAutoprintThreshold​(int threshold)  
      void setBellEnabled​(boolean enabled)
      Set whether the console bell is enabled.
      private void setBuffer​(java.lang.CharSequence buffer)  
      private void setBuffer​(java.lang.String buffer)
      Set the current buffer's content to the specified String.
      private void setBufferKeepPos​(java.lang.CharSequence buffer)  
      private void setBufferKeepPos​(java.lang.String buffer)  
      void setCommentBegin​(java.lang.String commentBegin)
      Sets the string that will be used to start a comment when the insert-comment key is struck.
      void setCompletionHandler​(CompletionHandler handler)  
      void setCopyPasteDetection​(boolean onoff)
      Enables or disables copy and paste detection.
      boolean setCursorPosition​(int position)
      Move the cursor position to the specified absolute index.
      void setEchoCharacter​(java.lang.Character c)
      Set the echo character.
      void setExpandEvents​(boolean expand)  
      void setHandleLitteralNext​(boolean handleLitteralNext)
      Set wether literal next are handled by JLine.
      void setHandleUserInterrupt​(boolean enabled)
      Set whether user interrupts (ctrl-C) are handled by having JLine throw UserInterruptException from readLine().
      void setHistory​(History history)  
      void setHistoryEnabled​(boolean enabled)
      Whether or not to add new commands to the history buffer.
      (package private) void setInput​(java.io.InputStream in)  
      boolean setKeyMap​(java.lang.String name)
      Sets the current keymap by name.
      void setPaginationEnabled​(boolean enabled)
      Whether to use pagination when the number of rows of candidates exceeds the height of the terminal.
      void setParenBlinkTimeout​(int timeout)  
      void setPrompt​(java.lang.String prompt)  
      private void setupSigCont()  
      void shutdown()
      Deprecated.
      Use close() instead.
      private static char switchCase​(char ch)  
      private boolean tputs​(java.lang.String cap, java.lang.Object... params)  
      private boolean transposeChars​(int count)
      Performs character transpose.
      private boolean unixWordRubout​(int count)
      Deletes to the beginning of the word that the cursor is sitting on.
      private boolean upCaseWord()  
      private boolean viChangeCase​(int count)
      Switches the case of the current character from upper to lower or lower to upper as necessary and advances the cursor one position to the right.
      private boolean viChangeChar​(int count, int c)
      Implements the vi change character command (in move-mode "r" followed by the character to change to).
      private boolean viCharSearch​(int count, int invokeChar, int ch)
      Searches forward of the current position for a character and moves the cursor onto it.
      private boolean viDelete​(int count)
      Deletes the character you are sitting on and sucks the rest of the line in from the right.
      private Operation viDeleteChangeYankToRemap​(Operation op)
      This method is calling while doing a delete-to ("d"), change-to ("c"), or yank-to ("y") and it filters out only those movement operations that are allowable during those operations.
      private boolean viDeleteTo​(int startPos, int endPos, boolean isChange)
      Performs the vi "delete-to" action, deleting characters between a given span of the input line.
      private boolean viEndWord​(int count)
      Implements a close facsimile of the vi end-of-word movement.
      private boolean viMatch()
      Implements vi style bracket matching ("%" command).
      private boolean viNextWord​(int count)
      This is a close facsimile of the actual vi next word logic.
      private boolean viPreviousWord​(int count)
      This is a close facsimile of the actual vi previous word logic.
      private boolean viPut​(int count)
      Pasts the yank buffer to the right of the current cursor position and moves the cursor to the end of the pasted region.
      private boolean viRubout​(int count)
      Deletes the previous character from the cursor position
      private int viSearch​(char searchChar)
      Implements vi search ("/" or "?").
      private boolean viYankTo​(int startPos, int endPos)
      Implement the "vi" yank-to operation.
      (package private) int wcwidth​(int ucs, int pos)  
      (package private) int wcwidth​(java.lang.CharSequence str, int pos)  
      (package private) int wcwidth​(java.lang.CharSequence str, int start, int end, int pos)  
      boolean yank()  
      boolean yankPop()  
      • Methods inherited from class java.lang.Object

        clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • JLINE_ESC_TIMEOUT

        public static final java.lang.String JLINE_ESC_TIMEOUT
        See Also:
        Constant Field Values
      • DEFAULT_INPUT_RC

        public static final java.lang.String DEFAULT_INPUT_RC
        See Also:
        Constant Field Values
      • JLINE_EXPAND_EVENTS

        public static final java.lang.String JLINE_EXPAND_EVENTS
        See Also:
        Constant Field Values
      • resources

        private static final java.util.ResourceBundle resources
      • out

        private final java.io.Writer out
      • cursorOk

        private boolean cursorOk
      • prompt

        private java.lang.String prompt
      • promptLen

        private int promptLen
      • expandEvents

        private boolean expandEvents
      • bellEnabled

        private boolean bellEnabled
      • handleUserInterrupt

        private boolean handleUserInterrupt
      • handleLitteralNext

        private boolean handleLitteralNext
      • mask

        private java.lang.Character mask
      • echoCharacter

        private java.lang.Character echoCharacter
      • searchTerm

        private java.lang.StringBuffer searchTerm
      • previousSearchTerm

        private java.lang.String previousSearchTerm
      • searchIndex

        private int searchIndex
      • parenBlinkTimeout

        private int parenBlinkTimeout
      • opBuffer

        private final java.lang.StringBuilder opBuffer
      • pushBackChar

        private final java.util.Stack<java.lang.Character> pushBackChar
      • escapeTimeout

        private long escapeTimeout
      • reader

        private java.io.Reader reader
      • charSearchChar

        private char charSearchChar
        Last character searched for with a vi character search
      • charSearchLastInvokeChar

        private char charSearchLastInvokeChar
      • charSearchFirstInvokeChar

        private char charSearchFirstInvokeChar
      • yankBuffer

        private java.lang.String yankBuffer
        The vi yank buffer
      • encoding

        private java.lang.String encoding
      • quotedInsert

        private boolean quotedInsert
      • recording

        private boolean recording
      • macro

        private java.lang.String macro
      • appName

        private java.lang.String appName
      • inputrcUrl

        private java.net.URL inputrcUrl
      • commentBegin

        private java.lang.String commentBegin
      • skipLF

        private boolean skipLF
      • copyPasteDetection

        private boolean copyPasteDetection
        Set to true if the reader should attempt to detect copy-n-paste. The effect of this that an attempt is made to detect if tab is quickly followed by another character, then it is assumed that the tab was a literal tab as part of a copy-and-paste operation and is inserted as such.
      • JLINE_COMPLETION_THRESHOLD

        public static final java.lang.String JLINE_COMPLETION_THRESHOLD
        See Also:
        Constant Field Values
      • completers

        private final java.util.List<Completer> completers
      • autoprintThreshold

        private int autoprintThreshold
        The number of tab-completion candidates above which a warning will be prompted before showing all the candidates.
      • paginationEnabled

        private boolean paginationEnabled
      • historyEnabled

        private boolean historyEnabled
      • LINE_SEPARATOR

        private static final java.lang.String LINE_SEPARATOR
      • maskThread

        private java.lang.Thread maskThread
    • Constructor Detail

      • ConsoleReader

        public ConsoleReader()
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • ConsoleReader

        public ConsoleReader​(java.io.InputStream in,
                             java.io.OutputStream out)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • ConsoleReader

        public ConsoleReader​(java.io.InputStream in,
                             java.io.OutputStream out,
                             Terminal term)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • ConsoleReader

        public ConsoleReader​(@Nullable
                             java.lang.String appName,
                             java.io.InputStream in,
                             java.io.OutputStream out,
                             @Nullable
                             Terminal term)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • ConsoleReader

        public ConsoleReader​(@Nullable
                             java.lang.String appName,
                             java.io.InputStream in,
                             java.io.OutputStream out,
                             @Nullable
                             Terminal term,
                             @Nullable
                             java.lang.String encoding)
                      throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • setupSigCont

        private void setupSigCont()
      • getInputRc

        public static java.net.URL getInputRc()
                                       throws java.io.IOException
        Retrieve the URL for the inputrc configuration file in effect. Intended use is for instantiating ConsoleKeys, to read inputrc variables.
        Throws:
        java.io.IOException
      • getKeys

        public KeyMap getKeys()
      • setInput

        void setInput​(java.io.InputStream in)
               throws java.io.IOException
        Throws:
        java.io.IOException
      • close

        public void close()
        Shuts the console reader down. This method should be called when you have completed using the reader as it shuts down and cleans up resources that would otherwise be "leaked".
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
      • shutdown

        @Deprecated
        public void shutdown()
        Deprecated.
        Use close() instead.
        Shuts the console reader down. The same as close().
      • finalize

        protected void finalize()
                         throws java.lang.Throwable
        Shuts down the ConsoleReader if the JVM attempts to clean it up.
        Overrides:
        finalize in class java.lang.Object
        Throws:
        java.lang.Throwable
      • getInput

        public java.io.InputStream getInput()
      • getOutput

        public java.io.Writer getOutput()
      • getTerminal

        public Terminal getTerminal()
      • setExpandEvents

        public void setExpandEvents​(boolean expand)
      • getExpandEvents

        public boolean getExpandEvents()
      • setCopyPasteDetection

        public void setCopyPasteDetection​(boolean onoff)
        Enables or disables copy and paste detection. The effect of enabling this this setting is that when a tab is received immediately followed by another character, the tab will not be treated as a completion, but as a tab literal.
        Parameters:
        onoff - true if detection is enabled
      • isCopyPasteDetectionEnabled

        public boolean isCopyPasteDetectionEnabled()
        Returns:
        true if copy and paste detection is enabled.
      • setBellEnabled

        public void setBellEnabled​(boolean enabled)
        Set whether the console bell is enabled.
        Parameters:
        enabled - true if enabled; false otherwise
        Since:
        2.7
      • getBellEnabled

        public boolean getBellEnabled()
        Get whether the console bell is enabled
        Returns:
        true if enabled; false otherwise
        Since:
        2.7
      • setHandleUserInterrupt

        public void setHandleUserInterrupt​(boolean enabled)
        Set whether user interrupts (ctrl-C) are handled by having JLine throw UserInterruptException from readLine(). Otherwise, the JVM will handle SIGINT as normal, which usually causes it to exit. The default is false.
        Since:
        2.10
      • getHandleUserInterrupt

        public boolean getHandleUserInterrupt()
        Get whether user interrupt handling is enabled
        Returns:
        true if enabled; false otherwise
        Since:
        2.10
      • setHandleLitteralNext

        public void setHandleLitteralNext​(boolean handleLitteralNext)
        Set wether literal next are handled by JLine.
        Since:
        2.13
      • getHandleLitteralNext

        public boolean getHandleLitteralNext()
        Get wether literal next are handled by JLine.
        Since:
        2.13
      • setCommentBegin

        public void setCommentBegin​(java.lang.String commentBegin)
        Sets the string that will be used to start a comment when the insert-comment key is struck.
        Parameters:
        commentBegin - The begin comment string.
        Since:
        2.7
      • getCommentBegin

        public java.lang.String getCommentBegin()
        Returns:
        the string that will be used to start a comment when the insert-comment key is struck.
        Since:
        2.7
      • setPrompt

        public void setPrompt​(java.lang.String prompt)
      • getPrompt

        public java.lang.String getPrompt()
      • setEchoCharacter

        public void setEchoCharacter​(java.lang.Character c)
        Set the echo character. For example, to have "*" entered when a password is typed:
         myConsoleReader.setEchoCharacter(new Character('*'));
         
        Setting the character to null will restore normal character echoing.

        Setting the character to Character.valueOf(0) will cause nothing to be echoed.

        Parameters:
        c - the character to echo to the console in place of the typed character.
      • getEchoCharacter

        public java.lang.Character getEchoCharacter()
        Returns the echo character.
      • resetLine

        protected final boolean resetLine()
                                   throws java.io.IOException
        Erase the current line.
        Returns:
        false if we failed (e.g., the buffer was empty)
        Throws:
        java.io.IOException
      • wcwidth

        int wcwidth​(java.lang.CharSequence str,
                    int pos)
      • wcwidth

        int wcwidth​(java.lang.CharSequence str,
                    int start,
                    int end,
                    int pos)
      • wcwidth

        int wcwidth​(int ucs,
                    int pos)
      • nextTabStop

        int nextTabStop​(int pos)
      • getCursorPosition

        int getCursorPosition()
      • lastLine

        private static java.lang.String lastLine​(java.lang.String str)
        Returns the text after the last '\n'. prompt is returned if no '\n' characters are present. null is returned if prompt is null.
      • setCursorPosition

        public boolean setCursorPosition​(int position)
                                  throws java.io.IOException
        Move the cursor position to the specified absolute index.
        Throws:
        java.io.IOException
      • setBuffer

        private void setBuffer​(java.lang.String buffer)
                        throws java.io.IOException
        Set the current buffer's content to the specified String. The visual console will be modified to show the current buffer.
        Parameters:
        buffer - the new contents of the buffer.
        Throws:
        java.io.IOException
      • setBuffer

        private void setBuffer​(java.lang.CharSequence buffer)
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • setBufferKeepPos

        private void setBufferKeepPos​(java.lang.String buffer)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • setBufferKeepPos

        private void setBufferKeepPos​(java.lang.CharSequence buffer)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • drawLine

        public void drawLine()
                      throws java.io.IOException
        Output put the prompt + the current buffer
        Throws:
        java.io.IOException
      • redrawLine

        public void redrawLine()
                        throws java.io.IOException
        Clear the line and redraw it.
        Throws:
        java.io.IOException
      • finishBuffer

        final java.lang.String finishBuffer()
                                     throws java.io.IOException
        Clear the buffer and add its contents to the history.
        Returns:
        the former contents of the buffer.
        Throws:
        java.io.IOException
      • expandEvents

        protected java.lang.String expandEvents​(java.lang.String str)
                                         throws java.io.IOException
        Expand event designator such as !!, !#, !3, etc... See http://www.gnu.org/software/bash/manual/html_node/Event-Designators.html
        Throws:
        java.io.IOException
      • putString

        public void putString​(java.lang.CharSequence str)
                       throws java.io.IOException
        Write out the specified string to the buffer and the output stream.
        Throws:
        java.io.IOException
      • drawBuffer

        private void drawBuffer​(int clear)
                         throws java.io.IOException
        Redraw the rest of the buffer from the cursor onwards. This is necessary for inserting text into the buffer.
        Parameters:
        clear - the number of characters to clear after the end of the buffer
        Throws:
        java.io.IOException
      • drawBuffer

        private void drawBuffer()
                         throws java.io.IOException
        Redraw the rest of the buffer from the cursor onwards. This is necessary for inserting text into the buffer.
        Throws:
        java.io.IOException
      • clearAhead

        private void clearAhead​(int num,
                                int pos)
                         throws java.io.IOException
        Clear ahead the specified number of characters without moving the cursor.
        Parameters:
        num - the number of characters to clear
        pos - the current screen cursor position
        Throws:
        java.io.IOException
      • back

        protected void back​(int num)
                     throws java.io.IOException
        Move the visual cursor backward without modifying the buffer cursor.
        Throws:
        java.io.IOException
      • flush

        public void flush()
                   throws java.io.IOException
        Flush the console output stream. This is important for printout out single characters (like a backspace or keyboard) that we want the console to handle immediately.
        Throws:
        java.io.IOException
      • backspaceAll

        private int backspaceAll()
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • backspace

        private int backspace​(int num)
                       throws java.io.IOException
        Issue num backspaces.
        Returns:
        the number of characters backed up
        Throws:
        java.io.IOException
      • backspace

        public boolean backspace()
                          throws java.io.IOException
        Issue a backspace.
        Returns:
        true if successful
        Throws:
        java.io.IOException
      • moveToEnd

        protected boolean moveToEnd()
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • deleteCurrentCharacter

        private boolean deleteCurrentCharacter()
                                        throws java.io.IOException
        Delete the character at the current position and redraw the remainder of the buffer.
        Throws:
        java.io.IOException
      • viDeleteChangeYankToRemap

        private Operation viDeleteChangeYankToRemap​(Operation op)
        This method is calling while doing a delete-to ("d"), change-to ("c"), or yank-to ("y") and it filters out only those movement operations that are allowable during those operations. Any operation that isn't allow drops you back into movement mode.
        Parameters:
        op - The incoming operation to remap
        Returns:
        The remaped operation
      • viRubout

        private boolean viRubout​(int count)
                          throws java.io.IOException
        Deletes the previous character from the cursor position
        Parameters:
        count - number of times to do it.
        Returns:
        true if it was done.
        Throws:
        java.io.IOException
      • viDelete

        private boolean viDelete​(int count)
                          throws java.io.IOException
        Deletes the character you are sitting on and sucks the rest of the line in from the right.
        Parameters:
        count - Number of times to perform the operation.
        Returns:
        true if its works, false if it didn't
        Throws:
        java.io.IOException
      • viChangeCase

        private boolean viChangeCase​(int count)
                              throws java.io.IOException
        Switches the case of the current character from upper to lower or lower to upper as necessary and advances the cursor one position to the right.
        Parameters:
        count - The number of times to repeat
        Returns:
        true if it completed successfully, false if not all case changes could be completed.
        Throws:
        java.io.IOException
      • viChangeChar

        private boolean viChangeChar​(int count,
                                     int c)
                              throws java.io.IOException
        Implements the vi change character command (in move-mode "r" followed by the character to change to).
        Parameters:
        count - Number of times to perform the action
        c - The character to change to
        Returns:
        Whether or not there were problems encountered
        Throws:
        java.io.IOException
      • viPreviousWord

        private boolean viPreviousWord​(int count)
                                throws java.io.IOException
        This is a close facsimile of the actual vi previous word logic. In actual vi words are determined by boundaries of identity characterse. This logic is a bit more simple and simply looks at white space or digits or characters. It should be revised at some point.
        Parameters:
        count - number of iterations
        Returns:
        true if the move was successful, false otherwise
        Throws:
        java.io.IOException
      • viDeleteTo

        private boolean viDeleteTo​(int startPos,
                                   int endPos,
                                   boolean isChange)
                            throws java.io.IOException
        Performs the vi "delete-to" action, deleting characters between a given span of the input line.
        Parameters:
        startPos - The start position
        endPos - The end position.
        isChange - If true, then the delete is part of a change operationg (e.g. "c$" is change-to-end-of line, so we first must delete to end of line to start the change
        Returns:
        true if it succeeded, false otherwise
        Throws:
        java.io.IOException
      • viYankTo

        private boolean viYankTo​(int startPos,
                                 int endPos)
                          throws java.io.IOException
        Implement the "vi" yank-to operation. This operation allows you to yank the contents of the current line based upon a move operation, for exaple "yw" yanks the current word, "3yw" yanks 3 words, etc.
        Parameters:
        startPos - The starting position from which to yank
        endPos - The ending position to which to yank
        Returns:
        true if the yank succeeded
        Throws:
        java.io.IOException
      • viPut

        private boolean viPut​(int count)
                       throws java.io.IOException
        Pasts the yank buffer to the right of the current cursor position and moves the cursor to the end of the pasted region.
        Parameters:
        count - Number of times to perform the operation.
        Returns:
        true if it worked, false otherwise
        Throws:
        java.io.IOException
      • viCharSearch

        private boolean viCharSearch​(int count,
                                     int invokeChar,
                                     int ch)
                              throws java.io.IOException
        Searches forward of the current position for a character and moves the cursor onto it.
        Parameters:
        count - Number of times to repeat the process.
        ch - The character to search for
        Returns:
        true if the char was found, false otherwise
        Throws:
        java.io.IOException
      • switchCase

        private static char switchCase​(char ch)
      • isInViMoveOperationState

        private final boolean isInViMoveOperationState()
        Returns:
        true if line reader is in the middle of doing a change-to delete-to or yank-to.
      • viNextWord

        private boolean viNextWord​(int count)
                            throws java.io.IOException
        This is a close facsimile of the actual vi next word logic. As with viPreviousWord() this probably needs to be improved at some point.
        Parameters:
        count - number of iterations
        Returns:
        true if the move was successful, false otherwise
        Throws:
        java.io.IOException
      • viEndWord

        private boolean viEndWord​(int count)
                           throws java.io.IOException
        Implements a close facsimile of the vi end-of-word movement. If the character is on white space, it takes you to the end of the next word. If it is on the last character of a word it takes you to the next of the next word. Any other character of a word, takes you to the end of the current word.
        Parameters:
        count - Number of times to repeat the action
        Returns:
        true if it worked.
        Throws:
        java.io.IOException
      • previousWord

        private boolean previousWord()
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • nextWord

        private boolean nextWord()
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • unixWordRubout

        private boolean unixWordRubout​(int count)
                                throws java.io.IOException
        Deletes to the beginning of the word that the cursor is sitting on. If the cursor is on white-space, it deletes that and to the beginning of the word before it. If the user is not on a word or whitespace it deletes up to the end of the previous word.
        Parameters:
        count - Number of times to perform the operation
        Returns:
        true if it worked, false if you tried to delete too many words
        Throws:
        java.io.IOException
      • insertComment

        private java.lang.String insertComment​(boolean isViMode)
                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • viSearch

        private int viSearch​(char searchChar)
                      throws java.io.IOException
        Implements vi search ("/" or "?").
        Throws:
        java.io.IOException
      • setParenBlinkTimeout

        public void setParenBlinkTimeout​(int timeout)
      • insertClose

        private void insertClose​(java.lang.String s)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • viMatch

        private boolean viMatch()
                         throws java.io.IOException
        Implements vi style bracket matching ("%" command). The matching bracket for the current bracket type that you are sitting on is matched. The logic works like so:
        Returns:
        true if it worked, false if the cursor was not on a bracket character or if there was no matching bracket.
        Throws:
        java.io.IOException
      • getBracketType

        private static int getBracketType​(char ch)
        Given a character determines what type of bracket it is (paren, square, curly, or none).
        Parameters:
        ch - The character to check
        Returns:
        1 is square, 2 curly, 3 parent, or zero for none. The value will be negated if it is the closing form of the bracket.
      • deletePreviousWord

        private boolean deletePreviousWord()
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • deleteNextWord

        private boolean deleteNextWord()
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • capitalizeWord

        private boolean capitalizeWord()
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • upCaseWord

        private boolean upCaseWord()
                            throws java.io.IOException
        Throws:
        java.io.IOException
      • downCaseWord

        private boolean downCaseWord()
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • transposeChars

        private boolean transposeChars​(int count)
                                throws java.io.IOException
        Performs character transpose. The character prior to the cursor and the character under the cursor are swapped and the cursor is advanced one character unless you are already at the end of the line.
        Parameters:
        count - The number of times to perform the transpose
        Returns:
        true if the operation succeeded, false otherwise (e.g. transpose cannot happen at the beginning of the line).
        Throws:
        java.io.IOException
      • isKeyMap

        public boolean isKeyMap​(java.lang.String name)
      • accept

        public java.lang.String accept()
                                throws java.io.IOException
        The equivalent of hitting <RET>. The line is considered complete and is returned.
        Returns:
        The completed line of text.
        Throws:
        java.io.IOException
      • abort

        private void abort()
                    throws java.io.IOException
        Throws:
        java.io.IOException
      • moveCursor

        public int moveCursor​(int num)
                       throws java.io.IOException
        Move the cursor where characters.
        Parameters:
        num - If less than 0, move abs(where) to the left, otherwise move where to the right.
        Returns:
        The number of spaces we moved
        Throws:
        java.io.IOException
      • moveInternal

        private void moveInternal​(int where)
                           throws java.io.IOException
        Move the cursor where characters, without checking the current buffer.
        Parameters:
        where - the number of characters to move to the right or left.
        Throws:
        java.io.IOException
      • moveCursorFromTo

        private void moveCursorFromTo​(int i0,
                                      int i1)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • readCharacter

        public int readCharacter()
                          throws java.io.IOException
        Read a character from the console.
        Returns:
        the character, or -1 if an EOF is received.
        Throws:
        java.io.IOException
      • readCharacter

        public int readCharacter​(boolean checkForAltKeyCombo)
                          throws java.io.IOException
        Read a character from the console. If boolean parameter is "true", it will check whether the keystroke was an "alt-" key combination, and if so add 1000 to the value returned. Better way...?
        Returns:
        the character, or -1 if an EOF is received.
        Throws:
        java.io.IOException
      • clearEcho

        private int clearEcho​(int c)
                       throws java.io.IOException
        Clear the echoed characters for the specified character code.
        Throws:
        java.io.IOException
      • readCharacter

        public int readCharacter​(char... allowed)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • readCharacter

        public int readCharacter​(boolean checkForAltKeyCombo,
                                 char... allowed)
                          throws java.io.IOException
        Throws:
        java.io.IOException
      • readBinding

        public java.lang.Object readBinding​(KeyMap keys)
                                     throws java.io.IOException
        Read from the input stream and decode an operation from the key map. The input stream will be read character by character until a matching binding can be found. Characters that can't possibly be matched to any binding will be discarded.
        Parameters:
        keys - the KeyMap to use for decoding the input stream
        Returns:
        the decoded binding or null if the end of stream has been reached
        Throws:
        java.io.IOException
      • getLastBinding

        public java.lang.String getLastBinding()
      • readLine

        public java.lang.String readLine()
                                  throws java.io.IOException
        Read the next line and return the contents of the buffer.
        Throws:
        java.io.IOException
      • readLine

        public java.lang.String readLine​(java.lang.Character mask)
                                  throws java.io.IOException
        Read the next line with the specified character mask. If null, then characters will be echoed. If 0, then no characters will be echoed.
        Throws:
        java.io.IOException
      • readLine

        public java.lang.String readLine​(java.lang.String prompt)
                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • readLine

        public java.lang.String readLine​(java.lang.String prompt,
                                         java.lang.Character mask)
                                  throws java.io.IOException
        Read a line from the in InputStream, and return the line (without any trailing newlines).
        Parameters:
        prompt - The prompt to issue to the console, may be null.
        Returns:
        A line that is read from the terminal, or null if there was null input (e.g., CTRL-D was pressed).
        Throws:
        java.io.IOException
      • setKeyMap

        public boolean setKeyMap​(java.lang.String name)
        Sets the current keymap by name. Supported keymaps are "emacs", "vi-insert", "vi-move".
        Parameters:
        name - The name of the keymap to switch to
        Returns:
        true if the keymap was set, or false if the keymap is not recognized.
      • getKeyMap

        public java.lang.String getKeyMap()
        Returns the name of the current key mapping.
        Returns:
        the name of the key mapping. This will be the canonical name of the current mode of the key map and may not reflect the name that was used with setKeyMap(String).
      • readLine

        public java.lang.String readLine​(java.lang.String prompt,
                                         java.lang.Character mask,
                                         java.lang.String buffer)
                                  throws java.io.IOException
        Read a line from the in InputStream, and return the line (without any trailing newlines).
        Parameters:
        prompt - The prompt to issue to the console, may be null.
        Returns:
        A line that is read from the terminal, or null if there was null input (e.g., CTRL-D was pressed).
        Throws:
        java.io.IOException
      • readLineSimple

        private java.lang.String readLineSimple()
                                         throws java.io.IOException
        Read a line for unsupported terminals.
        Throws:
        java.io.IOException
      • addCompleter

        public boolean addCompleter​(Completer completer)
        Add the specified Completer to the list of handlers for tab-completion.
        Parameters:
        completer - the Completer to add
        Returns:
        true if it was successfully added
      • removeCompleter

        public boolean removeCompleter​(Completer completer)
        Remove the specified Completer from the list of handlers for tab-completion.
        Parameters:
        completer - The Completer to remove
        Returns:
        True if it was successfully removed
      • getCompleters

        public java.util.Collection<Completer> getCompleters()
        Returns an unmodifiable list of all the completers.
      • setCompletionHandler

        public void setCompletionHandler​(CompletionHandler handler)
      • complete

        protected boolean complete()
                            throws java.io.IOException
        Use the completers to modify the buffer with the appropriate completions.
        Returns:
        true if successful
        Throws:
        java.io.IOException
      • printCompletionCandidates

        protected void printCompletionCandidates()
                                          throws java.io.IOException
        Throws:
        java.io.IOException
      • setAutoprintThreshold

        public void setAutoprintThreshold​(int threshold)
        Parameters:
        threshold - the number of candidates to print without issuing a warning.
      • getAutoprintThreshold

        public int getAutoprintThreshold()
        Returns:
        the number of candidates to print without issuing a warning.
      • setPaginationEnabled

        public void setPaginationEnabled​(boolean enabled)
        Whether to use pagination when the number of rows of candidates exceeds the height of the terminal.
      • isPaginationEnabled

        public boolean isPaginationEnabled()
        Whether to use pagination when the number of rows of candidates exceeds the height of the terminal.
      • setHistory

        public void setHistory​(History history)
      • getHistory

        public History getHistory()
      • setHistoryEnabled

        public void setHistoryEnabled​(boolean enabled)
        Whether or not to add new commands to the history buffer.
      • isHistoryEnabled

        public boolean isHistoryEnabled()
        Whether or not to add new commands to the history buffer.
      • moveHistory

        private boolean moveHistory​(boolean next,
                                    int count)
                             throws java.io.IOException
        Used in "vi" mode for argumented history move, to move a specific number of history entries forward or back.
        Parameters:
        next - If true, move forward
        count - The number of entries to move
        Returns:
        true if the move was successful
        Throws:
        java.io.IOException
      • moveHistory

        private boolean moveHistory​(boolean next)
                             throws java.io.IOException
        Move up or down the history tree.
        Throws:
        java.io.IOException
      • fmtPrint

        private int fmtPrint​(java.lang.CharSequence buff,
                             int cursorPos)
                      throws java.io.IOException
        Output the specified characters to the output stream without manipulating the current buffer.
        Throws:
        java.io.IOException
      • fmtPrint

        private int fmtPrint​(java.lang.CharSequence buff,
                             int start,
                             int end)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • fmtPrint

        private int fmtPrint​(java.lang.CharSequence buff,
                             int start,
                             int end,
                             int cursorPos)
                      throws java.io.IOException
        Throws:
        java.io.IOException
      • print

        public void print​(java.lang.CharSequence s)
                   throws java.io.IOException
        Output the specified string to the output stream (but not the buffer).
        Throws:
        java.io.IOException
      • println

        public void println​(java.lang.CharSequence s)
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • println

        public void println()
                     throws java.io.IOException
        Output a platform-dependant newline.
        Throws:
        java.io.IOException
      • rawPrint

        final void rawPrint​(int c)
                     throws java.io.IOException
        Raw output printing
        Throws:
        java.io.IOException
      • rawPrint

        final void rawPrint​(java.lang.String str)
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • rawPrint

        private void rawPrint​(char c,
                              int num)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • rawPrintln

        private void rawPrintln​(java.lang.String s)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • delete

        public boolean delete()
                       throws java.io.IOException
        Issue a delete.
        Returns:
        true if successful
        Throws:
        java.io.IOException
      • killLine

        public boolean killLine()
                         throws java.io.IOException
        Kill the buffer ahead of the current cursor position.
        Returns:
        true if successful
        Throws:
        java.io.IOException
      • yank

        public boolean yank()
                     throws java.io.IOException
        Throws:
        java.io.IOException
      • yankPop

        public boolean yankPop()
                        throws java.io.IOException
        Throws:
        java.io.IOException
      • clearScreen

        public boolean clearScreen()
                            throws java.io.IOException
        Clear the screen by issuing the ANSI "clear screen" code.
        Throws:
        java.io.IOException
      • beep

        public void beep()
                  throws java.io.IOException
        Issue an audible keyboard bell.
        Throws:
        java.io.IOException
      • paste

        public boolean paste()
                      throws java.io.IOException
        Paste the contents of the clipboard into the console buffer
        Returns:
        true if clipboard contents pasted
        Throws:
        java.io.IOException
      • addTriggeredAction

        public void addTriggeredAction​(char c,
                                       java.awt.event.ActionListener listener)
        Adding a triggered Action allows to give another curse of action if a character passed the pre-processing.

        Say you want to close the application if the user enter q. addTriggerAction('q', new ActionListener(){ System.exit(0); }); would do the trick.

      • printColumns

        public void printColumns​(java.util.Collection<? extends java.lang.CharSequence> items)
                          throws java.io.IOException
        Output the specified Collection in proper columns.
        Throws:
        java.io.IOException
      • beforeReadLine

        private void beforeReadLine​(java.lang.String prompt,
                                    java.lang.Character mask)
      • afterReadLine

        private void afterReadLine()
      • resetPromptLine

        public void resetPromptLine​(java.lang.String prompt,
                                    java.lang.String buffer,
                                    int cursorDest)
                             throws java.io.IOException
        Erases the current line with the existing prompt, then redraws the line with the provided prompt and buffer
        Parameters:
        prompt - the new prompt
        buffer - the buffer to be drawn
        cursorDest - where you want the cursor set when the line has been drawn. -1 for end of line.
        Throws:
        java.io.IOException
      • printSearchStatus

        public void printSearchStatus​(java.lang.String searchTerm,
                                      java.lang.String match)
                               throws java.io.IOException
        Throws:
        java.io.IOException
      • printForwardSearchStatus

        public void printForwardSearchStatus​(java.lang.String searchTerm,
                                             java.lang.String match)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • printSearchStatus

        private void printSearchStatus​(java.lang.String searchTerm,
                                       java.lang.String match,
                                       java.lang.String searchLabel)
                                throws java.io.IOException
        Throws:
        java.io.IOException
      • restoreLine

        public void restoreLine​(java.lang.String originalPrompt,
                                int cursorDest)
                         throws java.io.IOException
        Throws:
        java.io.IOException
      • searchBackwards

        public int searchBackwards​(java.lang.String searchTerm,
                                   int startIndex)
        Search backward in history from a given position.
        Parameters:
        searchTerm - substring to search for.
        startIndex - the index from which on to search
        Returns:
        index where this substring has been found, or -1 else.
      • searchBackwards

        public int searchBackwards​(java.lang.String searchTerm)
        Search backwards in history from the current position.
        Parameters:
        searchTerm - substring to search for.
        Returns:
        index where the substring has been found, or -1 else.
      • searchBackwards

        public int searchBackwards​(java.lang.String searchTerm,
                                   int startIndex,
                                   boolean startsWith)
      • searchForwards

        public int searchForwards​(java.lang.String searchTerm,
                                  int startIndex)
        Search forward in history from a given position.
        Parameters:
        searchTerm - substring to search for.
        startIndex - the index from which on to search
        Returns:
        index where this substring has been found, or -1 else.
      • searchForwards

        public int searchForwards​(java.lang.String searchTerm)
        Search forwards in history from the current position.
        Parameters:
        searchTerm - substring to search for.
        Returns:
        index where the substring has been found, or -1 else.
      • searchForwards

        public int searchForwards​(java.lang.String searchTerm,
                                  int startIndex,
                                  boolean startsWith)
      • isDelimiter

        private static boolean isDelimiter​(char c)
        Checks to see if the specified character is a delimiter. We consider a character a delimiter if it is anything but a letter or digit.
        Parameters:
        c - The character to test
        Returns:
        True if it is a delimiter
      • isWhitespace

        private static boolean isWhitespace​(char c)
        Checks to see if a character is a whitespace character. Currently this delegates to Character.isWhitespace(char), however eventually it should be hooked up so that the definition of whitespace can be configured, as readline does.
        Parameters:
        c - The character to check
        Returns:
        true if the character is a whitespace
      • tputs

        private boolean tputs​(java.lang.String cap,
                              java.lang.Object... params)
                       throws java.io.IOException
        Throws:
        java.io.IOException