diff --git a/src/renderer/src/atoms/settings/general.ts b/src/renderer/src/atoms/settings/general.ts
index 19087e7e84..ca44418af9 100644
--- a/src/renderer/src/atoms/settings/general.ts
+++ b/src/renderer/src/atoms/settings/general.ts
@@ -4,6 +4,10 @@ import { createSettingAtom } from "./helper"
const createDefaultSettings = () => ({
dataPersist: true,
+
+ // mark unread
+ scrollMarkUnread: true,
+
})
export const {
useSettingKey: useGeneralSettingKey,
diff --git a/src/renderer/src/modules/entry-column/index.tsx b/src/renderer/src/modules/entry-column/index.tsx
index 5e64c89a46..58bd95d578 100644
--- a/src/renderer/src/modules/entry-column/index.tsx
+++ b/src/renderer/src/modules/entry-column/index.tsx
@@ -1,4 +1,5 @@
import { useMainContainerElement } from "@renderer/atoms/dom"
+import { useGeneralSettingKey } from "@renderer/atoms/settings/general"
import { useUser } from "@renderer/atoms/user"
import { m } from "@renderer/components/common/Motion"
import { EmptyIcon } from "@renderer/components/icons/empty"
@@ -81,7 +82,7 @@ export function EntryColumn() {
markReadMutation.mutate(activeEntry)
}, [activeEntry?.entries?.id, activeEntry?.read])
- const handleRangeChange = useEventCallback(
+ const handleMarkreadInRange = useEventCallback(
debounce(
async ({ startIndex }: ListRange) => {
const idSlice = entriesIds?.slice(0, startIndex)
@@ -113,7 +114,7 @@ export function EntryColumn() {
{ leading: false },
),
)
-
+ const scrollMarkUnread = useGeneralSettingKey("scrollMarkUnread")
const virtuosoOptions = {
components: {
List: ListContent,
@@ -127,7 +128,7 @@ export function EntryColumn() {
)
}, [isFetchingNextPage]),
},
- rangeChanged: handleRangeChange,
+ rangeChanged: scrollMarkUnread ? handleMarkreadInRange : undefined,
totalCount: entries.totalCount,
endReached: () => entries.hasNextPage && entries.fetchNextPage(),
data: entriesIds,
diff --git a/src/renderer/src/modules/settings/tabs/general.tsx b/src/renderer/src/modules/settings/tabs/general.tsx
new file mode 100644
index 0000000000..657f79d383
--- /dev/null
+++ b/src/renderer/src/modules/settings/tabs/general.tsx
@@ -0,0 +1,63 @@
+import { setGeneralSetting, useGeneralSettingValue } from "@renderer/atoms/settings/general"
+import { tipcClient } from "@renderer/lib/client"
+import { useCallback, useEffect, useState } from "react"
+
+import { SettingDescription, SettingSwitch } from "../control"
+import { SettingSectionTitle } from "../section"
+import { SettingsTitle } from "../title"
+
+export const SettingGeneral = () => {
+ const [loginSetting, setLoginSetting] = useState(false)
+ useEffect(() => {
+ tipcClient?.getLoginItemSettings().then((settings) => {
+ setLoginSetting(settings.openAtLogin)
+ })
+ }, [])
+
+ const saveLoginSetting = useCallback((checked: boolean) => {
+ tipcClient?.setLoginItemSettings(checked)
+ setLoginSetting(checked)
+ }, [])
+
+ const settings = useGeneralSettingValue()
+
+ return (
+ <>
+