qeditor keymap
Roberto Raggi
raggi at cli.di.unipi.it
Fri Jun 14 01:26:02 UTC 2002
Hi All,
in the last few days i've tried to implement emacs-style keymap in
qeditor.. the current implementation is very simple
this is the definition of the QEditorKeymap
typedef void (*QEditorCommand)( QEditor* e, int ascii, int arg );
class QEditorKeymap{
public:
QEditorKeymap( QEditor* );
virtual ~QEditorKeymap();
void bind( QEditorCommand f, const KKey& key );
void unbind( const KKey& key );
QEditorCommand entry( const KKey& id ) const;
private:
QEditor* m_editor;
QMap<KKey, QEditorCommand> m_entryList;
};
this is the definition of the global and buffer keymap
m_globalKeymap = new QEditorKeymap( this );
m_bufferKeymap = new QEditorKeymap( this );
...
m_globalKeymap->bind( qe_SetGlobalKeymap, KKey("Ctrl+G") );
m_globalKeymap->bind( qe_SetBufferKeymap, KKey("Ctrl+X") );
m_globalKeymap->bind( qe_Backspace, KKey("Backspace") );
m_globalKeymap->bind( qe_StartSelectMode, KKey("Ctrl+Space") );
m_globalKeymap->bind( qe_Cut, KKey("Ctrl+W") );
m_globalKeymap->bind( qe_Paste, KKey("Ctrl+Y") );
m_globalKeymap->bind( qe_MoveForward, KKey("Right") );
m_globalKeymap->bind( qe_MoveBackward, KKey("Left") );
m_globalKeymap->bind( qe_MoveUp, KKey("Up") );
m_globalKeymap->bind( qe_MoveDown, KKey("Down") );
....
m_bufferKeymap->bind( qe_SaveBuffer, KKey("Ctrl+S") );
m_bufferKeymap->bind( qe_SetGlobalKeymap, KKey("Ctrl+G") );
...
and this is a piece of code from QEditor::keyPressEvent()
if( m_currentKeymap ){
QEditorCommand cmd = m_currentKeymap->entry( key );
if( cmd ){
(*cmd)( this, e->ascii(), 0 );
repaintChanged();
e->accept();
} else if( isprint(e->ascii()) ){
qe_SelfInsert( this, e->ascii(), 0 );
repaintChanged();
e->accept();
} else
e->ignore();
}
return;
the main problem of my implementation is that many keys are already
binded in gideon(i.e. CTRL+Space, CTRL+W, ...), so my keymap support is
unusable :-(
i've noticed rumors about "emacs integration" in gideon,
so my question is:
how embedded emacs can solve this problem?
ciao robe
More information about the KDevelop-devel
mailing list