feat: add show line number in code

This commit is contained in:
kangfenmao 2024-10-15 19:18:12 +08:00
parent ffaa16fa88
commit bb035750d6
7 changed files with 26 additions and 6 deletions

View File

@ -99,7 +99,6 @@
} }
code { code {
white-space: pre-wrap !important;
font-family: 'Courier New', Courier, monospace; font-family: 'Courier New', Courier, monospace;
} }
@ -111,7 +110,6 @@
} }
pre { pre {
white-space: pre-wrap !important;
border-radius: 5px; border-radius: 5px;
overflow-x: auto; overflow-x: auto;
font-family: 'Fira Code', 'Courier New', Courier, monospace; font-family: 'Fira Code', 'Courier New', Courier, monospace;

View File

@ -103,6 +103,7 @@
"settings.reset": "Reset", "settings.reset": "Reset",
"settings.set_as_default": "Apply to default assistant", "settings.set_as_default": "Apply to default assistant",
"settings.max": "Max", "settings.max": "Max",
"settings.show_line_numbers": "Show Line Numbers in Code",
"suggestions.title": "Suggested Questions", "suggestions.title": "Suggested Questions",
"add.assistant.title": "Add Assistant", "add.assistant.title": "Add Assistant",
"message.new.context": "New Context", "message.new.context": "New Context",

View File

@ -103,6 +103,7 @@
"settings.reset": "重置", "settings.reset": "重置",
"settings.set_as_default": "应用到默认助手", "settings.set_as_default": "应用到默认助手",
"settings.max": "不限", "settings.max": "不限",
"settings.show_line_numbers": "代码显示行号",
"suggestions.title": "建议的问题", "suggestions.title": "建议的问题",
"add.assistant.title": "添加助手", "add.assistant.title": "添加助手",
"message.new.context": "清除上下文", "message.new.context": "清除上下文",

View File

@ -103,6 +103,7 @@
"settings.reset": "重置", "settings.reset": "重置",
"settings.set_as_default": "設為預設助手", "settings.set_as_default": "設為預設助手",
"settings.max": "最大", "settings.max": "最大",
"settings.show_line_numbers": "代码顯示行號",
"suggestions.title": "建議的問題", "suggestions.title": "建議的問題",
"add.assistant.title": "添加助手", "add.assistant.title": "添加助手",
"message.new.context": "新上下文", "message.new.context": "新上下文",

View File

@ -1,6 +1,7 @@
import { CheckOutlined } from '@ant-design/icons' import { CheckOutlined } from '@ant-design/icons'
import CopyIcon from '@renderer/components/Icons/CopyIcon' import CopyIcon from '@renderer/components/Icons/CopyIcon'
import { useTheme } from '@renderer/context/ThemeProvider' import { useTheme } from '@renderer/context/ThemeProvider'
import { useSettings } from '@renderer/hooks/useSettings'
import { initMermaid } from '@renderer/init' import { initMermaid } from '@renderer/init'
import { ThemeMode } from '@renderer/types' import { ThemeMode } from '@renderer/types'
import React, { memo, useState } from 'react' import React, { memo, useState } from 'react'
@ -21,6 +22,7 @@ interface CodeBlockProps {
const CodeBlock: React.FC<CodeBlockProps> = ({ children, className }) => { const CodeBlock: React.FC<CodeBlockProps> = ({ children, className }) => {
const match = /language-(\w+)/.exec(className || '') const match = /language-(\w+)/.exec(className || '')
const showFooterCopyButton = children && children.length > 500 const showFooterCopyButton = children && children.length > 500
const { codeShowLineNumbers } = useSettings()
const { theme } = useTheme() const { theme } = useTheme()
const language = match?.[1] const language = match?.[1]
@ -38,7 +40,8 @@ const CodeBlock: React.FC<CodeBlockProps> = ({ children, className }) => {
<SyntaxHighlighter <SyntaxHighlighter
language={match[1]} language={match[1]}
style={theme === ThemeMode.dark ? atomDark : oneLight} style={theme === ThemeMode.dark ? atomDark : oneLight}
wrapLongLines={true} wrapLongLines={false}
showLineNumbers={codeShowLineNumbers}
customStyle={{ customStyle={{
border: '0.5px solid var(--color-code-background)', border: '0.5px solid var(--color-code-background)',
borderTopLeftRadius: 0, borderTopLeftRadius: 0,

View File

@ -6,6 +6,7 @@ import { useSettings } from '@renderer/hooks/useSettings'
import { SettingDivider, SettingRow, SettingRowTitle, SettingSubtitle } from '@renderer/pages/settings' import { SettingDivider, SettingRow, SettingRowTitle, SettingSubtitle } from '@renderer/pages/settings'
import { useAppDispatch } from '@renderer/store' import { useAppDispatch } from '@renderer/store'
import { import {
setCodeShowLineNumbers,
setFontSize, setFontSize,
setMessageFont, setMessageFont,
setPasteLongTextAsFile, setPasteLongTextAsFile,
@ -43,7 +44,8 @@ const SettingsTab: FC<Props> = (props) => {
sendMessageShortcut, sendMessageShortcut,
setSendMessageShortcut, setSendMessageShortcut,
pasteLongTextAsFile, pasteLongTextAsFile,
renderInputMessageAsMarkdown renderInputMessageAsMarkdown,
codeShowLineNumbers
} = useSettings() } = useSettings()
const onUpdateAssistantSettings = (settings: Partial<AssistantSettings>) => { const onUpdateAssistantSettings = (settings: Partial<AssistantSettings>) => {
@ -204,6 +206,15 @@ const SettingsTab: FC<Props> = (props) => {
/> />
</SettingRow> </SettingRow>
<SettingDivider /> <SettingDivider />
<SettingRow>
<SettingRowTitleSmall>{t('chat.settings.show_line_numbers')}</SettingRowTitleSmall>
<Switch
size="small"
checked={codeShowLineNumbers}
onChange={(checked) => dispatch(setCodeShowLineNumbers(checked))}
/>
</SettingRow>
<SettingDivider />
<SettingRow> <SettingRow>
<SettingRowTitleSmall>{t('settings.font_size.title')}</SettingRowTitleSmall> <SettingRowTitleSmall>{t('settings.font_size.title')}</SettingRowTitleSmall>
</SettingRow> </SettingRow>
@ -274,7 +285,6 @@ const Container = styled.div`
display: flex; display: flex;
flex: 1; flex: 1;
flex-direction: column; flex-direction: column;
overflow: hidden;
padding-bottom: 10px; padding-bottom: 10px;
padding: 10px 15px; padding: 10px 15px;
` `

View File

@ -21,6 +21,7 @@ export interface SettingsState {
clickAssistantToShowTopic: boolean clickAssistantToShowTopic: boolean
manualUpdateCheck: boolean manualUpdateCheck: boolean
renderInputMessageAsMarkdown: boolean renderInputMessageAsMarkdown: boolean
codeShowLineNumbers: boolean
// webdav 配置 host, user, pass, path // webdav 配置 host, user, pass, path
webdavHost: string webdavHost: string
webdavUser: string webdavUser: string
@ -46,6 +47,7 @@ const initialState: SettingsState = {
clickAssistantToShowTopic: false, clickAssistantToShowTopic: false,
manualUpdateCheck: false, manualUpdateCheck: false,
renderInputMessageAsMarkdown: true, renderInputMessageAsMarkdown: true,
codeShowLineNumbers: false,
webdavHost: '', webdavHost: '',
webdavUser: '', webdavUser: '',
webdavPass: '', webdavPass: '',
@ -125,6 +127,9 @@ const settingsSlice = createSlice({
}, },
setRenderInputMessageAsMarkdown: (state, action: PayloadAction<boolean>) => { setRenderInputMessageAsMarkdown: (state, action: PayloadAction<boolean>) => {
state.renderInputMessageAsMarkdown = action.payload state.renderInputMessageAsMarkdown = action.payload
},
setCodeShowLineNumbers: (state, action: PayloadAction<boolean>) => {
state.codeShowLineNumbers = action.payload
} }
} }
}) })
@ -152,7 +157,8 @@ export const {
setWebdavHost, setWebdavHost,
setWebdavUser, setWebdavUser,
setWebdavPass, setWebdavPass,
setWebdavPath setWebdavPath,
setCodeShowLineNumbers
} = settingsSlice.actions } = settingsSlice.actions
export default settingsSlice.reducer export default settingsSlice.reducer