any_keycode_dialog: support bit ops

main
Ilya Zhuravlev 2021-02-01 13:19:56 -05:00
parent 19895d280c
commit 98a4052673
1 changed files with 10 additions and 3 deletions

View File

@ -1,9 +1,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
import ast
import simpleeval
import operator
from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLineEdit, QLabel
from simpleeval import simple_eval
from keycodes import KEYCODES_SPECIAL, KEYCODES_BASIC, KEYCODES_SHIFTED, KEYCODES_ISO, KEYCODES_BACKLIGHT, \
KEYCODES_MEDIA, KEYCODES_USER, QK_LCTL, QK_LSFT, QK_LALT, QK_LGUI, QK_RCTL, QK_RSFT, QK_RALT, QK_RGUI, QK_LAYER_TAP
from util import tr
@ -119,6 +120,12 @@ class AnyKeycodeDialog(QDialog):
self.layout.addWidget(self.buttons)
self.setLayout(self.layout)
self.ops = simpleeval.DEFAULT_OPERATORS.copy()
self.ops.update({
ast.BitOr: operator.or_,
ast.BitXor: operator.xor,
ast.BitAnd: operator.and_,
})
self.names = dict()
self.prepare_names()
@ -144,7 +151,7 @@ class AnyKeycodeDialog(QDialog):
text = self.txt_entry.text()
value = err = None
try:
value = simple_eval(text, names=self.names, functions=functions)
value = simpleeval.simple_eval(text, names=self.names, functions=functions, operators=self.ops)
except Exception as e:
err = str(e)