Skip to content

Commit 06ecfe9

Browse files
Elitex07UnschooledGamergreptile-apps[bot]
authored
feat(editor): togglable visual line break marker via show spaces option (#2133)
* chore: update .gitignore to include additional files and directories * feat: add devcontainer-lock.json for node and android-sdk features * feat: add visual line break marker for text wrap * chore: add i18n keys to all lang files; remove: local.properies * chore: update package-lock.json * Update src/cm/lineBreakMarker.ts Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * chore: fmt lang files * chore: fmt changes * rm: setting.gradle; remove: toolchainVendor * fix: use RangeSetBuilder for line break marker to prevent duplicates * refactor: merge line break marker into show spaces toggle and update descriptions * chore: fix package-lock.json * revert: en-us.json additional keys merge * remove: no more needed i18n keys * remove: tailing comma from lang files * chore: fix fmt * chore(editorManager): fmt * revert: keys from wrong merge * remove: textWrap requirement to display line breaks * chore(i18n): translate updated string via AI-assisted * update: add tsconfig.tsbuildinfo back to .gitignore --------- Co-authored-by: unschooledgamer <unschooledgamer@gmail.com> Co-authored-by: Emmanuel Lobo <76094069+UnschooledGamer@users.noreply.github.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
1 parent 76c831a commit 06ecfe9

41 files changed

Lines changed: 177 additions & 52 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"features": {
3+
"ghcr.io/devcontainers/features/node:2.0": {
4+
"version": "2.0.0",
5+
"resolved": "ghcr.io/devcontainers/features/node@sha256:fedd4c11f7adfb64283b578dddc7da906728daa25fa293351c9d913231acf12f",
6+
"integrity": "sha256:fedd4c11f7adfb64283b578dddc7da906728daa25fa293351c9d913231acf12f"
7+
},
8+
"ghcr.io/nordcominc/devcontainer-features/android-sdk:1": {
9+
"version": "1.2.0",
10+
"resolved": "ghcr.io/nordcominc/devcontainer-features/android-sdk@sha256:c3e0c7e1b12fce18a257e163ade8515e534e58a7edad10dfb6d1fb1a250a307e",
11+
"integrity": "sha256:c3e0c7e1b12fce18a257e163ade8515e534e58a7edad10dfb6d1fb1a250a307e"
12+
}
13+
}
14+
}

.gitignore

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
1-
node_modules
2-
/build.json
3-
/www/build
4-
/plugins
5-
/platforms
6-
/keystore.jks
7-
/platforms/android/debug-signing.properties
8-
/platforms/android/release-signing.properties
9-
**/*/.DS_Store
10-
.DS_Store
11-
pnpm-lock.yaml
12-
.zed
13-
.idea
14-
ace-builds
15-
fdroid.bool
16-
tsconfig.tsbuildinfo
1+
/node_modules
2+
/build.json
3+
/www/build
4+
/plugins
5+
/platforms
6+
/keystore.jks
7+
/platforms/android/debug-signing.properties
8+
/platforms/android/release-signing.properties
9+
**/*/.DS_Store
10+
.DS_Store
11+
pnpm-lock.yaml
12+
.zed
13+
.idea
14+
ace-builds
15+
fdroid.bool
16+
CLAUDE.md
17+
graphify-out/
18+
.graphify_python
19+
.gradle/
20+
local.properties
21+
tsconfig.tsbuildinfo
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#This file is generated by updateDaemonJvm
2+
toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
3+
toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
4+
toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
5+
toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
6+
toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7083b89563e7ce20943037b8cd2b8cc2/redirect
7+
toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/060bbb778a1f55ea705fdebd2ccfeab9/redirect
8+
toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/491f83666ae7f4d6ebb28fee72ebb035/redirect
9+
toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/0d1a1acdc708062093673f65aa9aba4b/redirect
10+
toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/d09679dc60fe5aa05ef7d03efdefac20/redirect
11+
toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/ed4e3bf2f5e7c5d9aabc4cbd8acd555e/redirect
12+
toolchainVersion=21

package-lock.json

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
"@rspack/cli": "^2.0.0",
7171
"@rspack/core": "^2.0.0",
7272
"@types/ace": "^0.0.52",
73+
"@types/cordova": "^11.0.3",
7374
"@types/url-parse": "^1.4.11",
7475
"autoprefixer": "^10.5.0",
7576
"babel-loader": "^10.1.1",

src/cm/lineBreakMarker.ts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { Decoration, DecorationSet, ViewPlugin, WidgetType, EditorView, ViewUpdate } from "@codemirror/view";
2+
import { RangeSetBuilder } from "@codemirror/state";
3+
4+
class NewlineWidget extends WidgetType {
5+
toDOM(): HTMLElement {
6+
let span = document.createElement("span");
7+
span.textContent = "¬";
8+
span.className = "cm-newline-marker";
9+
return span;
10+
}
11+
eq(other: WidgetType): boolean {
12+
return other instanceof NewlineWidget;
13+
}
14+
}
15+
16+
export const lineBreakMarkerPlugin = ViewPlugin.fromClass(
17+
class {
18+
decorations: DecorationSet;
19+
20+
constructor(view: EditorView) {
21+
this.decorations = this.getDecorations(view);
22+
}
23+
24+
update(update: ViewUpdate) {
25+
if (update.docChanged || update.viewportChanged) {
26+
this.decorations = this.getDecorations(update.view);
27+
}
28+
}
29+
30+
getDecorations(view: EditorView): DecorationSet {
31+
let builder = new RangeSetBuilder<Decoration>();
32+
let lastLineNumber = -1;
33+
34+
for (let { from, to } of view.visibleRanges) {
35+
for (let pos = from; pos <= to; ) {
36+
let line = view.state.doc.lineAt(pos);
37+
38+
if (line.number > lastLineNumber && line.number < view.state.doc.lines) {
39+
let deco = Decoration.widget({
40+
widget: new NewlineWidget(),
41+
side: 1,
42+
});
43+
builder.add(line.to, line.to, deco);
44+
lastLineNumber = line.number;
45+
}
46+
47+
pos = line.to + 1;
48+
}
49+
}
50+
return builder.finish();
51+
}
52+
},
53+
{
54+
decorations: (v) => v.decorations,
55+
},
56+
);
57+
58+
export const lineBreakMarkerTheme = EditorView.theme({
59+
".cm-newline-marker": {
60+
color: "var(--cm-space-marker-color, rgba(127, 127, 127, 0.6))",
61+
pointerEvents: "none",
62+
userSelect: "none",
63+
},
64+
});
65+
66+
export const lineBreakMarker = [lineBreakMarkerPlugin, lineBreakMarkerTheme];
67+
68+
export default lineBreakMarker;

src/cordova-custom.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
declare module 'cordova/channel';
2+
declare module 'cordova/exec';
3+
interface Cordova {
4+
fireDocumentEvent(eventName: string, data?: any): void;
5+
}

src/lang/ar-ye.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@
660660
"settings-info-editor-rtl-text": "Switch right-to-left behavior per line.",
661661
"settings-info-editor-scroll-settings": "Adjust scrollbar size, speed, and gesture behavior.",
662662
"settings-info-editor-shift-click-selection": "Extend selection with Shift + tap or click.",
663-
"settings-info-editor-show-spaces": "Display visible whitespace markers.",
663+
"settings-info-editor-show-spaces": "عرض علامات المسافات البيضاء وفواصل الأسطر المرئية.",
664664
"settings-info-editor-soft-tab": "Insert spaces instead of tab characters.",
665665
"settings-info-editor-tab-size": "Set how many spaces each tab step uses.",
666666
"settings-info-editor-teardrop-size": "Set the cursor handle size for touch editing.",

src/lang/be-by.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@
660660
"settings-info-editor-rtl-text": "Switch right-to-left behavior per line.",
661661
"settings-info-editor-scroll-settings": "Adjust scrollbar size, speed, and gesture behavior.",
662662
"settings-info-editor-shift-click-selection": "Extend selection with Shift + tap or click.",
663-
"settings-info-editor-show-spaces": "Display visible whitespace markers.",
663+
"settings-info-editor-show-spaces": "Паказваць бачныя пазнакі прабелаў і разрываў радкоў.",
664664
"settings-info-editor-soft-tab": "Insert spaces instead of tab characters.",
665665
"settings-info-editor-tab-size": "Set how many spaces each tab step uses.",
666666
"settings-info-editor-teardrop-size": "Set the cursor handle size for touch editing.",

src/lang/bn-bd.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@
660660
"settings-info-editor-rtl-text": "Switch right-to-left behavior per line.",
661661
"settings-info-editor-scroll-settings": "Adjust scrollbar size, speed, and gesture behavior.",
662662
"settings-info-editor-shift-click-selection": "Extend selection with Shift + tap or click.",
663-
"settings-info-editor-show-spaces": "Display visible whitespace markers.",
663+
"settings-info-editor-show-spaces": "দৃশ্যমান ফাঁকা স্থান ও লাইন ব্রেকের চিহ্ন দেখান।",
664664
"settings-info-editor-soft-tab": "Insert spaces instead of tab characters.",
665665
"settings-info-editor-tab-size": "Set how many spaces each tab step uses.",
666666
"settings-info-editor-teardrop-size": "Set the cursor handle size for touch editing.",

0 commit comments

Comments
 (0)