2013年1月30日 星期三

三種安裝org mode的方法及emacs小技巧

 

三種在ubuntu 12.04+emacs 23上安裝org mode的方法(emacs 24己預裝)


依據每個人對ubuntu及emacs的了解程度,安裝方法如下

方法1:從主站下載原始碼並編譯 。此法當然最update,但要會make。 參 http://orgmode.org/manual/Installation.html

方法2:(ubuntu專屬)使用apt-get安裝。此法最保險,不需要會make,但可能版本沒那麼新

方法3:使用 elpa 在emacs裏直接安裝。此法可能要了解emacs到一個程度之後才會用。記得參考這裏加上設定,安裝 org org-plus-contrib 其中一個package。
 (org-plus-contrib 在三大elpa主站均沒有提供)
ps. 根據了解,此安裝方式目前看來有點問題…

emacs小技巧

 

安裝starter-kit(需確定org mode己安裝完畢, emacs 24己預裝)


http://eschulte.me/emacs24-starter-kit/
https://github.com/technomancy/emacs-starter-kit

有點神奇的雙胞事件,google的排名和elpa的實際安裝檔來源不同,我暫且相信elpa。目前猜測,有人branch了原作,加入literate programming/org mode的元素後,原作不讓merge,且雙方各自自行開發,branch者立馬冏了,顧不得血統的問題,狂寫文件,結果在pagerank上硬是幹掉原作者。根據branch者的語氣,我猜他沒有去檢查org mode的安裝情況,並且逕自斷了backward compatibility...

贊曰︰還是用elpa比較省事。

Misc


http://lifegoo.pluskid.org/wiki/EmacsTip.html

一些小技巧,主要是C-h的說明、auto complete的快捷鍵、hippie-expand的介紹

http://slashusr.wordpress.com/2010/09/29/three-nifty-alternatives-to-the-m-tab-key-in-emacs-and-a-replacement/

M-通常己經被系統佔用了,此文介紹其它按鍵以達到相同功能

http://www.masteringemacs.org/articles/2011/02/08/mastering-key-bindings-emacs/

推廣來說,key bindings的管理也是一門學問啊…

2013年1月29日 星期二

Literate Programming 文學編程(LP)

第一次看到這個字眼是因為org mode中有一個org-babel,號稱是LP的實作

一般寫程式時,會有放注解的地方,或是產生一堆文件;

LP的思路完全相反,但也更符合人性︰寫文件,然後程式只是附帶的產物

當然也可能有些盲點,例如,會失去IDE中的許多便利,如auto complete等,這己經夠令人頭大了

而且程式中的語意,LP未必有對應的工具去表達,例如#include的含入檔

當直接對tangle的產出程式修改時,要把修改反映回LP文件中也是一件麻煩事

http://josephj.com/event/2012/frontend-beijing/%E6%96%87%E5%AD%B8%E7%B7%A8%E7%A8%8B.html

這個網頁介紹得相當的不錯,作者是從iOS的Leo來作介紹

http://angelonotes.blogspot.tw/2012/07/literate-programming-cweb.html

原汁原味的LP介紹,Knuth當年的cweb,可讀性有點…難怪org mode會取代它

http://kanru.info/blog/archives/2011/07/07/literate-programming/

這是另一個使用notangle的例子,比較有一點實用性

http://www.cnblogs.com/bamanzi/archive/2012/05/12/org-mode-so-powerful.html

這裏面有一段關於LP的介紹,及org babel在實作.emacs的LP時需要的設定

http://www.perlmonks.org/?node_id=735862

LP的爭議一直存在,主要是說,這麼詳盡的注解是否反而降低了生產力?

但是如果是用org mode來取代原版LP使用的文件系統TEX/LaTEX的話,能突顯當前關注的焦點所在,我認為很有用

不過更麻煩的一件事是,編譯時錯誤訊息回報的行號,在LP的原始文件對應到哪裏呢?debug時也會遇到相同的問題。這可能才是使LP發展停滯不前的主因…

http://www.jstatsoft.org/v46/i03/paper


以org mode中LP的應用為題發表的論文,我覺得沒有把org mode的優點發揮出來

http://www.sdragons.org/Software/Perl/LitPerl.html

這是比較實際的例子,用perl作為實作語言。附帶一提,該作者的網頁滿有可看性,例如perl的cheatsheet

WEB/CWEB/NOWEB/NUWEB


 http://www.cs.tufts.edu/~nr/noweb/nuweb.html

這篇文章中解釋了LP的起源和流變,而它本身也就是nuweb的原始檔,brilliant!!

2013年1月28日 星期一

Emacs套件試用︰ Starter Kit、minimap、 準IDE化設置

Starter Kit


用elpa一裝完,想用C-x C-f開檔時,赫然發現,提示檔名的功能整合進minibuffer裏面了
很好  很強大  怎麼不早說呢真是~~

不過這沒有包括在emacs 24的預裝套件中,或許這個風格的轉變有點太大了?

Starter Kit G-Client


這也滿不得了的,可以直接抓google上的文件…這樣很多自動化的工作都可以整合了

minimap

 http://www.emacswiki.org/emacs/MiniMap

原來是實作在sublime中的功能,視覺效果很不錯啊…

準IDE化設置


大致上流程是這樣的
  1. gdb系列
    1. 作者安裝:multi-gud(gud的改良版), multi-gdb-ui(gdb-ui的改良版)。可能已經沒有人在維護了,參 http://www.inet.net.nz/~nickrob/ 。套件作者也承認,emacs設計的理念是成為文字編輯器,對內嵌控制開發等小型c許言專案或許ok,但對大型專案的開發仍然應以eclipse CDT來進行。他也認為gdb-mi受到商業利益的考量影響,未來可能會停止開發
    2. emacs 24 (win7)預裝:gdb-mi, gud
    3. linux:gdb
  2. cedet + ecb(可能已經沒有人在維護了,因此也沒有預裝在emacs 24當中)
  3. auto complete + yasnippet
  4. refactoring工具,如ropexxxx系列
http://cn-popeye.iteye.com/blog/1163548

附圖中有一個是elisp的畫面,令我滿想試試的

http://www.cnblogs.com/karotte/archive/2012/06/06/2537670.html

附圖非常詳盡,感覺不照著試試看對不起作者啊…我猜 https://code.google.com/p/nextide/ 這個 NextIdE 套件就是他在維護的

http://stackoverflow.com/questions/5238245/elisp-programming-whats-the-best-setup

為什麼好像都沒有專為emacs lisp開發的ide呢?這篇文章分析得很好,大意是說,elisp適合開發小型專案,需要用到的東西都在emacs裏面了

emacs elpa--程式庫管理套件

安裝


之前在win7上裝的是emacs 24,所以elpa己經自帶了。如果沒有,像我另外一個安裝ubuntu 12.04的作業系統,自帶的是emacs 23,那就要安裝並在.emacs中加入適當的宣告來初始化,參 http://emacswiki.org/emacs/ELPA#toc5 。具體作法如下︰

方法1


http://tromey.com/elpa/install.html

http://ergoemacs.org/emacs/emacs23_install_elpa.html
在剛安裝完emacs就執行這步比較好,在下完package.el到~/.emacs.d/裏面以後,它會在.emacs後加上類似方法2中提到的那幾行以載入之
p.s. replace package.el according to http://stackoverflow.com/questions/7287947/adding-marmalade-as-package-source

方法2==> 推薦

  1. 下載package.el到emacs認得的目錄
  2. 改寫.emacs,加入以下幾行,然後重啟emacs
(require 'package)
(setq package-archives
            '(("gnu" . "http://elpa.gnu.org/packages/")
             ("marmalade" . "http://marmalade-repo.org/packages/")
             ("melpa" . "http://melpa.milkbox.net/packages/")))
(package-initialize)

使用


M-x list-packages 或 M-x package-list-packages

這有點向perl的 cpan看齊的意思,雖然來得有點晚,但是總比不來的好XD

使用方法參 http://ergoemacs.org/emacs/emacs_package_system.html

按C-h m可以得到說明,

基本上按i標記,按x安裝

實例︰starter-kit的安裝


用elpa來安裝之前提到過的  starter-kit 真是再便利也不過的了

為何要用emacs?


http://dywang.csie.cyut.edu.tw/moodle23/dywang/linux-wangyin/node13.html

我覺得這篇說得挺好。用我的話來說,IDE是讓你不知道細節也能做出個樣子出來,但是你要知道細節才能完成工作時,IDE會讓你不知道那個細節在哪裏。當你愈深入你的工作,你才會發現要處理更多的細節。不使用IDE會讓你一開始就必需處理很多細節,所以通常你不會直接這樣做。一般的作法都是用IDE(或抓個template)產生了骨架之後,從這個骨架開始修改。

2013年1月26日 星期六

org-mode中agenda view及export的使用

agenda


http://orgmode.org/manual/Agenda-files.html#Agenda-files

首先要將檔案加入agenda files列表,不然就不會顯示

agenda 可視為對數個檔案的匯整及查詢/呈現的方式,建議其它功能先了解後再使用,才知道自己在幹什麼

export

按下C-c C-e後即可選擇多種格式,不過文件的部分我傾向用odt,也就是按下大寫的O

其它格式其實都要環境設定有配合到位,一般人實在沒那個美國時間

而且ubuntu中預裝的LibreOffice可以馬上打開文件以檢查排版,以及匯出為其它格式,包括pdf

文件中有latex的話,要參考一下這個連結在文件開頭作個宣告

生產力工具︰workflowy、 番茄工作法、Zotero

workflowy--繼Mindmanager、evernote、remembermilk、TaskPaper後又一清單管理程式


(我還沒提到org mode呢XD)

官網在 https://workflowy.com/

從它提供的影片看來,它為使用觸控裝置的使用者提供了許多便利操作

說真的短時間內要追上org mode的功能是不太可能

但是在行動裝置上,我相信它會得到不錯的市佔,就它利用觸控的便利性而言

番茄工作法

 喔不會吧,gtd都還沒摸熟,又來一個…

雲端番茄工作法及我的實踐經驗
這位twhsi在gtd上也很有見地,發表了不少文章

http://baike.baidu.com/view/5259318.htm
http://wiki.mbalib.com/zh-tw/%E7%95%AA%E8%8C%84%E5%B7%A5%E4%BD%9C%E6%B3%95

非常嚴謹的敘述…

Zotero

書目管理軟體 - Zotero
Zotero書目管理軟體簡介

輕鬆記錄、有效管理、輕鬆應用你的研究書目資料

免費的文獻管理工具-zotero

2013年1月25日 星期五

emacs lisp/w3m/ediff的學習資源


  • elisp
    • http://www.gnu.org/software/emacs/manual/elisp.html
      • 官方手冊
    • http://www.gnu.org/software/emacs/emacs-lisp-intro/html_node/index.html
      • 我比較習慣看的格式,不過它應該是要表現為一樹狀結構才對…
      • 這本書 emacs 里有,按“C-h i”,輸入m,“Emacs Lisp Intro”就能看到
      • C-h i會進入info mode,使用textinfo格式的文件,有點像win平台的help
      • http://ergoemacs.org/emacs/emacs_adding_browser_keys.html
    • http://ergoemacs.org/emacs/elisp.html
      • 一位華人(?)寫的教程,排版不錯,但先後順序沒有很講究
    • ps.輸出重導,例如把stderr重導到stdout的作法︰
      • w3m -h 2>&1 |more
  • 文字形式的www瀏覽器, w3m
    • http://www.howtogeek.com/103574/how-to-browse-from-the-linux-terminal-with-w3m/
    • 可以整合到emacs裏
      • http://www.emacswiki.org/emacs/emacs-w3m#toc19
    • ubuntu 12的安裝
      • http://www.emacswiki.org/emacs/emacs-w3m#toc22
      • sudo apt-get install w3m-el-snapshot
    • 啟動︰執行w3m,例如M-x w3m
    • 說明文件
      • http://emacs-w3m.namazu.org/info/emacs-w3m.html
    • 簡單指令
      • g 到minibuffer輸入網址
      • G 同上,但開新頁籤
      • T 切換圖片顯示
      • B 回上頁
      • N 回下頁
      • R 重載頁面
      • c 顯示/複制本頁url到剪貼簿
      • u 顯示/複制所高亮連結之url到剪貼簿
    • 專有指令
      • ^ 往上一層
      • (spc) 後一頁,當游標位於視窗末
      • (del) 前一頁,當游標位於視窗首
    • 速查表,不過要注意,w3m在emacs裏面有些快速鍵或功能被拿掉了
      • http://wiki.titan2x.com/index.php?title=W3m_cheat_sheet
  • ediff
    • http://caobeixingqiu.is-programmer.com/posts/6783.html

2013年1月24日 星期四

emacs調校--cua mode及其它

  • cua mode
    • 在emacs中如果想繼續用win的風格的快捷鍵來複制、剪下、貼上,需要這個︰

      http://www.emacswiki.org/emacs/CuaMode
      • 當標記了一段文字時會啟動
      • C-z也回來了
      • shift+方向鍵選文字功能,也回來了
      • tab縮排,也回來了
    • 但是有副作用
      • 矩形區域因此受到影響,原"C-x r ..."指令改成"C-RET + 方向鍵"
      • 有標記區域時,原C-x可以用兩種方式間接呼叫
        • C-S-x
        • 很快按兩次C-x
      • C-v及C-c亦有同樣副作用
  • babel中對.emacs的支援
    • 詳解 http://orgmode.org/worg/org-contrib/babel/intro.html#sec-8-2-1
    • 簡明的說明 http://bamanzi3.blogspot.tw/2012/05/emacs-org-mode.html
    • 範例 https://github.com/eschulte/emacs24-starter-kit
  • 複製的內容無法貼到emacs以外的程式嗎?
    •  參 http://emacswiki.org/emacs/CopyAndPaste,加入以下設定
      (setq x-select-enable-clipboard t)
  • 偶然下發現emacs中寫R程式的說明
    http://www2.nsysu.edu.tw/politics/liu/teaching/dataAnalysis/week04_introEmacsAndR.R
    • 完整的文件列表在
      http://www2.nsysu.edu.tw/politics/liu/teaching/dataAnalysis/statistics961.htm
  • 一些額外的設定
    http://caobeixingqiu.is-programmer.com/posts/18700.html
  • emacs本身自帶的diff,叫ediff
    http://caobeixingqiu.is-programmer.com/posts/6783.html

2013年1月23日 星期三

org mode架構概觀--一個專案管理/GTD的觀點

參見 http://orgmode.org/manual/index.html#Top

以下為主要功能,共有9大項

匯出為其它格式
較進階的議題

2013年1月19日 星期六

將emacs的設定放在dropbox並跨平台的寫法

有幾個網頁可以參考
  1. https://sites.google.com/site/steveyegge2/my-dot-emacs-file
    這是比較簡明的版本,跨平台的關鍵字就是 system-type !! 可惜的是他所用的labels指令是屬於gclisp,預設的elisp是無法執行的)
    這樣連預設的.emacs都可以丟到dropbox linux中建立sybolic使用命令為cp -s,可參見 鳥哥 的這篇文章
    另外windows中也可以建立符號連結,指令名 mklink,http://www.windows7home.net/how-to-create-symbolic-link-in-windows-7/
  2. http://www.emacswiki.org/emacs/RobertAdesamConfig 這是詳細且完整的設定,裏面有不少對windows/cygwin整合的設定;而且更特別的是,裏面還有mac OS/darwin的設定 該作者還用到不少emacs特色,例如 latex 等等,這些沒設定過的話,在win7是一定run不起來的。不過在load-libray部分的寫法沒有第一個連結的彈性好;但是預設情況下也只有這個寫法能讓elisp認得…
  3. 多人環境同步:Windows下用mklink让dropbox同步任意文件夹技巧 http://rabbit52.com/2012/desktopos/windows-mklink-dropbox-syc-any-folder
  4. 這可以用來配合多人在windows平台共用dropbox及環境的技巧,在這個連結建立好後,加上HOME目錄(參考上一篇文章設定,以我而言是指向DROPBOX的父目錄,也就是C:\Users\XXX)下的.emacs符號連結,就可以在第二台以上的機器複製一樣的工作環境。比如說在第一台電腦上,某甲根據第一個網頁的說明在HOME目錄建立.emacs的符號連結,實體位置在某甲的dropbox下的a目錄;那麼,某乙在安裝好emacs及dropbox之後,某甲根據 https://www.dropbox.com/help/19/en 的描述分享資料夾,某乙收信打開該資料夾a,該資料夾內有.emacs等相關設定檔,某乙只要為在本機的HOME資料夾建立symlink連至該雲端檔,即可啟動emacs並得到一模一樣的環境
  5. 多人同步時有一個衍生的問題,那就是 custom-set-variables 被大量插入到.emacs檔中,這有可能包含不想被共用的資訊,例如org-agenda-files。此時可以利用 custom-file 來將這些額外的資訊寫到不被共用,但仍在dropbox目錄下的檔案。同時不同的平台也可能設定需要不同的檔,因為根據觀察, org-agenda-files 會寫入檔案的絕對目錄,而不是相對目錄。
  6. 因此需要另外為不同的需要撰寫不同的.emacs檔,給予不同的副檔名,利用環境或版本等變數來判斷要含入那一個檔案。

2013年1月4日 星期五

windows使用者的emacs安裝(含圖形顯示所需dll的取得)

http://www.johndcook.com/emacs_windows.html

他提出的HOME環境變數設定、explorer右鍵整合、splash關閉這三件事,是我覺得最重要的

http://stackoverflow.com/questions/2650041/emacs-under-windows-and-png-files

圖形在ubuntu下預設可以顯示,但在windows下需要額外設定

http://lists.gnu.org/archive/html/help-gnu-emacs/2011-08/msg00205.html

要知道所對應的檔案名稱,要查詢 dynamic-library-alist 變數,M-:按法其實是M-S-;

(2018.5.6更新)

下載此檔並解壓縮到安裝主程式的目錄

http://ftp.gnu.org/gnu/emacs/windows/emacs-25-x86_64-deps.zip


http://www.gtk.org/download/win32.php

我所需要的dll在gnu官網並不完整,以上這個網址才有

(2015.1.17更新) emacs 的32位元版本 要用下面這個檔案內的 DLL

https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.0-win32-x86.zip

(2015.11.17更新) emacs 的64位元版本 要用下面這個檔案內的 DLL

https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.0-win32-x64.zip