diff --git a/.gitignore b/.gitignore
index 68102cad..d9d242a1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,7 +12,6 @@
output.json
output-metadata.json
desktop.ini
-sync.ffs_db
.bak/
.git/
diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/Images.java b/app/src/main/java/org/autojs/autojs/runtime/api/Images.java
index c33b99a2..139f5640 100644
--- a/app/src/main/java/org/autojs/autojs/runtime/api/Images.java
+++ b/app/src/main/java/org/autojs/autojs/runtime/api/Images.java
@@ -1,6 +1,5 @@
package org.autojs.autojs.runtime.api;
-import org.autojs.autojs.extension.AnyExtensions;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
@@ -24,8 +23,8 @@ import org.autojs.autojs.annotation.ScriptVariable;
import org.autojs.autojs.concurrent.VolatileDispose;
import org.autojs.autojs.core.image.CapturedImage;
import org.autojs.autojs.core.image.ImageWrapper;
-import org.autojs.autojs.core.image.Shootable;
import org.autojs.autojs.core.image.RhinoColorFinder;
+import org.autojs.autojs.core.image.Shootable;
import org.autojs.autojs.core.image.TemplateMatching;
import org.autojs.autojs.core.image.capture.ScreenCaptureRequester;
import org.autojs.autojs.core.image.capture.ScreenCapturer;
@@ -34,6 +33,7 @@ import org.autojs.autojs.core.opencv.Mat;
import org.autojs.autojs.core.opencv.OpenCVHelper;
import org.autojs.autojs.core.pref.Language;
import org.autojs.autojs.core.ui.inflater.util.Drawables;
+import org.autojs.autojs.extension.AnyExtensions;
import org.autojs.autojs.pio.UncheckedIOException;
import org.autojs.autojs.runtime.ScriptRuntime;
import org.autojs.autojs.runtime.api.ImageFeatureMatching.FeatureMatchingDescriptor;
diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Inspect.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Inspect.kt
index 5f26382a..ea7c3c04 100644
--- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Inspect.kt
+++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Inspect.kt
@@ -342,7 +342,7 @@ object Inspect : Augmentable(), Invokable {
if (value is NativeJavaPackage) return value.toString()
if (value is NativeJavaClass) return value.toString()
if (value.javaClass.isArray) return javaArrayToString(value)
- if (value !is ScriptableObject) return formatValue(ctx, Context.toString(value), recurseTimes)
+ if (value !is ScriptableObject) return Context.toString(value)
if (value is ProxyObject) return formatValue(ctx, value[AUGMENTED_OBJECT_KEY], recurseTimes)
// @Hint by SuperMonster003 on Apr 16, 2024.
diff --git a/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Util.kt b/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Util.kt
index a6f8cb76..9c41258e 100644
--- a/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Util.kt
+++ b/app/src/main/java/org/autojs/autojs/runtime/api/augment/util/Util.kt
@@ -36,6 +36,7 @@ import org.autojs.autojs.util.RhinoUtils.ObsoletedRhinoFunctionException
import org.autojs.autojs.util.RhinoUtils.callToStringFunction
import org.autojs.autojs.util.RhinoUtils.coerceFloatNumber
import org.autojs.autojs.util.RhinoUtils.coerceNumber
+import org.autojs.autojs.util.RhinoUtils.coerceString
import org.autojs.autojs.util.RhinoUtils.js_function_bind
import org.autojs.autojs.util.RhinoUtils.js_json_stringify
import org.autojs.autojs.util.RhinoUtils.js_object_create
@@ -349,13 +350,13 @@ object Util : Augmentable() {
if (args.isEmpty()) return ""
val first = args[0]
- if (first !is String) {
+ if (!first.isJsString()) {
return args.joinToString(" ") { inspectRhino(it) }
}
val argsSize = args.size
var index = 1
- val fmt = first
+ val fmt = coerceString(first)
val len = fmt.length
// Estimate some margin to reduce expansion.
// zh-CN: 预估一些余量, 减少扩容.
@@ -421,7 +422,9 @@ object Util : Augmentable() {
}
}
- val formatted = inspectRhino(sb.toString())
+ // Do NOT inspect the formatted string, otherwise control characters like '\n' will be escaped.
+ // zh-CN: 不要对格式化结果做 inspect, 否则诸如 '\n' 的控制字符会被转义.
+ val formatted = sb.toString()
return when {
index >= argsSize -> formatted
@@ -430,14 +433,17 @@ object Util : Augmentable() {
// zh-CN: 追加剩余参数, 以空格分隔.
val out = StringBuilder(formatted.length + 1 + (argsSize - index) * 8)
out.append(formatted)
- out.append(' ')
- // Append the first one first, then add spaces for the rest to avoid checking leading spaces in the loop.
- // zh-CN: 为避免在循环中判断前导空格, 这里先追加第一个, 再对剩余的加空格.
- out.append(inspectRhino(args[index++]))
+
while (index < argsSize) {
+ val x = args[index++]
out.append(' ')
- out.append(inspectRhino(args[index++]))
+ if (x == null || !x.isJsObject()) {
+ out.append(Context.toString(x))
+ } else {
+ out.append(inspectRhino(x))
+ }
}
+
out.toString()
}
}
diff --git a/app/src/main/res/layout/fragment_drawer.xml b/app/src/main/res/layout/fragment_drawer.xml
index f23629ca..f979982a 100644
--- a/app/src/main/res/layout/fragment_drawer.xml
+++ b/app/src/main/res/layout/fragment_drawer.xml
@@ -22,13 +22,13 @@
+
+
+