MCPcopy Create free account
hub / github.com/gokcehan/lf / readNormalEvent

Method readNormalEvent

ui.go:1369–1555  ·  view source on GitHub ↗

readNormalEvent is used to read a normal event on the client side. For keys, digits are interpreted as command counts but this is only done for digits preceding any non-digit characters (e.g. "42y2k" as 42 times "y2k").

(ev tcell.Event, nav *nav)

Source from the content-addressed store, hash-verified

1367// digits are interpreted as command counts but this is only done for digits
1368// preceding any non-digit characters (e.g. "42y2k" as 42 times "y2k").
1369func (ui *ui) readNormalEvent(ev tcell.Event, nav *nav) expr {
1370 draw := &callExpr{"draw", nil, 1}
1371
1372 keys := gOpts.nkeys
1373 if nav.isVisualMode() {
1374 keys = gOpts.vkeys
1375 }
1376
1377 switch tev := ev.(type) {
1378 case *tcell.EventKey:
1379 if ui.pasteEvent {
1380 return nil
1381 }
1382
1383 isDigitKey := func(*tcell.EventKey) bool {
1384 if tev.Key() != tcell.KeyRune || tev.Modifiers() != tcell.ModNone {
1385 return false
1386 }
1387
1388 s := tev.Str()
1389 return len(s) == 1 && s[0] >= '0' && s[0] <= '9'
1390 }
1391
1392 switch {
1393 case tev.Key() == tcell.KeyEsc && ui.keyAcc != "":
1394 ui.keyAcc = ""
1395 ui.keyCount = ""
1396 ui.menu = ""
1397 return draw
1398 case isDigitKey(tev) && ui.keyAcc == "":
1399 ui.keyCount += tev.Str()
1400 return draw
1401 default:
1402 ui.keyAcc += readKey(tev)
1403 }
1404
1405 binds, exact := findBinds(keys, ui.keyAcc)
1406 if len(binds) == 0 {
1407 ui.echoerrf("unknown mapping: %s", ui.keyAcc)
1408 ui.keyAcc = ""
1409 ui.keyCount = ""
1410 ui.menu = ""
1411 return draw
1412 }
1413 if !exact {
1414 if gOpts.showbinds {
1415 // mode and already typed keys are obvious here; no need to clutter the menu
1416 ui.menu = listMatchingBinds(binds, ui.keyAcc)
1417 }
1418 return draw
1419 }
1420
1421 expr := keys[ui.keyAcc]
1422 if ui.keyCount != "" {
1423 if count, err := strconv.Atoi(ui.keyCount); err != nil {
1424 log.Printf("converting command count: %s", err)
1425 } else if count > 0 {
1426 switch e := expr.(type) {

Callers 1

readEventMethod · 0.95

Calls 10

echoerrfMethod · 0.95
winAtMethod · 0.95
dirOfWinMethod · 0.95
readKeyFunction · 0.85
findBindsFunction · 0.85
listMatchingBindsFunction · 0.85
isVisualModeMethod · 0.80
currFileMethod · 0.80
getDirMethod · 0.80
IsDirMethod · 0.45

Tested by

no test coverage detected