diff options
Diffstat (limited to 'ui/room-view.go')
-rw-r--r-- | ui/room-view.go | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/ui/room-view.go b/ui/room-view.go index 7c561cc..bc9c0cc 100644 --- a/ui/room-view.go +++ b/ui/room-view.go @@ -24,6 +24,7 @@ import ( "strings" "time" + "github.com/kyokomi/emoji" "github.com/mattn/go-runewidth" "maunium.net/go/gomuks/debug" @@ -57,6 +58,8 @@ type RoomView struct { ulBorderScreen *mauview.ProxyScreen ulScreen *mauview.ProxyScreen + inputSubmitFunc func(room *RoomView, text string) + prevScreen mauview.Screen parent *MainView @@ -125,12 +128,7 @@ func (view *RoomView) LoadHistory(matrix ifc.MatrixContainer, dir string) (int, } func (view *RoomView) SetInputSubmitFunc(fn func(room *RoomView, text string)) *RoomView { - // FIXME - /*view.input.SetDoneFunc(func(key tcell.Key) { - if key == tcell.KeyEnter { - fn(view, view.input.GetText()) - } - })*/ + view.inputSubmitFunc = fn return view } @@ -249,11 +247,27 @@ func (view *RoomView) Draw(screen mauview.Screen) { } func (view *RoomView) OnKeyEvent(event mauview.KeyEvent) bool { + msgView := view.MessageView() + switch event.Key() { + case tcell.KeyPgUp: + if msgView.IsAtTop() { + go view.parent.LoadHistory(view.Room.ID) + } + msgView.AddScrollOffset(+msgView.Height() / 2) + return true + case tcell.KeyPgDn: + msgView.AddScrollOffset(-msgView.Height() / 2) + return true + case tcell.KeyEnter: + if event.Modifiers() & tcell.ModShift == 0 && event.Modifiers() & tcell.ModCtrl == 0 && view.inputSubmitFunc != nil { + view.inputSubmitFunc(view, view.input.GetText()) + return true + } + } return view.input.OnKeyEvent(event) } func (view *RoomView) OnPasteEvent(event mauview.PasteEvent) bool { - debug.Print("PASTE EVENT", event) return view.input.OnPasteEvent(event) } @@ -320,6 +334,20 @@ func (view *RoomView) autocompleteRoom(existingText string) (completions []compl return } +func (view *RoomView) autocompleteEmoji(word string) (completions []string) { + if len(word) == 0 || word[0] != ':' { + return + } + for name, value := range emoji.CodeMap() { + if name == word { + return []string{value} + } else if strings.HasPrefix(name, word) { + completions = append(completions, name) + } + } + return +} + func (view *RoomView) InputTabComplete(text string, cursorOffset int) { debug.Print("Tab completing", cursorOffset, text) str := runewidth.Truncate(text, cursorOffset, "") @@ -344,6 +372,8 @@ func (view *RoomView) InputTabComplete(text string, cursorOffset int) { } } + strCompletions = append(strCompletions, view.autocompleteEmoji(word)...) + if len(strCompletions) > 0 { strCompletion = util.LongestCommonPrefix(strCompletions) sort.Sort(sort.StringSlice(strCompletions)) |