实现 SuperMemo 卡片宽度切换

最近在用 SuperMemo 刷卡的时候,突然觉得半屏窗口在很多时候更有用,于是习惯性的改 CSS,想实现窗口缩放的时候卡片区域机动留白,结果当然毫无悬念的失败了……

神奇的 SuperMemo

知道 SuperMemo 的渲染引擎古老,但没想到那么古老,不死心的试了各种常见的 CSS 写法:

  • 用 body { max-width: 960px; } 来限制宽度……失败
  • 用 BODY > * 来选中 body 下面的元素……失败
  • 用 BODY P 也许能行?……失败
  • @media 媒体查询?……失败

经过各种测试,基本可以证实传说中的「SuperMemo 的 HTML 组件,是在一个非常老的「IE 兼容/怪异模式」下渲染的,表现得就像 IE6-7 一样」——我觉得 IE 6 都不如——总之所有我们现在习以为常的 CSS 特性,都没法用。

神奇的 BAT

正在准备放弃的时候,灵光一闪,祖传的软件就要用祖传的方案,召唤 BAT!

实现很简单,准备两套(更多也行)CSS,使用对应的 BAT 来覆盖 CSS 后再启动 Supermemo,想用哪套就用哪套。

搞定。

@echo off

  

taskkill /IM sm18.exe 2>nul

  

echo Waiting for SuperMemo to close...

:waitForClose

tasklist | find /I "sm18.exe" >nul

if errorlevel 1 (

    goto :isClosed

) else (

    timeout /T 1 /NOBREAK >nul

    goto :waitForClose

)

  

:isClosed

echo SuperMemo has been closed. Continuing...

  

copy /Y "%SM18_PATH%\bin\supermemo1.css" "%SM18_PATH%\bin\supermemo.css"

  

start "" "%SM18_PATH%\sm18.exe"