问题标签 [qscintilla]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何正确覆盖 qscintilla mousePressEvent?
我有 MainWindow 类,它有 qscintilla 编辑器,我想将监听器添加到编辑器 mousePressEvent
如果我覆盖 mousePressEvent - 编辑器将损坏(鼠标单击将不起作用)。我尝试调用初始 mousePressEvent,但它不起作用,应用程序崩溃
python - 使用 QScintilla setText 时如何撤消?
让我首先发布一些我将用来制定我的问题的小辅助函数:
我实际上有几个问题:
问题1)
我会得到这个(你可以在下面的快照中看到问题):
问题2)
如何修改代码以便在按下 ctrl+z 时能够恢复 state1?
现在使用 ctrl+z 时,您将无法获得 state1:
主要是因为setText 的行为方式:
用文本替换所有当前文本。请注意,此功能会清除撤消/重做历史记录。
我已经尝试了撤消和重做文档中发布的一些功能,但到目前为止还没有运气。
例如,我的一个尝试是首先选择所有文本,然后使用replaceSelectedText,最后手动恢复以前状态的选择,结果很丑(我不希望编辑器在撤消/重做时滚动混乱).. . 基本上,我想得到和SublimeText一样的感觉。
顺便说一句,这是一个小例子,但在实际情况下,我会积累一堆操作而不经常提交闪烁...这就是为什么我有兴趣弄清楚如何在使用时回滚到以前的状态可撤消的 setText... 否则,我想避免使用 Scintilla 函数,例如insertAt、 replaceSelectedText 或类似函数...因为我正在使用 python 字符串内置函数在内部修改缓冲区。
编辑:
我很确定 beginUndoAction 和 endUndoAction 不会帮助我回答问题 2 但是......那SCI_ADDUNDOACTION
呢?尽管文档很混乱...:/
python-3.x - 口译员包含什么?
我正在使用 Antlr4 创建解释器、词法分析器和解析器。它将用于的 GUI 包含 QScintilla2。
由于 QScintilla 不需要解析器并且具有 CustomLexer 模块,(Antlr4 构建,Python3 目标)解释器就足够了吗?
我不是在征求意见,而是在寻求事实指导。谢谢。
python - 如何在 QScintilla 中实现基于缩进的代码折叠?
这里的最终目标是在 QScintilla 中实现基于缩进的代码折叠,类似于 SublimeText3 的方式。
首先,这里有一个小例子,说明如何使用 QScintilla 机制手动提供折叠:
要更深入地了解它,您可以查看官方文档:
文档参考:
正如我所说,我想像 Sublime 那样实现代码折叠,所以我创建了这个小 mcve 作为基础代码来玩弄:
在上面的代码片段中,您可以看到我尝试复制一些 Sublime 函数。如果我的测试没有错,那么indentation_level
应该提供与 Sublime View提供的输出相同的输出。
问题:您将如何修改上面的代码片段以提供像 Sublime 那样的基于缩进的代码折叠?
在这里你可以看到一个 Sublime 是如何工作的例子:
当然,在使用多选(在上面的 mcve 中已经启用)时,适当的识别器也应该工作,例如:
您可以看到缩进折叠级别如何在 Sublime 中每个文档的更改中完美/有效地更新
我的盒子的设置:
- win7
- Python 3.6.4 (x86)
- PyQt5==5.12
- QScintilla==2.10.8
附言。我在互联网上发现了一段非常有趣的代码,效果很好,https://github.com/pyQode/pyqode.core/blob/master/pyqode/core/api/folding.py问题是代码是打算在 a 上工作QPlainTextEdit
,QSyntaxHighlighter
所以我不太清楚如何调整它以在QScinScintilla
小部件中工作
python - 如何在 QScintilla 中使用自定义折叠图标?
考虑这个片段:
我想弄清楚是否可以将折叠图标更改为不同于 QScintilla 提供的自定义图标,特别是我想要一个类似于 Sublime 的向下箭头:
通过查看 QSciScintilla 折叠样式,您会发现没有任何相似之处。
事实上,不仅如此,我还想知道是否有可能实现当鼠标位置进入/离开边缘区域时折叠图标消失的这种微妙的效果,看看:
这是一个非常好的功能,这样当您编码时,您就不会被“始终可见”的折叠图标分心。
在这个线程中,似乎有一些东西被称为SC_MARK_ARROWDOWN
但不确定它是否可以用作折叠图标......无论如何,我仍然更喜欢我的自定义图片,因为我将使用 monokai 主题,我想图标看起来和 Sublime 一样优雅。
下面你会发现我创建的 2 个 12x12 pngs 来表示深色和浅色箭头。
python - QScintilla 中的 Pygments
考虑这个 mcve:
要运行它,您需要安装:
我试图弄清楚如何在 QScintilla 小部件上使用 pygments,现在我需要解决的主要问题是处理非小文档时的性能。
我希望编辑器在处理大型文档(> = 100kb)时变得灵敏且可用,但我不太清楚我应该在这里采取什么方法。为了测试性能,您可以使用Ctrl+1或 Ctrl+2并且小部件文本将分别减少/增加。
当我说“响应式”时,我的意思是可见屏幕的突出显示计算应该不再需要 [1-2]frame/highglight <=> [17-34]ms/highlight(假设为 60fps),所以在打字时你不会'感觉不到任何减速。
注意:正如您在上面的 mcve 中看到的,我已经包含了 pygments 标记器,因此您可以使用它......感觉就像为了实现“实时突出显示”,我需要使用记忆/缓存以某种聪明的方式,但我正在努力弄清楚我需要缓存什么数据以及缓存它的最佳方式是什么......:/
演示:
在上面的演示中,您可以看到使用这种幼稚的突出显示编辑器很快就会变得无法使用,在我的笔记本电脑中重新突出显示 32kb 的文本块仍然可以提供交互式帧速率,但高于该值的编辑器变得完全无法使用。
考虑因素:
- 当您在没有选择的可见屏幕上输入/编码时,最典型的情况会发生
- 您可能正在编辑遍布整个文档的多个选择,这意味着您将不知道这些选择是否在可见屏幕附近。例如,在 Sublime 中,当您按下
Alt+F3
时选择光标下的所有出现 - 在上面的片段中,我使用了一个 python 词法分析器,但算法不应该过多地关注那个。Pygments 支持 ~300 词法分析器
- 如果可见屏幕位于文件末尾并且其中一个选项恰好位于屏幕开头,则会发生最坏的情况......如果您需要重新突出显示整个文档,您需要找到一个替代方式,即使这意味着“突出显示”在第一遍不正确
- 最重要的是性能,但也是正确性......也就是说,如果你给了足够的时间,整个文档应该会正确突出显示
参考:
- https://qscintilla.com/styletext-the-highlighting-engine/
- http://pygments.org/docs/
- https://www.riverbankcomputing.com/static/Docs/QScintilla/annotated.html
以下文档并非针对此特定问题,但它们讨论了缓存和语法突出显示的可能策略:
python - 如何让 QScintilla 像 SublimeText 一样自动缩进?
考虑下面的 mcve:
与SublimeText或CodeMirror等编辑器进行比较时,上述代码段的自动缩进行为非常糟糕。首先让我们看看 SublimeText 中的自动缩进功能在单选或多选时会有多好的表现。
现在让我们看看自动缩进如何与上面的代码片段一起工作:
与 SublimeText 相比,当单选/多选启用自动缩进时,QScintilla 的工作方式很糟糕,而且非常糟糕/无法使用。
使小部件更像 SublimeText/Codemirror 的第一步是断开使自动缩进表现不佳的当前插槽,我们可以通过这样做来实现:
在这一点上,您已经准备好SCN_CHARADDED
与您的自定义插槽连接做所有的魔法:)
问题:您将如何修改上述代码段,以便保留所有选择,并且自动缩进的行为与 SublimeText、Codemirror 或任何严肃的文本编辑器完全一样?
参考:
https://www.riverbankcomputing.com/static/Docs/QScintilla/classQsciScintillaBase.html#signals
QScintilla 源代码,您可以在下面看到我们使用断开连接的私有插槽的
disconnect
样子:
qsciscintilla.h
qsciscintilla.cpp
重要提示:我决定发布相关的 c++ 位,以便您了解更多关于如何在内部实现缩进的背景知识,以提供更多关于可能替代的线索......这个线程的目标是尝试找到一个纯 python解决方案。我想避免修改 QScintilla 源代码(如果可能的话),因此维护/升级将保持尽可能简单,并且 QScintilla dep 仍然可以被视为一个黑匣子。
python - 如何在 QScintilla 编辑器中查找单词并转到行?
我想创建一个用于搜索单词并在 Qscintilla 编辑器中突出显示它们的函数,以及另一个转到编辑器中特定行的函数。
我知道这些函数在 QPlainTextEdit 中有效,但由于我正在学习 Qscintilla,并且大多数文档都是用 C++ 编写的,所以我很难理解,而且在 Scintilla 中的方法也大不相同。
我不明白如何实现这两个功能,我一直在尝试,但没有找到这个词的积极结果。但是对于第二个函数,我可以打印以行号开头的单词,但我想在搜索函数转到行时用行号突出显示该单词。
parsing - 如何使用 ANTLR4 突出显示 QScintilla?
我正在尝试学习ANTLR4,但我的第一个实验已经遇到了一些问题。
这里的目标是学习如何使用 ANTLR 语法高亮 QScintilla 组件。为了练习一点,我决定要学习如何正确突出显示*.ini
文件。
首先,为了运行 mcve,您需要:
- 下载 antlr4 并确保它可以工作,阅读主站点上的说明
- 安装 python antlr 运行时,只需执行以下操作:
pip install antlr4-python3-runtime
生成词法分析器/解析器
/li>ini.g4
:
通过运行antlr ini.g4 -Dlanguage=Python3 -o ini
最后,保存
/li>main.py
:
运行它,如果一切顺利,你应该得到这个结果:
这是我的问题:
- 如您所见,演示的结果远非可用,您绝对不希望这样,这真的很令人不安。相反,您希望获得与所有 IDE 类似的行为。不幸的是,我不知道如何实现这一点,您将如何修改提供这种行为的代码段?
- 现在,我正在尝试模仿与以下快照类似的突出显示:
您可以在该屏幕截图上看到变量赋值(变量=深粉色和值=黄色)的突出显示不同,但我不知道如何实现,我尝试使用这个稍微修改的语法:
然后将样式更改为:
但是如果您查看词法分析输出,您会发现 和 之间没有区别VARIABLE
,VALUES
因为 ANTLR 语法中的顺序优先。所以我的问题是,您将如何修改语法/片段以实现这种视觉外观?