hexo-theme-next icon indicating copy to clipboard operation
hexo-theme-next copied to clipboard

新增代码块显示编程语言的功能

Open pxBang opened this issue 1 year ago • 11 comments

Issue Checklist

Expected behavior

截屏2024-04-01 16 56 27

图中为butterfly主题某一博客下,代码块显示出YAML编程语言

Actual behavior

截屏2024-04-01 17 00 18

在markdown文本编辑如上图所示

截屏2024-04-01 16 58 31

而在网页中显示如上图,无法显示cpp语言类型。

Steps to reproduce the behavior

既然butterfly主题有该功能,next凭什么没有呢?🐶,希望能增加新功能,将指定编程语言显示在代码块上,从而便于读者第一时间确认代码块的语言类型

Other Information

No response

pxBang avatar Apr 01 '24 09:04 pxBang

Thanks for opening this issue, maintainers will get back to you as soon as possible!

welcome[bot] avatar Apr 01 '24 09:04 welcome[bot]

butterfly主题有该功能,next凭什么没有呢?❌ next特立独行,不盲从✅

主要是如果你指定了代码块的文件名,例如

```yml _config.yml
```

那么代码块上方会显示_config.yml而不是代码块的语言。把它放在哪还需要进一步研究。

stevenjoezhang avatar Apr 01 '24 11:04 stevenjoezhang

butterfly主题有该功能,next凭什么没有呢?❌ next特立独行,不盲从✅

主要是如果你指定了代码块的文件名,例如

```yml _config.yml

那么代码块上方会显示`_config.yml`而不是代码块的语言。把它放在哪还需要进一步研究。

我平时在markdown格式下使用```代码块时,习惯于只标明代码语言(并不会额外指定代码块文件名等),这可能和我的使用习惯有关,所以我并没有注意到这个问题:多个参数时,如何识别显示正确的参数。 但我想,简单粗暴就都显示或者干脆不显示;希望正确显示代码语言,那就建立一个代码语言库,显示的时候搜索一下有没有参数属于这个库,确认属于这个库就显示这个代码语言。

总而言之,这只是我的简单思考后的想法,可能并不实用,~~我只是希望next不要落后于butterfly🐶~~希望读者在阅读代码块时能第一时间确认代码语言

pxBang avatar Apr 01 '24 11:04 pxBang

不是这个意思,Hexo当然是知道代码语言的,不然都没法进行高亮。主要是这个位置已经另作他用了,如果要显示语言的话放在哪里是个问题。

stevenjoezhang avatar Apr 01 '24 11:04 stevenjoezhang

不是这个意思,Hexo当然是知道代码语言的,不然都没法进行高亮。主要是这个位置已经另作他用了,如果要显示语言的话放在哪里是个问题。

哦哦,之前我理解错误了。

我觉得这个左上角的位置显示代码块的文件名并不常用吧?至少在我使用的时候是这样,并不知道大家的使用习惯。

如果有空位能加上代码语言就够了,对我来说,放在哪里都一样,都足够我确认代码语言。放在哪里只是美观问题。如果一个空位也没有,那确实没办法了

pxBang avatar Apr 01 '24 11:04 pxBang

截屏2024-04-01 21 31 47 类似这个样子可以不?不过prismjs主题比较杂,不是很好适配,我先在highlight.js上试一试

stevenjoezhang avatar Apr 01 '24 13:04 stevenjoezhang

截屏2024-04-01 21 31 47 类似这个样子可以不?不过prismjs主题比较杂,不是很好适配,我先在highlight.js上试一试

这挺cool的!至少我愿意接受这个样式!

pxBang avatar Apr 01 '24 13:04 pxBang

同意题主的观点,个人认为这个位置要么什么都不显示,要么显示语言名称更合理。

如果作者真的有意强调一串代码所属的文件,往往是在代码块开头通过注释列出。

可以考虑再增加一个显示语言名称的选项:

  • 默认为 false
  • 或者默认为 true,但是如果也设置了文件名,则优先显示文件名,这样依然向下兼容

这个功能如果要做的话该怎么实现?通过一个 filter 来操作生成的 HTML 吗?

sghng avatar Aug 15 '24 05:08 sghng

@pxBang @sghng 我做了一下这个功能,欢迎试用: https://github.com/next-theme/hexo-theme-next/commit/13cc3171de0d025e3e074710c282be0b57578e09

Image

需要在设置中启用,目前只支持highlight.js

stevenjoezhang avatar Apr 05 '25 05:04 stevenjoezhang

附一个思路:是否可以参考许多IDE的设计:用图标表示文件类型,后面跟文件名(如果有的话)

当然,这意味着要对应增加许多语言类型的图标

liushulun avatar Apr 10 '25 07:04 liushulun

Font Awesome倒是自带了很多常用语言的图标,我试试适配一下

stevenjoezhang avatar Apr 10 '25 09:04 stevenjoezhang