More stack effects, and modify the key bindings.
This commit is contained in:
parent
612d48d8cc
commit
043acd685c
|
|
@ -20,9 +20,9 @@ from joy.utils.stack import stack_to_string
|
||||||
tb = TEXT_BINDINGS.copy()
|
tb = TEXT_BINDINGS.copy()
|
||||||
tb.update({
|
tb.update({
|
||||||
'<F3>': lambda tv: tv.copy_selection_to_stack,
|
'<F3>': lambda tv: tv.copy_selection_to_stack,
|
||||||
'<F4>': lambda tv: tv.cut,
|
'<Shift-F3>': lambda tv: tv.cut,
|
||||||
# '<F-->': lambda tv: tv.pastecut,
|
'<F4>': lambda tv: tv.copyto,
|
||||||
# '<F6>': lambda tv: tv.copyto,
|
'<Shift-F4>': lambda tv: tv.pastecut,
|
||||||
})
|
})
|
||||||
defaults = dict(text_bindings=tb, width=80, height=25)
|
defaults = dict(text_bindings=tb, width=80, height=25)
|
||||||
|
|
||||||
|
|
@ -30,20 +30,15 @@ defaults = dict(text_bindings=tb, width=80, height=25)
|
||||||
GLOBAL_COMMANDS = {
|
GLOBAL_COMMANDS = {
|
||||||
'<F5>': 'swap',
|
'<F5>': 'swap',
|
||||||
'<F6>': 'dup',
|
'<F6>': 'dup',
|
||||||
|
|
||||||
'<Shift-F5>': 'roll<',
|
'<Shift-F5>': 'roll<',
|
||||||
'<Shift-F6>': 'roll>',
|
'<Shift-F6>': 'roll>',
|
||||||
|
|
||||||
'<F7>': 'over',
|
'<F7>': 'over',
|
||||||
'<Shift-F7>': 'tuck',
|
'<Shift-F7>': 'tuck',
|
||||||
|
'<F8>': 'parse',
|
||||||
'<Shift-F3>': 'parse',
|
|
||||||
|
|
||||||
'<F12>': 'words',
|
'<F12>': 'words',
|
||||||
'<F1>': 'reset_log show_log',
|
'<F1>': 'reset_log show_log',
|
||||||
'<Escape>': 'clear reset_log show_log',
|
'<Escape>': 'clear reset_log show_log',
|
||||||
'<Control-Delete>': 'pop',
|
'<Control-Delete>': 'pop',
|
||||||
'<Control-Shift-Delete>': 'popd',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -55,14 +50,16 @@ def repo_relative_path(path):
|
||||||
|
|
||||||
|
|
||||||
def key_bindings(*args):
|
def key_bindings(*args):
|
||||||
print dedent('''
|
commands = [
|
||||||
Ctrl-Enter - Run the selection as Joy code.
|
'Control-Enter - Run the selection as Joy code.',
|
||||||
|
'F3 - Copy selection to stack.',
|
||||||
F1 - Reset and show (if hidden) the log.
|
'Shift-F3 - Cut selection to stack.',
|
||||||
Esc - Like F1 but also clears the stack.
|
'F4 - Paste item on top of stack to insertion cursor.',
|
||||||
...
|
'Shift-F4 - Pop and paste top of stack to insertion cursor.',
|
||||||
F12 - print a list of all command words, or right-click "words".
|
]
|
||||||
''')
|
for key, command in GLOBAL_COMMANDS.iteritems():
|
||||||
|
commands.append('%s - %s' % (key.strip('<>'), command))
|
||||||
|
print '\n'.join([''] + sorted(commands))
|
||||||
return args
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -127,7 +124,8 @@ FONT = get_font('Iosevka', size=14) # Requires Tk root already set up.
|
||||||
log.init('Log', LOG_FN, repo_relative_path(LOG_FN), repo, FONT)
|
log.init('Log', LOG_FN, repo_relative_path(LOG_FN), repo, FONT)
|
||||||
t.init('Joy - ' + JOY_HOME, JOY_FN, repo_relative_path(JOY_FN), repo, FONT)
|
t.init('Joy - ' + JOY_HOME, JOY_FN, repo_relative_path(JOY_FN), repo, FONT)
|
||||||
for event, command in GLOBAL_COMMANDS.items():
|
for event, command in GLOBAL_COMMANDS.items():
|
||||||
t.bind_all(event, lambda _, _command=command: world.interpret(_command))
|
t.bind(event, lambda _, _command=command: world.interpret(_command))
|
||||||
|
log.bind(event, lambda _, _command=command: world.interpret(_command))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
||||||
|
|
@ -439,7 +439,6 @@ class TextViewerWidget(tk.Text, MouseBindingsMixin, SavingMixin):
|
||||||
self.delete('0.0', tk.END)
|
self.delete('0.0', tk.END)
|
||||||
self.insert(tk.END, data)
|
self.insert(tk.END, data)
|
||||||
|
|
||||||
|
|
||||||
def popupTB(self, tb):
|
def popupTB(self, tb):
|
||||||
top = tk.Toplevel()
|
top = tk.Toplevel()
|
||||||
T = TextViewerWidget(
|
T = TextViewerWidget(
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ ALIASES = (
|
||||||
('pred', ['--']),
|
('pred', ['--']),
|
||||||
('rolldown', ['roll<']),
|
('rolldown', ['roll<']),
|
||||||
('rollup', ['roll>']),
|
('rollup', ['roll>']),
|
||||||
|
('eh', ['?']),
|
||||||
('id', [u'•']),
|
('id', [u'•']),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -396,15 +396,7 @@ Ss = map(StackStarJoyType, _R)
|
||||||
|
|
||||||
FUNCTIONS = {
|
FUNCTIONS = {
|
||||||
name: SymbolJoyType(name, [DEFS[name]], i)
|
name: SymbolJoyType(name, [DEFS[name]], i)
|
||||||
for i, name in enumerate('''
|
for i, name in enumerate(sorted(DEFS))
|
||||||
ccons cons divmod dup dupd dupdd first first_two fourth over pop
|
|
||||||
popd popdd popop popopd popopdd rest rrest rolldown rollup second
|
|
||||||
stack swaack swap swons third tuck uncons unswons stuncons
|
|
||||||
stununcons unit eq ge gt le lt ne and bool not
|
|
||||||
_Tree_add_Ee _Tree_delete_R0 _Tree_delete_clear_stuff _Tree_get_E
|
|
||||||
add mul sub floordiv modulus div truediv pow
|
|
||||||
neg pred succ
|
|
||||||
'''.strip().split())
|
|
||||||
}
|
}
|
||||||
'''Docstring for functions in Sphinx?'''
|
'''Docstring for functions in Sphinx?'''
|
||||||
|
|
||||||
|
|
@ -414,7 +406,7 @@ def defs():
|
||||||
Return a dict of FunctionJoyType instances to be used with ``infer()``.
|
Return a dict of FunctionJoyType instances to be used with ``infer()``.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
sum_ = product = [(((Ns[1], s1), s0), (n0, s0))]
|
average = sum_ = product = min_ = max_ = [(((Ns[1], s1), s0), (n0, s0))]
|
||||||
|
|
||||||
clear = [(s0, s1)]
|
clear = [(s0, s1)]
|
||||||
|
|
||||||
|
|
@ -467,6 +459,9 @@ FUNCTIONS.update({
|
||||||
joy.library.i,
|
joy.library.i,
|
||||||
joy.library.infra,
|
joy.library.infra,
|
||||||
joy.library._dictionary['nullary'],
|
joy.library._dictionary['nullary'],
|
||||||
|
joy.library._dictionary['unary'],
|
||||||
|
joy.library._dictionary['binary'],
|
||||||
|
joy.library._dictionary['ternary'],
|
||||||
joy.library.x,
|
joy.library.x,
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
|
|
@ -504,6 +499,9 @@ def set_expectations():
|
||||||
branch.expect = s7, (s6, (b1, s5))
|
branch.expect = s7, (s6, (b1, s5))
|
||||||
loop.expect = s6, (b1, s5)
|
loop.expect = s6, (b1, s5)
|
||||||
i.expect = nullary.expect = x.expect = s7, s6
|
i.expect = nullary.expect = x.expect = s7, s6
|
||||||
|
unary.expect = (s1, (a1, s2))
|
||||||
|
binary.expect = (s1, (a1, (a2, s2)))
|
||||||
|
ternary.expect = (s1, (a1, (a2, (a3, s2))))
|
||||||
dip.expect = dupdip.expect = s8, (a8, s7)
|
dip.expect = dupdip.expect = s8, (a8, s7)
|
||||||
dipd.expect = s8, (a8, (a7, s7))
|
dipd.expect = s8, (a8, (a7, s7))
|
||||||
dipdd.expect = s8, (a8, (a7, (a6, s7)))
|
dipdd.expect = s8, (a8, (a7, (a6, s7)))
|
||||||
|
|
|
||||||
|
|
@ -325,11 +325,12 @@ def defs():
|
||||||
|
|
||||||
and_ = __(b1, b2), __(b3)
|
and_ = __(b1, b2), __(b3)
|
||||||
bool_ = not_ = __(a1), __(b1)
|
bool_ = not_ = __(a1), __(b1)
|
||||||
|
eh = compose(dup, bool_)
|
||||||
|
|
||||||
add = div = floordiv = modulus = mul = pow_ = sub = truediv = \
|
add = div = floordiv = mod = mul = pow_ = sub = truediv = \
|
||||||
lshift = rshift = __(n1, n2), __(n3,)
|
lshift = rshift = __(n1, n2), __(n3,)
|
||||||
sqrt = compose(dup, mul)
|
sqr = compose(dup, mul)
|
||||||
succ = pred = neg = __(n1,), __(n2,)
|
abs_ = floor = succ = pred = neg = __(n1,), __(n2,)
|
||||||
divmod_ = pm = __(n2, n1), __(n4, n3)
|
divmod_ = pm = __(n2, n1), __(n4, n3)
|
||||||
|
|
||||||
first_two = compose(uncons, uncons, pop)
|
first_two = compose(uncons, uncons, pop)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue