X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FTermlib%2FEditor.hh;h=dd202a181ba956af333b0b650b814dbd54efce6c;hb=ab7ff164ab5ae711ec09ce2b24228510f1ffdcff;hp=7db6fafc17dcc05a0d76600fb18d224ac0bb630c;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Utils/Termlib/Editor.hh b/senf/Utils/Termlib/Editor.hh index 7db6faf..dd202a1 100644 --- a/senf/Utils/Termlib/Editor.hh +++ b/senf/Utils/Termlib/Editor.hh @@ -1,24 +1,29 @@ // $Id$ // -// Copyright (C) 2009 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY -// Stefan Bund // -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. +// The contents of this file are subject to the Fraunhofer FOKUS Public License +// Version 1.0 (the "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// http://senf.berlios.de/license.html // -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. +// The Fraunhofer FOKUS Public License Version 1.0 is based on, +// but modifies the Mozilla Public License Version 1.1. +// See the full license text for the amendments. // -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the -// Free Software Foundation, Inc., -// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// Software distributed under the License is distributed on an "AS IS" basis, +// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +// for the specific language governing rights and limitations under the License. +// +// The Original Code is Fraunhofer FOKUS code. +// +// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. +// (registered association), Hansastraße 27 c, 80686 Munich, Germany. +// All Rights Reserved. +// +// Contributor(s): +// Stefan Bund /** \file \brief Editor public header */ @@ -36,7 +41,7 @@ #include "Terminfo.hh" //#include "Editor.mpp" -///////////////////////////////hh.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace senf { namespace term { @@ -102,7 +107,7 @@ namespace term { void write(char ch); void write(std::string const & s); - + AbstractTerminal * terminal_; Terminfo tifo_; KeyParser keyParser_; @@ -113,7 +118,7 @@ namespace term { unsigned displayHeight_; unsigned line_; }; - + /** \brief Single line interactive text editor LineEditor implements a single-line input widget on an arbitrary AbstractTerminal. @@ -125,7 +130,7 @@ namespace term { \li The LineEditor supports an arbitrary auxiliary display area below the input line \li The LineEditor has hide() / show() support to allow editing to be temporarily interrupted. - + The LineEditor will query the user for an input line. When the user accepts a line, LineEditor will call a user callback function. After the callback has been called, the editor is disabled. To accept a new input line, call show(). @@ -154,16 +159,16 @@ namespace term { See the senf::term::bindings namespace for a list of all default provided key binding functions. - - \section editor_complete Completion suppoprt + + \section editor_complete Completion support Completion support is provided by senf::term::bindings::complete(). To use the completer, you need to implement a completion function and pass it as second argument to bindings::complete(): \code - void myCompleter(senf::term::LineEditor & editor, unsigned & b, unsigned & e, + void myCompleter(senf::term::LineEditor & editor, unsigned & b, unsigned & e, std::string & prefix, std::vector & completions) { // Get text to complete @@ -174,7 +179,7 @@ namespace term { } senf::term::LineEditor editor (...); - editor.defineKey(senf::term::KeyParser::TAB, + editor.defineKey(senf::term::KeyParser::TAB, boost::bind(&senf::term::bindings::complete, _1, &myCompleter)); \endcode @@ -184,16 +189,16 @@ namespace term { The completion protocol is as follows: When completion is desired, the completer function is called. \a b and \a e are set to 0 and editor.point() respectively. \a prefix and \a completions are empty. - + \li the completer may restrict the to-be-completed string to any subrange by changing \a b and \a e accordingly. \li If there is an initial substring which applies to \e all completions but should not be listed in the list of completions, assign this value to \a prefix. - \li Add all possible completions to the \a completions vector not including the \a prefix. + \li Add all possible completions to the \a completions vector not including the \a prefix. \li The completion result is taken from the size of the \a completions vector \e only: If this vector is empty, completion failed (even if \a prefix is set), a single entry in \a completions (even if it is the empty string) signals a unique completion. - + \section editor_auxarea The aux display area @@ -212,7 +217,7 @@ namespace term { : public BaseEditor { public: - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// // Types typedef boost::function KeyBinding; ///< Type of a key binding function @@ -221,18 +226,18 @@ namespace term { static unsigned const MAX_HISTORY_SIZE = 1024u; - /////////////////////////////////////////////////////////////////////////// + //-//////////////////////////////////////////////////////////////////////// LineEditor(AbstractTerminal & terminal, AcceptCallback cb); ///< Create a LineEditor /**< \param[in] terminal abstract terminal interface \param[in] cb callback to call for complete input line */ - - /////////////////////////////////////////////////////////////////////////// + + //-//////////////////////////////////////////////////////////////////////// ///\name Overall edit control - ///\{ + //\{ void show(); ///< Enable editor widget void hide(); ///< Disable editor widget @@ -242,18 +247,18 @@ namespace term { void forceRedisplay(); ///< Redisplay the editor buffer \e now void prompt(std::string const & text); ///< Set prompt string - ///\} + //\} ///\name Cursor and display movement - ///\{ + //\{ void gotoChar(unsigned n); ///< Move cursor to position \a n - void scrollTo(unsigned n); ///< Move positon \n to beginning of display line + void scrollTo(unsigned n); ///< Move position \n to beginning of display line - ///\} + //\} ///\name Text manipulation - ///\{ + //\{ void deleteChar(unsigned n=1); ///< Delete \a n characters at point void insert(char ch); ///< Insert \a ch at point @@ -264,47 +269,47 @@ namespace term { text. The cursor will be placed at position \a pos within this text. */ - ///\} + //\} ///\name History - ///\{ + //\{ void pushHistory(std::string const & text, bool accept = false); ///< Add string \a text to history void prevHistory(); ///< Switch to previous history entry void nextHistory(); ///< Switch to next history entry - ///\} + //\} ///\name Aux Display - ///\{ + //\{ void auxDisplay(unsigned line, std::string const & text); - ///< Display \a text on aux display line \a lilne + ///< Display \a text on aux display line \a line unsigned maxAuxDisplayHeight(); ///< Get maximum height of the aux display area void clearAuxDisplay(); ///< Clear the aux display area - ///\} + //\} ///\name Get information - ///\{ + //\{ std::string const & text(); ///< Get current editor buffer contents unsigned point(); ///< Get current cursor position unsigned displayPos(); ///< Get current display position keycode_t lastKey(); ///< Get last key code received - ///\} + //\} ///\name Key bindings - ///\{ + //\{ void defineKey(keycode_t key, KeyBinding binding); ///< Bind key \a key to \a binding void unsetKey(keycode_t key); ///< Remove all bindings for \a key - ///\} - + //\} + private: virtual bool cb_init(); virtual void cb_windowSizeChanged(); @@ -349,14 +354,14 @@ namespace bindings { void nextHistory (LineEditor & editor); ///< Move to next history entry void clearScreen (LineEditor & editor); ///< Clear screen and redisplay editor - typedef boost::function &)> Completer; void complete (LineEditor & editor, Completer completer); ///< Complete text at cursor /**< This function calls \a completer to find the list of possible completions for the text between \a b and \a e (as passed to the completer). The completer must add - all possible completions to the \a completions vector. + all possible completions to the \a completions vector. \see \ref editor_complete */ @@ -364,7 +369,7 @@ namespace bindings { }} -///////////////////////////////hh.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// //#include "Editor.cci" //#include "Editor.ct" //#include "Editor.cti"