2012年3月26日

JSON for Vim

剛剛在 Terminal 下開了個新檔要來寫 JSON, 發現 Vim 竟然沒有支援 JSON 的 FileType 與 syntax highlight。想說這問題應該很多人遇過,因此上網找了一下,找到這個 script: JSON.vim

不過看了下安裝說明,感覺麻煩了點。於是又找到了這篇文章,只要到 ~/.vimrc 加入下面這行,就可以讓 JSON 檔案套用 JavaScript 的 syntax highlight, 簡單明瞭。

autocmd BufNewFile,BufRead *.json set ft=javascript
2012年3月11日

關於 Mac 快速檢視 (Quick Look) 的幾個小秘訣

我用了 Mac 好一段時間了才知道,原來對檔案直接按空白鍵可以開啟快速檢視 (Quick Look);又隔了好一段時間,才又知道原來快速檢視除了內建的之外,還可以加上些外掛以增加支援檔案類型。下面是一些我所用到的 QuickLook 相關技巧整理。

BetterZip Plugin

在 Terminal 下開啟快速檢視

除了在 Finder 中按空白鍵外,有時候在 Terminal 底下工作時,也可以利用指令來開啟快速檢視,這樣可以減少鍵盤滑鼠的切換以提升效率。開啟的指令如下:

$ qlmanage -p [FILE]

把 [FILE] 替換成要開啟的檔名即可。不過這指令也不算短,要更方便的話,可以在 ~/.bashrc 中加入以下指令別名 (alias),這樣只要輸入 ql [FILE] 就可以立刻檢視了:

alias ql='qlmanage -p'

對了,設定檔 .bashrc 預設在 Mac OS X 中是不起作用的,可以參考這篇文章來讓 .bashrc work。

增加支援檔案類型的 Plugin

快速檢視本身支援文字、圖片、音樂、影片等基本檔案格式,至於其他不支援的格式則只會顯示一個大大的檔案 icon。透過以下 Plugin 可以增加快速檢視支援的檔案格式,安裝很簡單,只要將下載下來的 *.qlgenerator 檔案放到下面路徑之一:

  • (Macintosh HD)/Library/QuickLook/ 安裝給本機的所有使用者
  • ~/Library/QuickLook/ 只安裝給自己使用

壓縮檔 (Archives)

BetterZip 2 - The Next Generation of Archiving

上面這個外掛預設是暗色背景的,如果喜歡白色背景的(如同文章開頭那張圖),可以考慮下面這個修改版本:

farfanoide/BetterZ-QuickLook-plugin-theme-for-Lion

程式碼 (Code)

qlcolorcode - A Quick Look plugin for source code with syntax highlighting - Google Project Hosting

CSV 檔案

quicklook-csv - A QuickLook plugin to quick look CSV files for Mac OS X 10.5+ - Google Project Hosting

快速檢視文字檔案時,可以複製文字

按空白鍵檢視文字檔案內容很方便,可是有時候如果想要複製文字,就得另外再開啟文字編輯,相當麻煩。在 Terminal 下輸入以下指令,可以讓你在快速檢視文字檔時,也能選取想要的片段,然後按 Cmd+C 複製出來。

$ defaults write com.apple.finder QLEnableTextSelection -bool TRUE; killall Finder

用不同的應用程式開啟

在快速檢視時,右上方會有個按鈕讓你以預設關連的應用程式開啟。如果你想要用其他的應用程式開啟,例如用 Photoshop 開啟圖檔,那麼只要按著右上方按鈕不放,就會出現選單供你選擇想要開啟的應用程式。

以全螢幕開啟快速檢視

選取檔案,然後按下 Cmd+Opt+Y,就可以直接以全螢幕方式進入快速檢視,這對影像或是影片格式相當有用。

其實也可以在按著 Opt 的狀態下按空白鍵進入全螢幕的快速檢視,不過像我有安裝 Alfred, Opt+空白鍵 預設會啟動 Alfred 的輸入視窗,因此就沒辦法用來開啟快速檢視了。

設定 Mac Terminal 下的 .bashrc

今天想要替 Terminal 下一些常用的指令建立 alias, 我按照以前在 FreeBSD/Linux 的習慣,直接進 Terminal,在家目錄 (~/) 下寫了個 .bashrc, 重開 Terminal, 剛剛寫的 alias 卻沒有任何反應。

後來在家目錄下先建了個檔案 .bash_profile, 檔案內容如下:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

這樣原本寫在 .bashrc 裡的指令稿就會被讀取並且發揮作用了。補充說明,我的作業系統版本為 Mac OS X Lion (10.7)

關於 .bash_profile.bashrc 的差別,簡述如下:

.bash_profile

輸入帳號密碼登入時,不論遠端或本地,都會執行此設定檔。

.bashrc

在已經登入的情況下,開啟終端機視窗(如 Gnome 的 xterm),在命令提示符號出現前,就會先執行 .bashrc 內的指令。

不過 Mac OS X 的行為是上述流程的例外,詳細可參考本文最後面的連結。


參考資訊:

Customizing Terminal in Mac OS X 10.5 | macfidelity

上面這篇文章中的步驟比較多,甚至還要進 Terminal 的「偏好設定」畫面去修改打開 Shell 的指令。不過我自己的操作結果是就算沒有設定那些指令也沒關係,只要有包含文章中那段代碼的 .bash_profile, 就可以讀取 .bashrc 了。

關於 .bash_profile.bashrc 的差別,請見下面這篇文章。

.bash_profile vs .bashrc

用 Solarized 幫 google-code-prettify 上色

我用 google-code-prettify 來做 blog 文章中的代碼上色,google-code-prettify 本身有附上幾個 Color Scheme, 然而除了預設的之外,都是以暗色背景為主。

昨天心血來潮將 Solarized 這個 Color Scheme 移植到 google-code-prettify 下,同樣也是 dark/light 雙版本。關於 Solarized 的介紹可以參考這篇文章

下載 / Download

代碼 / Code

Solarized Light

正常排版版本 (download):

.pln{color:#657b83}
@media screen{
    .str{color:#2aa198}
    .kwd{color:#859900}
    .com{color:#93a1a1}
    .typ{color:#b58900}
    .lit{color:#2aa198}
    .pun,.opn,.clo{color:#657b83}
    .tag{color:#268bd2}
    .atn{color:#93a1a1}
    .atv{color:#2aa198}
    .dec,.var{color:#268bd2}
    .fun{color:red}
}
@media print,projection{
    .str{color:#060}
    .kwd{color:#006;font-weight:bold}
    .com{color:#600;font-style:italic}
    .typ{color:#404;font-weight:bold}
    .lit{color:#044}
    .pun{color:#440}
    .tag{color:#006;font-weight:bold}
    .atn{color:#404}
    .atv{color:#060}
}
pre.prettyprint{padding:5px;border:1px solid #888;background:#fdf6e3}
ol.linenums{margin-top:0;margin-bottom:0}
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}
li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}

最小化版本 (download):

.pln{color:#657b83}@media screen{.str{color:#2aa198}.kwd{color:#859900}.com{color:#93a1a1}.typ{color:#b58900}.lit{color:#2aa198}.pun,.opn,.clo{color:#657b83}.tag{color:#268bd2}.atn{color:#93a1a1}.atv{color:#2aa198}.dec,.var{color:#268bd2}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:5px;border:1px solid #888;background:#fdf6e3}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}

Solarized Dark

正常排版版本 (download):

.pln{color:#839496}
@media screen{
    .str{color:#2aa198}
    .kwd{color:#859900}
    .com{color:#586175}
    .typ{color:#b58900}
    .lit{color:#2aa198}
    .pun,.opn,.clo{color:#839496}
    .tag{color:#268bd2}
    .atn{color:#586175}
    .atv{color:#2aa198}
    .dec,.var{color:#268bd2}
    .fun{color:red}
}
@media print,projection{
    .str{color:#060}
    .kwd{color:#006;font-weight:bold}
    .com{color:#600;font-style:italic}
    .typ{color:#404;font-weight:bold}
    .lit{color:#044}
    .pun{color:#440}
    .tag{color:#006;font-weight:bold}
    .atn{color:#404}
    .atv{color:#060}
}
pre.prettyprint{padding:5px;border:1px solid #888;background:#002b36}
ol.linenums{margin-top:0;margin-bottom:0}
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}
li.L1,li.L3,li.L5,li.L7,li.L9{background:#111}

最小化版本 (download):

.pln{color:#839496}@media screen{.str{color:#2aa198}.kwd{color:#859900}.com{color:#586175}.typ{color:#b58900}.lit{color:#2aa198}.pun,.opn,.clo{color:#839496}.tag{color:#268bd2}.atn{color:#586175}.atv{color:#2aa198}.dec,.var{color:#268bd2}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:5px;border:1px solid #888;background:#002b36}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#111}

範例 / Example (in dark version)

import java.util.Map;
import java.util.TreeSet;

public class GetEnv {
  /**
   * let's test generics
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    // get a map of environment variables
    Map<String, String> env = System.getenv();
    // build a sorted set out of the keys and iterate
    for(String k: new TreeSet<String>(env.keySet())) {
      System.out.printf("%s = %s\n", k, env.get(k));
    }
  }    
}

網路上有找到這篇也有 solarized color for google-pretty-code, 不過只有暗色背景的版本。

2012年3月9日

BOM (Byte Order Mark) 與 UTF-8

一些個人筆記,省得以後每次遇到還得重新上網搜尋做功課。


Byte Order Mark 在 UTF-16 Big Endian 是 "FE FF",Little Endian 是 "FF FE"。其中 Mac 系統主要是 Big Endian, PC 系統則是使用 Little Endian。

UTF-8 由於本身特性,不管 Big Endian 或 Little Endian,其 BOM 一律為 "EF BB BF"。

不過個人建議,文字文件要儲存的話,盡量以 UTF-8 格式存。而以 UTF-8 儲存的文件,盡量不要放 BOM 進去。為什麼呢?因為 UTF-8 的一個特色就是能與 ASCII 系統相容,如果文件中沒有包含非拉丁字元的話;要是放了 BOM 進去,就破壞了這相容性。

在 VIM 中的 BOM 相關操作

加入 BOM

:set bomb

移除 BOM

:set nobomb

查詢 BOM 狀態

:set bomb?

在 Terminal / Console 下的 BOM 相關操作

查詢包含 UTF-8 BOM 的檔案

$ grep -rIl $'^\xEF\xBB\xBF' [FILE]

找出並移除 UTF-8 的 BOM

$ grep -rIl $'^\xEF\xBB\xBF' [FILE] | xargs sed -i 's/^\xEF\xBB\xBF//;g'

編碼的轉換

$ iconv -f [FROM_ENCODING] -t [TO_ENCODING] [FILE]

其中 ENCODING 的部份可以是以下數值:

  • UTF-8 UTF8
  • UTF-16BE
  • UTF-16LE
  • UCS-2BE UNICODEBIG
  • UCS-2LE UNICODELITTLE

更多 ENCODING 代碼可以透過 iconv --list 查詢。

2012年2月19日

幾個我常用的 Alfred 自定搜尋

雖然用了 Alfred 一段時間,但是直到最近才開始認真挖掘裡面的設定。其實 Alfred 安裝好不用特別設定,就已經很好用了,像是程式本身預設許多網頁搜尋,從常見的 Google、Yahoo!、Amazon 與維基百科,到比較少人知道但很好用的 wolfram 等,都是現成裝好就可以用的。

Alfred Custom Search

不過每個人常用網站不同,在軟體的預設網站之外一定有遺珠之憾。好在 Alfred 也有提供自定搜尋選項的功能,以下就來分享我自己設定的 Alfred Custom Search。

這些 Custom Search 的安裝方式很簡單,只要將底下以 alfredapp 開頭的一串文字複製起來,叫出 Alfred 的指令視窗(預設是使用 ⌥Space),貼上剛才複製的文字,按下 Enter 就好了。

奇摩字典搜尋

  • Keyword: dict
  • 說明:就是查字典。dict 後面可以接中文詞或是英文單字。

    alfredapp://customsearch/Yahoo%21%E5%A5%87%E6%91%A9%E5%AD%97%E5%85%B8%E6%9F%A5%E8%A9%A2/dict/utf8/url=http://tw.dictionary.yahoo.com/dictionary?p={query}

flickr Creative Common 搜尋

  • Keyword: fcc
  • 說明:Alfred 已經有內建 flickr 搜尋了,不過並不是任何找到的圖片都可以隨意使用。如果你有在寫 blog 並且會上 flickr 找圖片來點綴文章的話,這個搜尋可以幫助你找到合適的圖片。

    alfredapp://customsearch/Search%20Flickr%20CC%20for/fcc/ascii/url=http://www.flickr.com/search/?q={query}&l=commderiv&ss=0&ct=0&mt=all&w=all&adv=1

世界時間查詢

  • Keyword: time
  • 說明:Time.is 是個簡單但方便的網站,可以以城市名稱查詢該地目前時間。安裝好此 Custom Search 後,就能用 "time tokyo" 或 "time 東京" 的語法來查詢當地時間。

    alfredapp://customsearch/%E7%9B%AE%E5%89%8D%E7%9A%84%E6%99%82%E9%96%93%EF%BC%8C%E5%9C%A8/time/ascii/url=http://time.is/{query}

線上音樂搜尋

  • Keyword: gs
  • 說明:Grooveshark 是很大的線上音樂網站,找到就可以直接串流播放了,中英文搜尋都 OK。

    alfredapp://customsearch/Search%20Grooveshark%20for/gs/ascii/url=http://grooveshark.com/#/search?q={query}

Stack Overflow 搜尋

  • Keyword: so
  • 說明:寫程式的人幾乎都得拜訪的聖地。google 程式問題時幾乎都會找到這邊來,乾脆就直接在 Stack Overflow 上搜尋吧。

    alfredapp://customsearch/Search%20Stack%20Overflow%20for/so/ascii/url=http://stackoverflow.com/search?q={query}

Apple Developer Connection 搜尋

  • Keyword: adc
  • 說明:對 Apple 開發者很方便的搜尋。

    alfredapp://customsearch/Search%20ADC%20for/adc/ascii/url=http://developer.apple.com/library/mac/search/?q={query}

PChome 線上購物 搜尋

  • Keyword: pchome
  • 說明:台灣最大的購物網站......吧?我沒有數據,單純只是自己蠻常用的。

    alfredapp://customsearch/Search%20PChome%20for/pchome/ascii/url=http://ecshweb.pchome.com.tw/search/v1/{query}

Mac App Store 搜尋

  • Keyword: mas
  • 說明:尋找 Mac App Store 裡面的應用程式,也是我相當常用到的功能。

    alfredapp://customsearch/%10Search%20Mac%20App%20Store%20for/mas/ascii/url=macappstore://ax.search.itunes.apple.com/WebObjects/MZSearch.woa/wa/search?q={query}

博客來搜尋(僅書籍)

  • Keyword: books
  • 說明:博客來相信我就不用介紹了吧。以下的語法專門用來查詢書籍,如果要查包含書籍以外的物品,可以用下面的語法來查詢。

    alfredapp://customsearch/Search%20%E5%8D%9A%E5%AE%A2%E4%BE%86%E6%9B%B8%E7%B1%8D%20for/books/ascii/url=http://search.books.com.tw/exep/prodsearch.php?cat=BKA&key={query}&apid=books&areaid=headwel_search

博客來搜尋(全站)

  • Keyword: bkl
  • 說明:同上,就不另外說明了。

    alfredapp://customsearch/Search%20%E5%8D%9A%E5%AE%A2%E4%BE%86%20for/bkl/ascii/url=http://search.books.com.tw/exep/prodsearch.php?cat=all&key={query}&apid=books&areaid=headwel_search

2012年2月17日

Growl 與 Notification Center 隨便聊

今天聽到 OSX 下一版本 Mountain Lion 的消息,大更新不多,主要都是將 iOS 上的一些應用搬到 Mac 上來,而其中最吸引我注意的大概就是通知中心(Notification Center)了。

繼續聊下去前,先聊聊我理想中的電腦工作環境,要能提供兩個基本功能:

  1. 單一而簡潔的指令輸入,可以快速鍵入指令進行工作;
  2. 單一而簡潔的訊息輸出,將執行結果與事件統一一處發送通知。

說起來很簡單,說穿了也不過就是文字列模式下的延伸概念。關於第一點,現在已經有許多應用程式可以做到了,例如在 Windows 有 Launchy, Mac 則有 Alfred, 都是很棒的應用,直接熱鍵啟動執行指令,就可以開始進行工作,能有效節省時間。

然而由於圖形作業系統多個視窗各自為政的關係,要建構第二點的環境其實有些困難。在 Windows,當電腦連上外接設備,或是硬碟空間時,會有小小黃色的 Tooltip 通知視窗;當 MSN 有人傳訊息來時,有 MSN 的通知泡泡;防毒軟體的病毒更新碼有段時間沒更新時,會有防毒軟體的提醒對話泡泡。每個軟體都有每個軟體自己的通知與設定,顯示停留的時間與樣式也都個不相同。假設今天如果我要進入專注模式,想要暫時關掉所有外來的通知時,我得一個一個自己去設定,然後要放鬆時還得一個一個去打開,這會是多惱人的一件事情?

好在 Mac 上有 Growl, 一個第三方廠商所寫的訊息通知中心軟體。Growl 提供了公開 API, 讓軟體開發商可以支援將訊息發送到 Growl 作顯示。以我目前的電腦來看,就包含了以下程式的訊息通知:

  • 1Password
  • Adium
  • Alfred
  • Cappuccino
  • Dropbox
  • GrowlTunes
  • HardwareGrowler
  • Insync
  • Pomodoro

這些不同的程式都可以透過相同的窗口向我報告,當我不想要干擾時,也可以很輕鬆的全部關掉。也正因為有如此多的軟體支援 Growl, 所以就算我不喜歡 Growl 他那爪子般的 icon, 不喜歡他把 GrowlTunes 與 HardwareGrowler 在 App Store 裡另外拆開來賣,但我還是購買並安裝了這套軟體。

回到最初所提的,下一版的 OSX 將會把 iOS 上的訊息中心給整合進來,我想最為首當其衝的就是 Growl 了。前面所提到的「單一簡潔的輸入」與「單一簡潔的輸出」,這工作由作業系統來做自然是再合適也不過了。因此不難想像,隨著應用程式逐漸支援新的訊息中心,Growl 將逐漸失去其既有的優勢。

只是就目前看來,Mountain Lion 的更新項目實在不多,如果到時候不是免費升級,而且賣得還跟 Lion 一樣貴的話,我實在很難下得了手花錢進行升級……

Related Posts Plugin for WordPress, Blogger...