Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ffa42c7

Browse filesBrowse files
committed
refactored cmd handling (removed redundant state variable)
1 parent 711e948 commit ffa42c7
Copy full SHA for ffa42c7

File tree

Expand file treeCollapse file tree

2 files changed

+93
-109
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+93
-109
lines changed

‎README.md

Copy file name to clipboardExpand all lines: README.md
+7-1Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,14 @@ By implementing the functions `getNode` and `getChildNodes`, this library adds p
125125

126126
## Changelog
127127

128+
**0.2.6** --
129+
* Removed Activation/Deactivation keybindings from Readline, making it an outside concern (see: [Issue 2](https://github.com/sdether/josh.js/issues/2 )
130+
* Fixed Backspace regression introduced by 0.2.5
131+
* Fixed `M-d` not deleting last character of line
132+
* Example shell can now be resized (via jquery-ui.resizable)
133+
128134
**0.2.5** -- 2013/01/14
129-
* Implemented missing Readline behavior (see: [Issue 1](https://github.com/sdether/josh.js/issues/1)
135+
* Implemented missing Readline behavior (see: [Issue 1](https://github.com/sdether/josh.js/issues/1 )
130136
* Added scrollbar to sample implemenation (also adds scrollwheel support)
131137

132138
**0.2.4** -- 2013/01/14

‎js/readline.js

Copy file name to clipboardExpand all lines: js/readline.js
+86-108Lines changed: 86 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*-------------------------------------------------------------------------*/
1616

1717
var Josh = Josh || {};
18-
Josh.Version = "0.2.5";
18+
Josh.Version = "0.2.6";
1919
(function(root) {
2020
var SPECIAL = {
2121
8: 'BACKSPACE',
@@ -191,6 +191,10 @@ Josh.Version = "0.2.5";
191191
resume();
192192
}
193193

194+
function cmdNoOp() {
195+
// no-op, used for keys we capture and ignore
196+
}
197+
194198
function cmdEsc() {
195199
// no-op, only has an effect on reverse search and that action was taken in call()
196200
}
@@ -338,6 +342,9 @@ Josh.Version = "0.2.5";
338342
return;
339343
}
340344
var end = findEndOfCurrentWord();
345+
if(end == _text.length - 1) {
346+
return cmdKillToEOF();
347+
}
341348
_killring.append(_text.substring(_cursor, end))
342349
_text = remove(_text, _cursor, end);
343350
refresh();
@@ -528,160 +535,131 @@ Josh.Version = "0.2.5";
528535
return true;
529536
}
530537

531-
var handled = true;
538+
var cmd = null;
532539

533-
// check for some special keys, regardless of modifiers
540+
// check for some special first keys, regardless of modifiers
534541
switch(e.keyCode) {
542+
case 8: // Backspace
543+
cmd = cmdBackspace;
544+
break;
535545
case 9: // Tab
536-
queue(cmdComplete);
546+
cmd = cmdComplete;
537547
break;
538548
case 13: // Enter
539-
queue(cmdDone);
549+
cmd = cmdDone;
540550
break;
541551
case 27: // Esc
542-
queue(cmdEsc);
552+
cmd = cmdEsc;
543553
break;
544554
case 33: // Page Up
545-
queue(cmdHistoryTop);
555+
cmd = cmdHistoryTop;
546556
break;
547557
case 34: // Page Down
548-
queue(cmdHistoryEnd);
558+
cmd = cmdHistoryEnd;
549559
break;
550560
case 35: // End
551-
queue(cmdEnd);
561+
cmd = cmdEnd;
552562
break;
553563
case 36: // Home
554-
queue(cmdHome);
564+
cmd = cmdHome;
555565
break;
556566
case 37: // Left
557-
queue(cmdLeft);
567+
cmd = cmdLeft;
558568
break;
559569
case 38: // Up
560-
queue(cmdHistoryPrev);
570+
cmd = cmdHistoryPrev;
561571
break;
562572
case 39: // Right
563-
queue(cmdRight);
573+
cmd = cmdRight;
564574
break;
565575
case 40: // Down
566-
queue(cmdHistoryNext);
576+
cmd = cmdHistoryNext;
567577
break;
568578
case 46: // Delete
569-
queue(cmdDeleteChar);
579+
cmd = cmdDeleteChar;
570580
break;
571581

572582
// these we catch and have no commands for
573583
case 10: // Pause
574584
case 19: // Caps Lock
575585
case 45: // Insert
586+
cmd = cmdNoOp;
576587
break;
577588

578589
// all others we don't handle at this level
579590
default:
580-
handled = false;
581591
break;
582592
}
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 {
667593

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;
675651
}
676652
}
677-
if(!handled) {
653+
if(!cmd) {
678654
return true;
679655
}
656+
queue(cmd);
680657
e.preventDefault();
681658
e.stopPropagation();
682659
e.cancelBubble = true;
683660
return false;
684661
};
662+
685663
root.onkeypress = function(e) {
686664
if(!_active) {
687665
return true;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.