15
15
*-------------------------------------------------------------------------*/
16
16
17
17
var Josh = Josh || { } ;
18
- Josh . Version = "0.2.5 " ;
18
+ Josh . Version = "0.2.6 " ;
19
19
( function ( root ) {
20
20
var SPECIAL = {
21
21
8 : 'BACKSPACE' ,
@@ -191,6 +191,10 @@ Josh.Version = "0.2.5";
191
191
resume ( ) ;
192
192
}
193
193
194
+ function cmdNoOp ( ) {
195
+ // no-op, used for keys we capture and ignore
196
+ }
197
+
194
198
function cmdEsc ( ) {
195
199
// no-op, only has an effect on reverse search and that action was taken in call()
196
200
}
@@ -338,6 +342,9 @@ Josh.Version = "0.2.5";
338
342
return ;
339
343
}
340
344
var end = findEndOfCurrentWord ( ) ;
345
+ if ( end == _text . length - 1 ) {
346
+ return cmdKillToEOF ( ) ;
347
+ }
341
348
_killring . append ( _text . substring ( _cursor , end ) )
342
349
_text = remove ( _text , _cursor , end ) ;
343
350
refresh ( ) ;
@@ -528,160 +535,131 @@ Josh.Version = "0.2.5";
528
535
return true ;
529
536
}
530
537
531
- var handled = true ;
538
+ var cmd = null ;
532
539
533
- // check for some special keys, regardless of modifiers
540
+ // check for some special first keys, regardless of modifiers
534
541
switch ( e . keyCode ) {
542
+ case 8 : // Backspace
543
+ cmd = cmdBackspace ;
544
+ break ;
535
545
case 9 : // Tab
536
- queue ( cmdComplete ) ;
546
+ cmd = cmdComplete ;
537
547
break ;
538
548
case 13 : // Enter
539
- queue ( cmdDone ) ;
549
+ cmd = cmdDone ;
540
550
break ;
541
551
case 27 : // Esc
542
- queue ( cmdEsc ) ;
552
+ cmd = cmdEsc ;
543
553
break ;
544
554
case 33 : // Page Up
545
- queue ( cmdHistoryTop ) ;
555
+ cmd = cmdHistoryTop ;
546
556
break ;
547
557
case 34 : // Page Down
548
- queue ( cmdHistoryEnd ) ;
558
+ cmd = cmdHistoryEnd ;
549
559
break ;
550
560
case 35 : // End
551
- queue ( cmdEnd ) ;
561
+ cmd = cmdEnd ;
552
562
break ;
553
563
case 36 : // Home
554
- queue ( cmdHome ) ;
564
+ cmd = cmdHome ;
555
565
break ;
556
566
case 37 : // Left
557
- queue ( cmdLeft ) ;
567
+ cmd = cmdLeft ;
558
568
break ;
559
569
case 38 : // Up
560
- queue ( cmdHistoryPrev ) ;
570
+ cmd = cmdHistoryPrev ;
561
571
break ;
562
572
case 39 : // Right
563
- queue ( cmdRight ) ;
573
+ cmd = cmdRight ;
564
574
break ;
565
575
case 40 : // Down
566
- queue ( cmdHistoryNext ) ;
576
+ cmd = cmdHistoryNext ;
567
577
break ;
568
578
case 46 : // Delete
569
- queue ( cmdDeleteChar ) ;
579
+ cmd = cmdDeleteChar ;
570
580
break ;
571
581
572
582
// these we catch and have no commands for
573
583
case 10 : // Pause
574
584
case 19 : // Caps Lock
575
585
case 45 : // Insert
586
+ cmd = cmdNoOp ;
576
587
break ;
577
588
578
589
// all others we don't handle at this level
579
590
default :
580
- handled = false ;
581
591
break ;
582
592
}
583
- if ( ! handled ) {
584
-
585
- // intercept ctrl- and meta- sequences
586
- if ( e . ctrlKey && ! e . shiftKey && ! e . altKey && ! e . metaKey ) {
587
- switch ( e . keyCode ) {
588
- case 8 : // Backspace
589
-
590
- // Backspace behaves the same with or without Ctrl, but different for meta
591
- queue ( cmdBackspace ) ;
592
- handled = true ;
593
- break ;
594
- case 65 : // A
595
- queue ( cmdHome ) ;
596
- handled = true ;
597
- break ;
598
- case 66 : // B
599
- queue ( cmdLeft ) ;
600
- handled = true ;
601
- break ;
602
- case 67 : // C
603
- queue ( cmdCancel ) ;
604
- handled = true ;
605
- break ;
606
- case 68 : // D
607
- queue ( cmdDeleteChar ) ;
608
- handled = true ;
609
- break ;
610
- case 69 : // E
611
- queue ( cmdEnd ) ;
612
- handled = true ;
613
- break ;
614
- case 70 : // F
615
- queue ( cmdRight ) ;
616
- handled = true ;
617
- break ;
618
- case 80 : // P
619
- queue ( cmdHistoryPrev ) ;
620
- handled = true ;
621
- break ;
622
- case 78 : // N
623
- queue ( cmdHistoryNext ) ;
624
- handled = true ;
625
- break ;
626
- case 75 : // K
627
- queue ( cmdKillToEOF ) ;
628
- handled = true ;
629
- break ;
630
- case 89 : // Y
631
- queue ( cmdYank ) ;
632
- handled = true ;
633
- break ;
634
- case 76 : // L
635
- queue ( cmdClear ) ;
636
- handled = true ;
637
- break ;
638
- case 82 : // R
639
- queue ( cmdReverseSearch ) ;
640
- handled = true ;
641
- break ;
642
- }
643
- } else if ( ( e . altKey || e . metaKey ) && ! e . ctrlKey && ! e . shiftKey ) {
644
- switch ( e . keyCode ) {
645
- case 8 : // Backspace
646
- queue ( cmdKillWordBackward ) ;
647
- handled = true ;
648
- break ;
649
- case 66 : // B
650
- queue ( cmdBackwardWord ) ;
651
- handled = true ;
652
- break ;
653
- case 68 : // D
654
- queue ( cmdKillWordForward ) ;
655
- handled = true ;
656
- break ;
657
- case 70 : // F
658
- queue ( cmdForwardWord ) ;
659
- handled = true ;
660
- break ;
661
- case 89 : // Y
662
- queue ( cmdRotate ) ;
663
- handled = true ;
664
- break ;
665
- }
666
- } else {
667
593
668
- // check for some more special keys without Ctrl or Alt
669
- switch ( e . keyCode ) {
670
- case 8 : // Backspace
671
- queue ( cmdBackspace ) ;
672
- handled = true ;
673
- break ;
674
- }
594
+ // intercept ctrl- and meta- sequences (may override the non-modifier cmd captured above
595
+ if ( e . ctrlKey && ! e . shiftKey && ! e . altKey && ! e . metaKey ) {
596
+ switch ( e . keyCode ) {
597
+ case 65 : // A
598
+ cmd = cmdHome ;
599
+ break ;
600
+ case 66 : // B
601
+ cmd = cmdLeft ;
602
+ break ;
603
+ case 67 : // C
604
+ cmd = cmdCancel ;
605
+ break ;
606
+ case 68 : // D
607
+ cmd = cmdDeleteChar ;
608
+ break ;
609
+ case 69 : // E
610
+ cmd = cmdEnd ;
611
+ break ;
612
+ case 70 : // F
613
+ cmd = cmdRight ;
614
+ break ;
615
+ case 80 : // P
616
+ cmd = cmdHistoryPrev ;
617
+ break ;
618
+ case 78 : // N
619
+ cmd = cmdHistoryNext ;
620
+ break ;
621
+ case 75 : // K
622
+ cmd = cmdKillToEOF ;
623
+ break ;
624
+ case 89 : // Y
625
+ cmd = cmdYank ;
626
+ break ;
627
+ case 76 : // L
628
+ cmd = cmdClear ;
629
+ break ;
630
+ case 82 : // R
631
+ cmd = cmdReverseSearch ;
632
+ break ;
633
+ }
634
+ } else if ( ( e . altKey || e . metaKey ) && ! e . ctrlKey && ! e . shiftKey ) {
635
+ switch ( e . keyCode ) {
636
+ case 8 : // Backspace
637
+ cmd = cmdKillWordBackward ;
638
+ break ;
639
+ case 66 : // B
640
+ cmd = cmdBackwardWord ;
641
+ break ;
642
+ case 68 : // D
643
+ cmd = cmdKillWordForward ;
644
+ break ;
645
+ case 70 : // F
646
+ cmd = cmdForwardWord ;
647
+ break ;
648
+ case 89 : // Y
649
+ cmd = cmdRotate ;
650
+ break ;
675
651
}
676
652
}
677
- if ( ! handled ) {
653
+ if ( ! cmd ) {
678
654
return true ;
679
655
}
656
+ queue ( cmd ) ;
680
657
e . preventDefault ( ) ;
681
658
e . stopPropagation ( ) ;
682
659
e . cancelBubble = true ;
683
660
return false ;
684
661
} ;
662
+
685
663
root . onkeypress = function ( e ) {
686
664
if ( ! _active ) {
687
665
return true ;
0 commit comments