2013年2月11日 星期一

使用 Emacs 进行 Perl 编程

http://ergoemacs.org/emacs/emacs_perl_vs_cperl_mode.html

兩種模式,perl-mode 和 cperl-mode的比較@李殺網

結果當然一面倒的傾向 cperl mode,所以文末介紹如何將它設為預設模式

http://cpansearch.perl.org/src/YEWENBIN/Emacs-PDE-0.2.16/lisp/doc/QuickStart.html

簡體中文版教學,講的就是cperl mode,我推薦“代碼瀏覽”一節及"语法检查和运行"一節

在cperl mode中要執行run功能的話,要先安裝 mode-compile;這個設計有點不好,因為安裝cperl時似乎沒有訊息提醒或dependency check,不像cpan或apt-get

http://cpansearch.perl.org/src/YEWENBIN/Emacs-PDE-0.2.16/lisp/doc/QuickStartEn.html

英文版

http://search.cpan.org/~yewenbin/

前文同一作者在cpan上的網頁

https://bamanzi-misc.googlecode.com/svn-history/r685/trunk/_emacs.d/init.d/60-prog-basic.el

使用mode compile的話,有些key binding可以設一下;裏面還有一些其它的資訊可以參考

ubuntu上利用emacs的gdb來為gtk+程式debug

http://www.youtube.com/watch?v=vHOzMOzzxDA

這段影片可以給我們一點概念,伴隨著有特殊口音的解說;雖然沒有分割視窗,但己經滿有說明力的了。其實要重頭說明debug還滿不容易的,如果先前有visual studio或eclipse的開發經驗的話,就會滿容易了解gdb的概念

http://emacser.com/emacs-gdb.htm

寫得不錯,整理一下步驟,針對一些地方做個補充

  1. make︰有些gtk的專案己經有特殊的configure參數可以使用,以evince而言的話可以參考 https://live.gnome.org/Evince/Debugging
  2. gdb︰M-x gdb了以後,上方表單會多出一個gud,裏面有許多選項可以操作,是不愛背指令的人的最愛。下file指令載入執行檔,要注意載入的位置;很多情況下就是因為以為的執行檔位置其實不對,而浪費了不少時間;edit指令可以找到函數的位置,但前提是make時參數要正確,否則一樣會浪費不少時間
  3. break & run
  4. watch
  5. IO
  6. binding︰作者有把f5拿回來,這對visual studio使用者是不是很熟悉啊…我是覺得debug 的思路比較重要,速度倒在其次了
不過有些奇怪的地方是,有時下指令後會頓很久,要動一下滑鼠或點個選單之類的才會繼續動作…

2013年2月10日 星期日

emacs 23+的bookmark plus (bookmark+) 學習筆記

http://www.emacswiki.org/BookmarkPlus

別以為看過這篇就算高手了,很多秘技藏在原碼裏啊…(嘖嘖稱奇)

bookmark-set `C-x r m', `C-x p c m'


這不就最基本款的嗎?是的,不過它幕後記載了不少東西,使得某些功能更為強大了,例如它會記得這個buffer上次bookmark的名字;嚴格來說它有辦法撈出最近一次的bookmark,所以當它問你這次要給bookmark什麼名字時,按下 `C-M-u' 就直接幫你打出這個名字來,文件上說真的就像實體的書籤一樣,我們通常洗手間都會擺一本連著看很容易睡著的小說,這裏面是一定要夾一個書籤的不是嗎?它就是用來記得上次看到那兒的…

預設在問你要給什麼名字的時候,提示的是這個buffer中曾經設置過的所有bookmark名字;我通常會在文章中copy一段有代表性的文字,在它提示要輸入名字時按下 C-y ,省去打字的功夫。

與org mode及org-bookmark.el結合,在開發程式時做文件以跳轉到原始碼,或是為你不能check out只能clone/rebase的原始碼做注解


文件寫一寫要對照原始碼時,總要回去看一下原碼,如果結合org mode在裏面加link,就可以跳轉到原始碼,這不是太好了嗎?就是有這麼好的事,安裝org-bookmark.el後,bookmark就可以成為link的一員以進行跳轉。當然要先按個 C-x r l 把bookmark list先帶出來。

結合dired記得整個buffer內容


dired就有點像文字版本的檔案管理員,把emacs當ide時可以把它放在左上角。在這個major mode中,bookmark+會把整個dired的配置都記得,把它拿來當成專案檔的話是滿不錯的…

http://www.cnblogs.com/heshizhu/archive/2012/05/19/2508768.html
http://blog.csdn.net/cxmanzhao/article/details/5685016
http://lifegoo.pluskid.org/wiki/EnhanceDired.html
http://ann77.emacser.com/Emacs/EmacsDiredExt.html

dired的說明

bmkp-make-desktop-record 記得桌面配置 C-x p K


當桌面割得亂七八糟時,你會需要它的…

2013年2月9日 星期六

org文件發布為網站的選項

http://rritw.com/a/JAVAbiancheng/JAVAzonghe/20130120/293995.html

這篇分析得不錯,等我那天有時間來維護自己的 blog 的時候再來好好實踐一番…XD

http://renard.github.com/o-blog/

上文提到的 o-blog ,真的很美觀啊…有時間的話一定要好好學一下…

說真的,http://orgmode.org/ 它本身就作得滿不錯,這麼大一個站據說才14mb而己…

有時間的話一定要好好學一下…

emacs 24中的lisp程式碼導航(code navigation)--Slime-style navigation for Emacs Lisp

https://github.com/purcell/elisp-slime-nav

看來是預裝的,沒什說明,只有跟你說快速鍵盤是 M-, 及 M-.

等一下,這己經很不得了了~~人家純粹c語言都還要搭配 ctags 或 cscope ,你們自家的 emacs lisp 就是要搞黑箱就是了??

然後這又是傳說中的牛人 Steve Purcell 的大作…

emacs中視窗的分割、配置、切換、捲動

分割及配置在上篇說到shell的部分己經談過,接下來要說的是切換。這裏說的切換有兩層含意,一層是輸入焦點轉移到那個視窗(other-window),一個是具有輸入焦點的視窗中,要看到那個buffer的內容(iswitchb)。

other-window 及替代方案


傳統上這個指令綁在 C-x o 按鍵組合上,但是沒有對應的回卷機制。(好吧其實是有回捲的,但是這種本來就己經很複雜的組合,把它弄得更複雜,我們是不太會記得住的…參 http://stackoverflow.com/questions/143072/in-emacs-what-is-the-opposite-function-of-other-window-c-x-o )

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

If you use Icicles, then, in Icicle mode, ‘C-u C-x o’ gives you a multi-command that lets you choose a window (or a frame) by its buffer name (with numeric suffix to distinguish multiple windows for the same buffer). You can also cycle among windows whose buffers match a given pattern. If you also use library crosshairs.el, then it’s easier to see which window is selected as you cycle.
http://www.emacswiki.org/emacs/WindowNavigation
http://www.emacswiki.org/emacs/WindMove ==> 我偏好這個方法,跟之前提過的winner mode應該可以解決8成以上的問題了

iswitchb 及替代方案


傳統上這個指令綁在 C-x b 按鍵組合上,但是沒有對應的回卷機制,而且與一般win平台上的 C- / C-S- 組合不同,速度也慢了一點,因為多按了一次。

http://emacs-fu.blogspot.tw/2009/02/switching-buffers.html

作者的建議是 ido / icycles / anything ,它自己則寫了一個 C- 的代用品在 http://emacs-fu.blogspot.tw/2008/12/cycling-through-your-buffers-with-ctrl.html

http://www.emacswiki.org/emacs/SwitchingBuffers
http://www.emacswiki.org/cgi-bin/wiki/ControlTABbufferCycling =>這其實是想模仿win的M-的效果

Anything


http://www.emacswiki.org/Anything
http://metasandwich.com/2010/07/30/what-can-i-get-for-10-dolla-anything-el/

scroll-other-window 捲動(其它視窗)


這個意思是說,輸入焦點在視窗a,但是可以下命令讓視窗b的內容捲動。這個動作實在是時方便了,如果沒有這種動作,那麼就必需要把輸入焦點移到另外一個視窗,捲動它,再把輸入焦點移回來。傳統上這個指令綁在 C-M-v / C-M-S-v 按鍵組合上

emacs中不使用ide的開發方式

這篇文章我曾經說過,emacs不太需要(成為)一個ide。但是它還是需要做一個ide能做的事吧?是的,這裏就要解釋一下這個概念。昨天我用4個終端機視窗維護一個dbus專案(項目?),眼睛差點沒掉出來了,剛好今天有時間來重整一下整個開發流程。一個比較像樣的ide經常會把畫面切成4個子窗,左上顯示專案的成員或所在的目錄,左下顯示目前檔案的函數或物件,右上顯示目前編輯中的檔案,下方則有訊息視窗。工具列則有一些按鈕提供快速啟動某些命令的方式,如編譯、除錯等, 對應到快速鍵通常是F5、F9等。(我對gdb還沒摸熟,所以先跳過這段。) emacs的準ide解決方案cedet或著說是ecb在處理視窗上的方式是固定的,可以看看 http://ecb.sourceforge.net/docs/The-other-window.html

昨天開的終端機視窗有4個,一個是dbus 的被呼叫端gtk程式啟動用,因為要即時觀察它的log,必需用terminal啟動並提供適當的參數;一個是 dbus 的呼叫端的python腳本啟動用,一樣因為要即時觀察它的log,必需用terminal啟動並提供適當的參數;一個是編譯gtk程式要開的視窗,單光的下達make; make install;第四個留著下達一般指令,git的管理等等;當然還開著一個emacs作程式的修改,一個firefox上網查資料。以gnome目前的桌面管理來說,這樣的配置簡直就是災難一場,我曾經一度想把傳說中的cedet裝上去了,不過後來還是忍住。

解決方案是配合shell mode,請參考以下文章︰

Learning emacs part 4: buffers, windows, and frames « Blasphemous Bits: 視窗切換原理

EmacsWiki: Winner Mode: 視窗組態的回復

當 Shell 遇見 Emacs -- 大話 Emacs Shell Mode 另外教了些shell的技巧

當 Shell 遇見 Emacs -- 大話 Emacs Shell Mode,第 2 部分 這比較不重要

大話 Emacs Shell Mode 第 3 部分 視窗的旋轉,或者應該說是buffer的旋轉…非常高段的技巧

EmacsWiki: David Young: 上三篇文章作者在emacswiki的主頁,將rotate(旋轉window)及roll(旋轉buffer)作了區分


版面-Emacs编辑器(Emacs) 主题:[原创]让窗格旋转起来附圖非常有說明力,看起來就跟商品化的ide一樣

其實看完第一篇其實你就己經知道怎麼在emacs裏面切出四個視窗來了,以下分開發與測試兩種組態來看。

開發期


左上放著主目錄視窗,可以進行make或git;左下放cscope;右上放程式原碼,右下放另一個程式原碼或文件。

測試期


左上放著主目錄視窗,可以進行make或git;左下放gdb(測試中);右上放程式a的終端機,右下放另一個程式的終端機。

artist mode


http://www.cinsk.org/emacs/emacs-artist.html

http://emacser.com/artist-mode.htm

我猜ptt上有些ascii arts是這樣子畫出來的…真的很有才…


圖片來源 https://nsaunders.files.wordpress.com/2009/11/emacs23_rails.png