Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
keyescgm
jadx
提交
d3a0a56b
J
jadx
项目概览
keyescgm
/
jadx
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jadx
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
d3a0a56b
编写于
2月 18, 2022
作者:
S
Skylot
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(gui): ctrl+c copy highlighted word in code view (#1292)
上级
3c2c198a
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
61 addition
and
18 deletion
+61
-18
jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
+6
-1
jadx-gui/src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java
.../src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java
+33
-5
jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java
jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java
+2
-6
jadx-gui/src/main/java/jadx/gui/ui/codearea/XposedAction.java
...-gui/src/main/java/jadx/gui/ui/codearea/XposedAction.java
+2
-6
jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java
jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java
+18
-0
未找到文件。
jadx-gui/src/main/java/jadx/gui/ui/MainWindow.java
浏览文件 @
d3a0a56b
...
...
@@ -110,6 +110,7 @@ import jadx.gui.treemodel.JNode;
import
jadx.gui.treemodel.JPackage
;
import
jadx.gui.treemodel.JResource
;
import
jadx.gui.treemodel.JRoot
;
import
jadx.gui.ui.codearea.AbstractCodeArea
;
import
jadx.gui.ui.codearea.AbstractCodeContentPanel
;
import
jadx.gui.ui.codearea.EditorViewState
;
import
jadx.gui.ui.dialog.ADBDialog
;
...
...
@@ -936,7 +937,11 @@ public class MainWindow extends JFrame {
public
void
actionPerformed
(
ActionEvent
e
)
{
ContentPanel
panel
=
tabbedPane
.
getSelectedCodePanel
();
if
(
panel
instanceof
AbstractCodeContentPanel
)
{
String
preferText
=
((
AbstractCodeContentPanel
)
panel
).
getCodeArea
().
getSelectedText
();
AbstractCodeArea
codeArea
=
((
AbstractCodeContentPanel
)
panel
).
getCodeArea
();
String
preferText
=
codeArea
.
getSelectedText
();
if
(
StringUtils
.
isEmpty
(
preferText
))
{
preferText
=
codeArea
.
getWordUnderCaret
();
}
if
(!
StringUtils
.
isEmpty
(
preferText
))
{
SearchDialog
.
searchText
(
MainWindow
.
this
,
preferText
);
return
;
...
...
jadx-gui/src/main/java/jadx/gui/ui/codearea/AbstractCodeArea.java
浏览文件 @
d3a0a56b
...
...
@@ -6,6 +6,8 @@ import java.awt.Rectangle;
import
java.awt.event.ActionEvent
;
import
java.awt.event.FocusEvent
;
import
java.awt.event.FocusListener
;
import
java.awt.event.KeyAdapter
;
import
java.awt.event.KeyEvent
;
import
java.awt.event.MouseAdapter
;
import
java.awt.event.MouseEvent
;
...
...
@@ -37,6 +39,7 @@ import jadx.gui.ui.panel.ContentPanel;
import
jadx.gui.utils.DefaultPopupMenuListener
;
import
jadx.gui.utils.JumpPosition
;
import
jadx.gui.utils.NLS
;
import
jadx.gui.utils.UiUtils
;
public
abstract
class
AbstractCodeArea
extends
RSyntaxTextArea
{
private
static
final
long
serialVersionUID
=
-
3980354865216031972L
;
...
...
@@ -57,9 +60,16 @@ public abstract class AbstractCodeArea extends RSyntaxTextArea {
setCloseCurlyBraces
(
true
);
setAntiAliasingEnabled
(
true
);
loadSettings
();
JadxSettings
settings
=
contentPanel
.
getTabbedPane
().
getMainWindow
().
getSettings
();
setLineWrap
(
settings
.
isCodeAreaLineWrap
());
addWrapLineMenuAction
(
settings
);
addCaretActions
();
addFastCopyAction
();
}
private
void
addWrapLineMenuAction
(
JadxSettings
settings
)
{
JPopupMenu
popupMenu
=
getPopupMenu
();
popupMenu
.
addSeparator
();
JCheckBoxMenuItem
wrapItem
=
new
JCheckBoxMenuItem
(
NLS
.
str
(
"popup.line_wrap"
),
getLineWrap
());
...
...
@@ -88,7 +98,16 @@ public abstract class AbstractCodeArea extends RSyntaxTextArea {
wrapItem
.
setState
(
getLineWrap
());
}
});
}
private
void
setCodeAreaLineWrap
(
AbstractCodeArea
codeArea
,
boolean
wrap
)
{
codeArea
.
setLineWrap
(
wrap
);
if
(
codeArea
.
isVisible
())
{
codeArea
.
repaint
();
}
}
private
void
addCaretActions
()
{
Caret
caret
=
getCaret
();
if
(
caret
instanceof
DefaultCaret
)
{
((
DefaultCaret
)
caret
).
setUpdatePolicy
(
DefaultCaret
.
ALWAYS_UPDATE
);
...
...
@@ -123,11 +142,20 @@ public abstract class AbstractCodeArea extends RSyntaxTextArea {
});
}
private
void
setCodeAreaLineWrap
(
AbstractCodeArea
codeArea
,
boolean
wrap
)
{
codeArea
.
setLineWrap
(
wrap
);
if
(
codeArea
.
isVisible
())
{
codeArea
.
repaint
();
}
/**
* Ctrl+C will copy highlighted word
*/
private
void
addFastCopyAction
()
{
addKeyListener
(
new
KeyAdapter
()
{
@Override
public
void
keyPressed
(
KeyEvent
e
)
{
if
(
e
.
getKeyCode
()
==
KeyEvent
.
VK_C
&&
UiUtils
.
isCtrlDown
(
e
))
{
if
(
StringUtils
.
isEmpty
(
getSelectedText
()))
{
UiUtils
.
copyToClipboard
(
getWordUnderCaret
());
}
}
}
});
}
private
String
highlightCaretWord
(
String
lastText
,
int
pos
)
{
...
...
jadx-gui/src/main/java/jadx/gui/ui/codearea/FridaAction.java
浏览文件 @
d3a0a56b
package
jadx.gui.ui.codearea
;
import
java.awt.Toolkit
;
import
java.awt.datatransfer.Clipboard
;
import
java.awt.datatransfer.StringSelection
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.KeyEvent
;
import
java.util.*
;
...
...
@@ -29,6 +26,7 @@ import jadx.gui.treemodel.JField;
import
jadx.gui.treemodel.JMethod
;
import
jadx.gui.treemodel.JNode
;
import
jadx.gui.utils.NLS
;
import
jadx.gui.utils.UiUtils
;
import
static
javax
.
swing
.
KeyStroke
.
getKeyStroke
;
...
...
@@ -62,9 +60,7 @@ public final class FridaAction extends JNodeMenuAction<JNode> {
try
{
String
fridaSnippet
=
generateFridaSnippet
();
LOG
.
info
(
"Frida snippet:\n{}"
,
fridaSnippet
);
Clipboard
clipboard
=
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
();
StringSelection
selection
=
new
StringSelection
(
fridaSnippet
);
clipboard
.
setContents
(
selection
,
selection
);
UiUtils
.
copyToClipboard
(
fridaSnippet
);
}
catch
(
Exception
e
)
{
LOG
.
error
(
"Failed to generate Frida code snippet"
,
e
);
JOptionPane
.
showMessageDialog
(
codeArea
.
getMainWindow
(),
e
.
getLocalizedMessage
(),
NLS
.
str
(
"error_dialog.title"
),
...
...
jadx-gui/src/main/java/jadx/gui/ui/codearea/XposedAction.java
浏览文件 @
d3a0a56b
package
jadx.gui.ui.codearea
;
import
java.awt.Toolkit
;
import
java.awt.datatransfer.Clipboard
;
import
java.awt.datatransfer.StringSelection
;
import
java.awt.event.ActionEvent
;
import
java.awt.event.KeyEvent
;
import
java.util.List
;
...
...
@@ -25,6 +22,7 @@ import jadx.gui.treemodel.JClass;
import
jadx.gui.treemodel.JMethod
;
import
jadx.gui.treemodel.JNode
;
import
jadx.gui.utils.NLS
;
import
jadx.gui.utils.UiUtils
;
import
static
javax
.
swing
.
KeyStroke
.
getKeyStroke
;
...
...
@@ -55,9 +53,7 @@ public class XposedAction extends JNodeMenuAction<JNode> {
try
{
String
xposedSnippet
=
generateXposedSnippet
();
LOG
.
info
(
"Xposed snippet:\n{}"
,
xposedSnippet
);
Clipboard
clipboard
=
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
();
StringSelection
selection
=
new
StringSelection
(
xposedSnippet
);
clipboard
.
setContents
(
selection
,
selection
);
UiUtils
.
copyToClipboard
(
xposedSnippet
);
}
catch
(
Exception
e
)
{
LOG
.
error
(
"Failed to generate Xposed code snippet"
,
e
);
JOptionPane
.
showMessageDialog
(
codeArea
.
getMainWindow
(),
e
.
getLocalizedMessage
(),
NLS
.
str
(
"error_dialog.title"
),
...
...
jadx-gui/src/main/java/jadx/gui/utils/UiUtils.java
浏览文件 @
d3a0a56b
...
...
@@ -32,6 +32,7 @@ import com.formdev.flatlaf.extras.FlatSVGIcon;
import
jadx.core.dex.info.AccessInfo
;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.utils.StringUtils
;
import
jadx.core.utils.Utils
;
import
jadx.core.utils.exceptions.JadxRuntimeException
;
import
jadx.gui.ui.codearea.AbstractCodeArea
;
...
...
@@ -253,6 +254,10 @@ public class UiUtils {
return
CTRL_BNT_KEY
;
}
public
static
boolean
isCtrlDown
(
KeyEvent
keyEvent
)
{
return
keyEvent
.
getModifiersEx
()
==
CTRL_BNT_KEY
;
}
public
static
<
T
extends
Window
&
RootPaneContainer
>
void
addEscapeShortCutToDispose
(
T
window
)
{
KeyStroke
stroke
=
KeyStroke
.
getKeyStroke
(
KeyEvent
.
VK_ESCAPE
,
0
);
window
.
getRootPane
().
registerKeyboardAction
(
e
->
window
.
dispose
(),
stroke
,
JComponent
.
WHEN_IN_FOCUSED_WINDOW
);
...
...
@@ -296,4 +301,17 @@ public class UiUtils {
JOptionPane
.
showMessageDialog
(
parent
,
message
,
NLS
.
str
(
"message.errorTitle"
),
JOptionPane
.
ERROR_MESSAGE
);
}
public
static
void
copyToClipboard
(
String
text
)
{
if
(
StringUtils
.
isEmpty
(
text
))
{
return
;
}
try
{
Clipboard
clipboard
=
Toolkit
.
getDefaultToolkit
().
getSystemClipboard
();
StringSelection
selection
=
new
StringSelection
(
text
);
clipboard
.
setContents
(
selection
,
selection
);
}
catch
(
Exception
e
)
{
LOG
.
error
(
"Failed copy text to clipboard"
,
e
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录