本文来自依云's Blog,转载请注明。
国家标准使用这些引号:‘’“”
,而我发现传统中文的引号更漂亮:「」『』
。我切换到传统引号已经有一段时间了,但最近发现有时还是需要使用国标引号,而 fcitx 的现任开发者认为不需要加入该切换功能。好在 fcitx 的配置文件都是文本,又有 fcitx-remote 工具,所以自己很容易地手动实现了两个版本的——Haskell 版本纯粹是练习用,因为没有扩展路径中的~
的现成函数,所以只好自己找了个实现,代码有些长。
import Control.Applicative ((<$>)) import System.Cmd (rawSystem) import System.Directory (getHomeDirectory) import System.Posix.User import qualified Data.Text as T import qualified Data.Text.IO as TIO main = do file <- getFile TIO.readFile file >>= (TIO.writeFile file) . (T.map (trChar "“”‘’『』「」" "『』「」“”‘’")) reloadFcitx getFile :: IO FilePath getFile = expandUser "~/.config/fcitx/data/punc.mb.zh_CN" reloadFcitx :: IO () reloadFcitx = rawSystem "fcitx-remote" ["fcitx-remote", "-r"] >> return () expandUser :: FilePath -> IO FilePath expandUser "~" = getHomeDirectory expandUser ('~':'/':p) = fmap (++ "/" ++ p) getHomeDirectory expandUser ('~':up) = let (u, p) = break (== '/') up in fmap (++ tail p) (homeDirectory <$> getUserEntryForName u) expandUser p = return p trChar :: [Char] -> [Char] -> Char -> Char trChar from to ch = case i of Just i -> to !! i _ -> ch where i = elemIndex ch from
Python 版本就很简洁了:
#!/usr/bin/env python3 # vim:fileencoding=utf-8 import os m = str.maketrans('“”‘’『』「」', '『』「」“”‘’') file = os.path.expanduser("~/.config/fcitx/data/punc.mb.zh_CN") c = open(file).read().translate(m) open(file, 'w').write(c) os.execvp('fcitx-remote', ['fcitx-remote', '-r'])
Mar 03, 2012 02:38:58 PM
没办法,Haskell 的库分得比较散
Mar 03, 2012 06:07:14 PM
主要是它自己没有 expanduser,得自己写。
Mar 04, 2012 12:53:16 AM
嘿嘿!我早就定制标点符号表了!直接修改 punc.mb,连单书名号都做进去了!
只是成对符号和引号样都用一键表示了。用用就习惯了。
Mar 04, 2012 01:04:01 AM
定制不是问题,我解决的问题是一条命令就切换。
Mar 05, 2012 12:01:13 AM
我还是看国标的引号比较顺眼。记得在大陆,那种传统的引号似乎是用于竖排文字的。
Mar 08, 2012 05:38:20 PM
国标与传统引号的切换,我是一直切汉语和日语输入法的……