Octopress中一个神奇的bug-无法选中代码

| 评论

使用 OctoPress 作为 blog 的程序主要就是看中它的代码高亮的功能,但是它出现了一个神奇的bug。 无法选中代码(其实不是真的无法选中,后面说)。

描述:将代码高亮的主题从dark切换到light后,所有的代码高亮中的代码无法被选中。

发现:将代码高亮的代码切换回dark,bug消失。于是搜索代码中的 @if $solarized == light 。 反复确认后发现将 `_solarized.scss` 中的第31行注释后bug消失(当然样式不正确)。

_solarized.scss
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$base03:          #002b36 !default; //darkest blue
$base02:          #073642 !default; //dark blue
$base01:          #586e75 !default; //darkest gray
$base00:          #657b83 !default; //dark gray
$base0:           #839496 !default; //medium gray
$base1:           #93a1a1 !default; //medium light gray
$base2:           #eee8d5 !default; //cream
$base3:           #fdf6e3 !default; //white
$solar-yellow:    #b58900 !default;
$solar-orange:    #cb4b16 !default;
$solar-red:       #dc322f !default;
$solar-magenta:   #d33682 !default;
$solar-violet:    #6c71c4 !default;
$solar-blue:      #268bd2 !default;
$solar-cyan:      #2aa198 !default;
$solar-green:     #859900 !default;

$solarized: dark !default;

@if $solarized == light {

  $_base03: $base03;
  $_base02: $base02;
  $_base01: $base01;
  $_base00: $base00;
  $_base0:  $base0;
  $_base1:  $base1;
  $_base2:  $base2;
  $_base3:  $base3;

  $base03:  $_base3;
  $base02:  $_base2;
  $base01:  $_base1;
  $base00:  $_base0;
  $base0:   $_base00;
  $base1:   $_base01;
  $base2:   $_base02;
  $base3:   $_base03;
}

/* non highlighted code colors */
$pre-bg: $base03 !default;
$pre-border: darken($base02, 5) !default;
$pre-color: $base1 !default;

查看代码发现 $base03 被设置为白色(#fdf6e3),于是搜索 $base03,发现 _syntax.scss 的第31行(又是31) 下面单独列出相关的行

1
2
3
.gist .highlight, figure.code .highlight {
  @include selection(adjust-color($base03, $lightness: 23%, $saturation: -65%), $text-shadow: $base03 0 1px);
}

看到这里就真相大白了,不是无法选中。而是选中颜色是 白色 而背景也是白色,于是 bug 就出现了,选中颜色和背景一样, 看起来就像没有选中。 暴力的将其注释掉。bug 解决。

评论