mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
feat(editor): add preference for 'deleteEmptyLineFast' and 'deleteMultiSpaces' (closes #903)
This commit is contained in:
@@ -27,6 +27,8 @@ import com.itsaky.androidide.editor.schemes.IDEColorSchemeProvider
|
||||
import com.itsaky.androidide.preferences.internal.AUTO_SAVE
|
||||
import com.itsaky.androidide.preferences.internal.COLOR_SCHEME
|
||||
import com.itsaky.androidide.preferences.internal.COMPLETIONS_MATCH_LOWER
|
||||
import com.itsaky.androidide.preferences.internal.DELETE_EMPTY_LINES
|
||||
import com.itsaky.androidide.preferences.internal.DELETE_TABS_ON_BACKSPACE
|
||||
import com.itsaky.androidide.preferences.internal.FLAG_PASSWORD
|
||||
import com.itsaky.androidide.preferences.internal.FONT_LIGATURES
|
||||
import com.itsaky.androidide.preferences.internal.FONT_SIZE
|
||||
@@ -40,6 +42,8 @@ import com.itsaky.androidide.preferences.internal.WORD_WRAP
|
||||
import com.itsaky.androidide.preferences.internal.autoSave
|
||||
import com.itsaky.androidide.preferences.internal.colorScheme
|
||||
import com.itsaky.androidide.preferences.internal.completionsMatchLower
|
||||
import com.itsaky.androidide.preferences.internal.deleteEmptyLines
|
||||
import com.itsaky.androidide.preferences.internal.deleteTabsOnBackspace
|
||||
import com.itsaky.androidide.preferences.internal.drawEmptyLineWs
|
||||
import com.itsaky.androidide.preferences.internal.drawInnerWs
|
||||
import com.itsaky.androidide.preferences.internal.drawLeadingWs
|
||||
@@ -92,6 +96,8 @@ private class CommonConfigurations(
|
||||
addPreference(UseICU())
|
||||
addPreference(AutoSave())
|
||||
addPreference(VisibiblePasswordFlag())
|
||||
addPreference(DeleteEmptyLines())
|
||||
addPreference(DeleteTabs())
|
||||
addPreference(CompletionsMatchLower())
|
||||
}
|
||||
}
|
||||
@@ -156,9 +162,8 @@ private class TabSize(
|
||||
override val summary: Int? = string.msg_tab_size,
|
||||
override val icon: Int? = drawable.ic_font_ligatures,
|
||||
) : SingleChoicePreference() {
|
||||
|
||||
@IgnoredOnParcel
|
||||
private val choices = arrayOf("2", "4", "6", "8")
|
||||
|
||||
@IgnoredOnParcel private val choices = arrayOf("2", "4", "6", "8")
|
||||
|
||||
override fun getChoices(context: Context): Array<String> {
|
||||
return choices
|
||||
@@ -303,3 +308,19 @@ private class UseCustomFont(
|
||||
override val summary: Int? = string.idepref_customFont_summary,
|
||||
override val icon: Int? = drawable.ic_custom_font,
|
||||
) : SwitchPreference(setValue = ::useCustomFont::set, getValue = ::useCustomFont::get)
|
||||
|
||||
@Parcelize
|
||||
private class DeleteEmptyLines(
|
||||
override val key: String = DELETE_EMPTY_LINES,
|
||||
override val title: Int = R.string.idepref_deleteEmptyLines_title,
|
||||
override val summary: Int? = R.string.idepref_deleteEmptyLines_summary,
|
||||
override val icon: Int? = drawable.ic_backspace
|
||||
) : SwitchPreference(setValue = ::deleteEmptyLines::set, getValue = ::deleteEmptyLines::get)
|
||||
|
||||
@Parcelize
|
||||
private class DeleteTabs(
|
||||
override val key: String = DELETE_TABS_ON_BACKSPACE,
|
||||
override val title: Int = R.string.idepref_deleteTabs_title,
|
||||
override val summary: Int? = R.string.idepref_deleteTabs_summary,
|
||||
override val icon: Int? = drawable.ic_backspace
|
||||
) : SwitchPreference(setValue = ::deleteTabsOnBackspace::set, getValue = ::deleteTabsOnBackspace::get)
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
*/
|
||||
package com.itsaky.androidide.ui.editor;
|
||||
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.DELETE_EMPTY_LINES;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.DELETE_TABS_ON_BACKSPACE;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.FLAG_LINE_BREAK;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.FLAG_PASSWORD;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.FLAG_WS_EMPTY_LINE;
|
||||
@@ -28,6 +30,8 @@ import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.USE
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.USE_ICU;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.USE_MAGNIFER;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.WORD_WRAP;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.getDeleteEmptyLines;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.getDeleteTabsOnBackspace;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.getDrawEmptyLineWs;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.getDrawInnerWs;
|
||||
import static com.itsaky.androidide.preferences.internal.EditorPreferencesKt.getDrawLeadingWs;
|
||||
@@ -203,6 +207,8 @@ public class CodeEditorView extends LinearLayout {
|
||||
onWordwrapPrefChanged();
|
||||
onMagnifierPrefChanged();
|
||||
onUseIcuPrefChanged();
|
||||
onDeleteEmptyLinesPrefChanged();
|
||||
onDeleteTabsPrefChanged();
|
||||
}
|
||||
|
||||
protected void onMagnifierPrefChanged() {
|
||||
@@ -257,16 +263,24 @@ public class CodeEditorView extends LinearLayout {
|
||||
binding.editor.setTextSize(textSize);
|
||||
}
|
||||
|
||||
private void onUseIcuPrefChanged() {
|
||||
protected void onUseIcuPrefChanged() {
|
||||
binding.editor.getProps().useICULibToSelectWords = getUseIcu();
|
||||
}
|
||||
|
||||
private void onCustomFontPrefChanged() {
|
||||
protected void onCustomFontPrefChanged() {
|
||||
var state = EditorPreferencesKt.getUseCustomFont();
|
||||
binding.editor.setTypefaceText(TypefaceUtilsKt.customOrJBMono(state));
|
||||
binding.editor.setTypefaceLineNumber(TypefaceUtilsKt.customOrJBMono(state));
|
||||
}
|
||||
|
||||
protected void onDeleteEmptyLinesPrefChanged() {
|
||||
binding.editor.getProps().deleteEmptyLineFast = getDeleteEmptyLines();
|
||||
}
|
||||
|
||||
protected void onDeleteTabsPrefChanged() {
|
||||
binding.editor.getProps().deleteMultiSpaces = getDeleteTabsOnBackspace() ? -1 : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* For internal use only!
|
||||
*
|
||||
@@ -322,6 +336,12 @@ public class CodeEditorView extends LinearLayout {
|
||||
case USE_CUSTOM_FONT:
|
||||
onCustomFontPrefChanged();
|
||||
break;
|
||||
case DELETE_EMPTY_LINES:
|
||||
onDeleteEmptyLinesPrefChanged();
|
||||
break;
|
||||
case DELETE_TABS_ON_BACKSPACE:
|
||||
onDeleteTabsPrefChanged();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
@@ -35,6 +35,8 @@ const val USE_MAGNIFER = "idepref_editor_use_magnifier"
|
||||
const val USE_ICU = "idepref_editor_useIcu"
|
||||
const val USE_SOFT_TAB = "idepref_editor_useSoftTab"
|
||||
const val USE_CUSTOM_FONT = "idepref_editor_useCustomFont"
|
||||
const val DELETE_EMPTY_LINES = "idepref_editor_deleteEmptyLines"
|
||||
const val DELETE_TABS_ON_BACKSPACE = "idepref_editor_deleteTab"
|
||||
|
||||
const val COLOR_SCHEME = "idepref_editor_colorScheme"
|
||||
const val DEFAULT_COLOR_SCHEME = "default"
|
||||
@@ -140,3 +142,15 @@ var colorScheme: String
|
||||
set(value) {
|
||||
prefManager.putString(COLOR_SCHEME, value)
|
||||
}
|
||||
|
||||
var deleteEmptyLines : Boolean
|
||||
get() = prefManager.getBoolean(DELETE_EMPTY_LINES, true)
|
||||
set(value) {
|
||||
prefManager.putBoolean(DELETE_EMPTY_LINES, value)
|
||||
}
|
||||
|
||||
var deleteTabsOnBackspace : Boolean
|
||||
get() = prefManager.getBoolean(DELETE_TABS_ON_BACKSPACE, true)
|
||||
set(value) {
|
||||
prefManager.putBoolean(DELETE_TABS_ON_BACKSPACE, value)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<vector android:autoMirrored="true" android:height="24dp"
|
||||
android:tint="#FFFFFF" android:viewportHeight="24"
|
||||
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M21,11H6.83l3.58,-3.59L9,6l-6,6 6,6 1.41,-1.41L6.83,13H21z"/>
|
||||
</vector>
|
||||
@@ -535,4 +535,8 @@
|
||||
<string name="title_reload_color_schemes">Reload color schemes</string>
|
||||
<string name="msg_dir_picker_failed">Failed to start directory picker : %1$s</string>
|
||||
<string name="msg_tooling_server_unavailable">Tooling API server is unavailable. Check build output and IDE logs for errors.</string>
|
||||
<string name="idepref_deleteEmptyLines_title">Delete empty lines on backspace</string>
|
||||
<string name="idepref_deleteEmptyLines_summary">Whether the editor should delete empty lines on a single backspace key event.</string>
|
||||
<string name="idepref_deleteTabs_title">Delete tab on backspace</string>
|
||||
<string name="idepref_deleteTabs_summary">When enabled, the editor will delete spaces equal to the tab width when the backspace key is pressed.</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user