2013年2月28日 星期四

[轉]10个你可能不知道的ubuntu快捷键



1.前一个后一个工作区的切换
如果你经常使用工作区,那你就可以用Ctrl + Alt +上/下方向键很容易地进行切换。左箭头切换到上一个工作区,右箭头切换到下一个工作区。如果你安装了Compiz,可以用Super + E快捷键显示所有的工作区
2,把当前窗口移到另一个工作区

快捷键Shift+ Ctrl + Alt +左/右方向键让你很容易把当前窗口移到指定的工作区。这个快捷键和上面的快捷键很好配合。如果你工作时常常打开很多窗口,但又不想看到桌面和任务栏挤满程序,你可以用这个快捷键把程序移到另一个工作区,这样你的桌面就整洁多了
3,显示桌面

Ctrl + Alt + D快捷键让你很快地最小化所有窗口,看到桌面。当所有窗口都最小化后,你再按这个快捷键就可以恢复窗口原来的状态
4.鼠标右击的键盘快捷键

在大多数程序里,你可以右击显示快捷菜单。其实键盘上 Shift + F10也能达到一样的效果
5,重启会话以从崩溃中恢复

ubuntu很少会完全崩溃。但如果它真的崩溃了,你可以按下Ctrl + Alt + Backspace来重启会话,恢复的可能达90%
6.快速锁定屏幕

如果你需要离开电脑一会儿,可以按下Ctrl + Alt + L很快地锁定屏幕,以防有人使用

7.反向切换窗口

Alt + Tab是切换窗口的快捷键。如果你再按下SHIft,你就可以反向切换窗口。这个快捷键很有用,当你Alt + Tab按得太快,错过了你想要切换的窗口,按一下shift就可以返回之前的窗口了
8,用方向键移动窗口

Alt+F7会激活移动窗口功能,用方向键(上,下,左,右)就可以移到窗口了。
9. 显示隐藏的文件

大多数情况下,你不需要在你的“家“目录中看到那些隐藏文件,但如果你有这个需要,你可以在Nautilus(ubuntu的文件管理器)下按Ctrl + H来显示隐藏文件
10.不用右击鼠标就能显示文件属性

想要查看文件/文件夹的一般做法是右击选择属性。现在你可以按下 Alt + Enter就能显示属性窗口了
当然,这些只是冰山一角。如果你想要知道更多快捷键,不只是ubuntu还包括Gmail, Google Search, Firefox以及其他软件,请访问Cheat Sheets页面。那里有9个pdf文档让你下载。


使用 Emacs 進行 Perl 開發

在 cperl mode中,如果能做到 code navigation的話,或至少能直接打開 module 的原始碼的話,會是很好的。

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

這裏說使用ffap可以達到這個功能,試用後的確可以。

重點是,這個地方引用perl的方法寫得很好,兩人都對這個功能提出了解答,都用到 shell-command-to-string,寫得很優雅;

第一個作者對ffap的了解很深入,以及在lisp中處理文字、串列的方式非常熟悉

第二個作者將找不到檔案時的情況用nil往外傳,處理得很漂亮,並將大部分的處理在perl中完成,因此整體看來可讀性較高

2013年2月25日 星期一

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

https://github.com/kiwanami/emacs-window-manager

感覺上日本人用 emacs 也用得滿出神入化的

http://sawfish.wikia.com/wiki/Subwm

這是把 emacs 當做 window manager 來著的,徹底擺脫 mouse...

2013年2月23日 星期六

win32/ubuntu平台上執行測試並將結果存成圖片(使用perl)

Win32 guitest


http://stackoverflow.com/questions/11219755/how-can-i-make-sure-i-take-the-screenshot-of-a-specific-window-using-perls-imag

主要用的是guitest和imager兩個套件。 win32-guitest 的最新版 http://search.cpan.org/~karasik/Win32-GuiTest-1.60/

ubuntu: libx11-guitest-perl


http://search.cpan.org/~pecastro/X11-GUITest-0.27/GUITest.pm

ubuntu等系統有類似win32 guitest的套件叫 libx11-guitest-perl ,在 http://sourceforge.net/projects/x11guitest/;不過使用的人好像不多…也對,linux平台上,軟體的source都公開了,直接從source做測試不就好了…

桌面快照


http://search.cpan.org/~tonyc/Imager-Screenshot/Screenshot.pm

這就要用cpanplus來安裝了,模組名為 Imager::Screenshot

範例


http://blog.alternation.net/automatic-thumbnails-of-web-sites

寫得不錯,不過我比較想看到一些處理 timeout和mouse click的例子

http://www.ibm.com/developerworks/cn/opensource/os-thinkpad/

這篇就寫得真的很好

2013年2月15日 星期五

在emacs上用gnus收信、讀新聞群組的~/.authinfo設定


machine foo.bar.com login your_username password your_pass

_________________________________________________ 

參 
http://www.emacswiki.org/emacs/GnusTutorial
http://ann77.emacser.com/Emacs/EmacsEmail.html
http://www.lirui.name/upload/144.Emacs+Gnus.pdf ==>寫得很好,附圖 
http://floss.zoomquiet.org/data/20101130102435/index.html 
http://hi.baidu.com/corelchen/item/618b00a3ed9ab4d95af19113 
http://www.ibm.com/developerworks/cn/linux/l-cn-emacsgnus/index.html
http://navyliu.blog.edu.cn/2008/163965.html

在emacs上用gnus收信、讀新聞群組的~/.gnus.el設定

參 http://whereofwecannotspeak.wordpress.com/2009/07/15/getting-gnus-to-read-mail-over-imap/

http://srlog.blogspot.com/2012/04/yahoo-mail-free-imap.html
_________________________________________________
(setq user-mail-address "user@yahoo.com.tw")

(setq user-full-name "name")

;; GMANE is about the only free news server I've seen.
;; I set it to my primary server so I can read a few Free software mailing lists.
(setq gnus-select-method
     '(nntp "news.gmane.org"))
;; Mostly, though, I just want to read my mail.
;; This setup uses a standard SSL-based connection to read the mail for the accounts I have through
;; UC Berkeley:
(setq gnus-secondary-select-methods
      '((nnimap "yahoo mail" ; primary email
        (nnimap-address "imap.mail.yahoo.com")
        (nnimap-server-port 993)
        (nnimap-authenticator login)
        (nnimap-expunge-on-close 'never)
        (nnimap-stream ssl))
;     (nnimap "ocf" ; secondary account
;         (nnimap-address "mail.ocf.berkeley.edu")
;         (nnimap-server-port 993)
;         (nnimap-authenticator login)
;         (nnimap-expunge-on-close 'never)
;         (nnimap-stream ssl))
)
)

使用WWW-Mechanize-Firefox取得sciencedirect頁面資訊

use WWW::Mechanize::Firefox;
use Data::Dumper;
use Test::More;
local $Data::Dumper::Terse = 1;
my $mech = WWW::Mechanize::Firefox->new(
    tab => qr/^ScienceDirect/,
);
diag $_->{tagName} .":". $_->{id}#.":". $_->{class}#.":". $_->{class} #. "\n"
    for $mech->document->__xpath('/html/BODY/div');
print "_____export bib / save pdf\n";
diag $_->{tagName} .":". $_->{id} .":". $_->{innerHTML}
    for $mech->document->__xpath('/html/BODY/div[@id="page-area"]/div[@id="articleToolbar"]/div[@id="articleNav"]/ul/li[position()=2 or position()=3]');
print "_____bib _____\n";
diag $_->{tagName} .":". $_->{id} .":". $_->{innerHTML}
    for $mech->document->__xpath('/html/BODY/div[@id="page-area"]/div[@id="rightPane"]/div[@id="rightInner"]/div[@id="ui-accordion-rightInner-panel-0"]/div/dl/*');
print "_____html article_____\n";
diag $_->{tagName} .":". $_->{id}
    for $mech->document->__xpath('/html/BODY/div[@id="page-area"]/div[@id="centerPane"]/div[@id="centerInner"]/*');

2013年2月14日 星期四

知識管理、書目管理、文件管理、論文撰寫工具

一般人知道的多半是endnote,免費的加上mendeley,網頁的加上zotero。這篇文章 作者非常詳細地比較了自己的需求及市場上的解決方案,文中再提到 reftex + emacs 的話,就有四種軟體了。

全文查找

http://tul.blog.ntu.edu.tw/archives/1677
http://tul.blog.ntu.edu.tw/archives/4549

目前有全文查找功能者只有 endnote ,但是也不是全都找得到

書目匯入

http://tul.blog.ntu.edu.tw/archives/5344#more-5344

what's missing?

以下這些功能目前還不存在,但我覺得用emacs + perl來手工打造是比較有機會實作出來的

參考資料書目匯入、全文查找/下載

由於各家資料庫、線上期刊廠商目前的格式不一,因此程式本身宣稱的全文查找實際上都有無法整合的問題。其實說穿了就是利用腳本自動進行登入(非必要,但要能處理多個資料來源的合併)、查詢、分析、下載這樣的動作。

這就是 WWW-Mechanize-Firefox可以使得上力的地方了。我剛在安裝時被它的測試嚇了一跳,一堆錯誤,還好最後還是安裝完成了。滿高興終於有perl guru發現這個需求,而且火熱地開發中…

而另一方面 mozrepl + emacs 則可以用來做為除錯及資料檢視之用。mozrepl這個架構有個好處,就是把firefox當成是一個server,所以同時可以有多個client與它進行通訊。我們可以一邊撰寫程式,一邊除錯。當然firefox 內建的firebug應該也是滿不錯用的就是了。

知識地圖繪製

雖說IF factor是邪惡的,但不能否認很多人還是在看它…如果能把這些文獻間的關係用圖的形式表現出來,那麼就有辦法看到IF以外的層面。


2013年2月13日 星期三

emacs中控制firefox

2009年以後,似乎是因為安全性或跨平台的原因,把gtk上的dbus這條路廢人化了

現在留下來比較為人所知的是Mozrepl這個套件 https://github.com/bard/mozrepl/wiki

安裝完後記得重啟firefox

https://github.com/bard/mozrepl/wiki/Emacs-integration

加上moz.el的話可以在打開javascript buffer後開始與firefox對話,記得要在表單中啟動

工具 > MozRepl > Start


官方的教學


https://github.com/bard/mozrepl/wiki/Starting-the-REPL 用emacs的話可以跳過
https://github.com/bard/mozrepl/wiki/Tutorial


講perl嘛A通


http://search.cpan.org/~corion/WWW-Mechanize-Firefox-0.71/lib/Firefox/Application.pm
http://search.cpan.org/~corion/WWW-Mechanize-Firefox-0.71/
http://search.cpan.org/~corion/MozRepl-RemoteObject-0.34/
http://search.cpan.org/~corion/MozRepl-RemoteObject-0.34/lib/MozRepl/RemoteObject.pm 其中提到的iceweasel可以直接用firefox代換。

感想︰


這種作法滿符合unix/linux的作風,就是把ipc的問題當成是client/server的問題來解決。由目前mozrepl的啟動方法可以知道,這是一個視窗佔用一個port來作為server的架構,因此在操作上最好有心理準備,它所能提供的自動化僅及 於同一個視窗;當有彈出視窗出現時,就無法控制,必需要在該視窗中再指定一個不同的port並啟動,並另外建立新的client去跟它連線,才能進行控制。(待確認)


很遺憾的是,moz.el沒有什麼文件,Mozrepl也沒有什麼文件。其實這只是提供一個存取firefox的物件結構的窗口,所有的語法都是javascript,所以要了解javascript對dom的存取觀念。的確在firefox裏也可以直接進行這些操作,但是所產生的資訊要如何整合到現有的資訊/知識管理系統呢? 如果採用org mode的話,那麼與其在firefox中進行操作,還不如在emacs中進行操作;這也就是必需使用mozrepl 的原因。

雖然mozrepl沒什麼文件,但是cpan上的MozRepl-RemoteObject有

ubuntu上與biomed informatics有關的套件

blast2 - Basic Local Alignment Search Tool
libbio-asn1-entrezgene-perl - parser for NCBI Entrez Gene and NCBI Sequence records
libncbi6 - NCBI libraries for biology applications
libncbi6-dbg - NCBI libraries for biology applications (debugging symbols)
libncbi6-dev - NCBI libraries for biology applications (development files)
librg-blast-parser-perl - very fast NCBI BLAST parser - binding for Perl
librostlab-blast-doc - very fast C++ library for parsing the output of NCBI BLAST programs
librostlab-blast0 - very fast C++ library for parsing the output of NCBI BLAST programs
librostlab-blast0-dev - very fast C++ library for parsing the output of NCBI BLAST programs
libvibrant6-dev - NCBI libraries for graphic biology applications (development files)
libvibrant6a - NCBI libraries for graphic biology applications
libvibrant6a-dbg - NCBI libraries for graphic biology applications (unstripped)
libzerg-perl - fast perl module for parsing the output of NCBI BLAST programs
libzerg0 - C library for parsing the output of NCBI BLAST programs
libzerg0-dbg - debugging symbols for libzerg
libzerg0-dev - C library for parsing the output of NCBI BLAST programs
ncbi-blast+ - next generation suite of BLAST sequence search tools
ncbi-blast+-legacy - NCBI Blast legacy call script
ncbi-data - Platform-independent data for the NCBI toolkit
ncbi-epcr - Tool to test a DNA sequence for the presence of sequence tagged sites
ncbi-rrna-data - large rRNA BLAST databases distributed with the NCBI toolkit
ncbi-tools-bin - NCBI libraries for biology applications (text-based utilities)
ncbi-tools-x11 - NCBI libraries for biology applications (X-based utilities)
wise - comparison of biopolymers, commonly DNA and protein sequences

一系列ncbi相關的套件

sra-toolkit - utilities for the NCBI Sequence Read Archive
sra-toolkit-libs-dev - Development files for the NCBI SRA Toolkit's libraries
sra-toolkit-libs0 - Libraries for the SRA Toolkit

http://www.ncbi.nlm.nih.gov/books/NBK56560/ 在各定序平台間做格式轉換,並可上傳至 http://www.ncbi.nlm.nih.gov/Traces/sra/ 資料庫

grinder - Versatile omics shotgun and amplicon sequencing read simulator

http://sourceforge.net/projects/biogrinder/ 經常更新, perl based
Grinder is particularly useful for simulating clinical or environmental microbial communities and complements the use of in vitro mock communities.
maq - maps short fixed-length polymorphic DNA sequence reads to reference sequences

http://maq.sourceforge.net/ 很久沒更新了

picard-tools - Command line tools to manipulate SAM and BAM files

http://picard.sourceforge.net/ 經常更新, java based

qiime - Quantitative Insights Into Microbial Ecology
qiime-doc - Quantitative Insights Into Microbial Ecology (tutorial)

http://qiime.org/ 經常更新, python based,唯一在github上託管的專案

QIIME is an open source software package for comparison and analysis of microbial communities, primarily based on high-throughput amplicon sequencing data (such as SSU rRNA) generated on a variety of platforms, but also supporting analysis of other types of data (such as shotgun metagenomic data).
 以上這些套件很多都強調是分析微生物群落之用,查了一下才發現近幾年新興一個Metagenomics學門︰

 http://en.wikipedia.org/wiki/Metagenomics

http://yourgene.pixnet.net/blog/post/66235325-metagenomics

http://b2322858.blogspot.tw/2011/03/metagenomemetagenomics.html

http://bbs.antpedia.com/thread-162274-1-1.html

看來在2012年下半年,發了不少paper在這方面的樣子

除了醫學上的用途之外,最近有想用細菌直接製造石油的想法出現︰

http://www.worldjournal.com/view/full_news/21688272/article-%E5%BB%96%E4%BF%8A%E6%99%BA%E7%8D%B2%E9%81%B8%E5%9C%8B%E5%AE%B6%E5%B7%A5%E7%A8%8B%E5%AD%B8%E9%99%A2%E9%99%A2%E5%A3%AB?instance=hof

解決emacs中org table中英混雜時無法對齊的問題(2)

之前對這個問題只解決了一半。最近發現有人好像解決了

http://baohaojun.github.com/perfect-emacs-chinese-font.html

這個方法必需以 C-u C-x = 所得到的中文字型名稱做為參數,否則無效

(setq face-font-rescale-alist '(("文泉驛等寬微米黑" . 1.2)))

縮放後只有在某些特定大小的字型才能對齊,目前實驗結果是設置英文字為20點
這是在縮放以後還能維持比例的唯一可能的方法

http://www.gnu.org/software/emacs/manual/html_node/elisp/Font-Selection.html

用到的是face-font-rescale-alist,其說明如下︰

— Variable: face-font-rescale-alist

This variable specifies scaling for certain faces. Its value should be a list of elements of the form
          (fontname-regexp . scale-factor)
If fontname-regexp matches the font name that is about to be used, this says to choose a larger similar font according to the factor scale-factor. You would use this feature to normalize the font size if certain fonts are bigger or smaller than their nominal heights and widths would suggest.
http://zh.read2log.net/t/anago/mac/1328699139/

這說的也是類似的做法,不過是用add-to-list,且字型名稱也可以放regular expression

http://www.chinese-groups.com/thread/188/Re-oeusb.html

這篇解釋得很清楚,文末提到的bug我似乎沒遇到…


http://stackoverflow.com/questions/1606957/emacs-with-smaller-font-size-text-doesnt-align?rq=1

column view也要維持比例的話,還要做一下這個動作

2013年2月12日 星期二

臉書的Friend List Manager

http://dtinth.github.com/friendlist/

用coffeescript寫的,有原碼所以可以安心使用

用途嘛…不解釋

Facebook 隱私設定-3(不是朋友也能"訂閱"及五個例外規則)

這篇看過以後,不論是留言或發言,我都只發在社團裏…原因這篇說得很清楚,我列出重點︰

記住五個個可能的例外規則……
 
1.       1.如果你留言在某人的塗鴉牆上,那麼你無法控制它的隱私設定。留言的能見度跟原始留言的限制是一樣的。而他的設定可能會比較寬鬆,比方說,「朋友的朋友」。
 
2.      2. 如果你有設定可以看的使用者,目的是讓特定的某些朋友不能看到它,不要認為這限制已經完善了。如果之後有人留言,並且標籤某個不在原本設定可以看的Facebook使用者時,那麼那個使用者就可以看到原本的留言跟整個討論串了。所以還是要小心你所發表的內容。
 
3.       3.如果你留言或是回應公開活動邀請或公開的網頁;那麼你無法控制留言的隱私設定。你只能在留言發表後,在你的動態時報上隱藏它。
 
4.      4. 如果你留言在一個朋友的塗鴉牆上,而他的隱私設定是「朋友的朋友」,那麼任何在你「被限制的對象」名單上的朋友也都可以看到這個留言因為他們是你的[朋友]
 
5.       5.這意味著,任何你發布給「所有人」或「朋友的朋友」(無論是你自己的設定或是留言對象)的留言,都會顯示在你不一定知道、被限制或是已經移除好友的人的即時動態邊欄上 如果這個[共同的朋友]是你的[老闆],可能就會發生以下文章的案例:
什麼是Facebook Fired?不要在任何地方批評給你薪水的人 包含社交網路 (多則真實案例分享)

2013年2月11日 星期一

基本的 DBus 偵錯技巧

基本的 DBus 偵錯技巧


寫得很好…我覺得dbus就是gtk上的COM/CORBA…裏面提到的d-feet在ubuntu上可以用apt-get安裝

CallGraphviz – call graph visualzer based on csope, graphviz and xdot


同作者的軟體工程小工具,真是太有才啦~~

解压chm后由hhc生成html索引页面

Local val ashttp://blog.csdn.net/delphinew/article/details/4509576

真是太好了,本來想自己寫一個的說…

不過有些處理還是可以再調整一下,我調整過的版如下


使用 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

2013年2月8日 星期五

gtk中的錯誤訊息

在要執行的gtk程式前加上 G_MESSAGES_DEBUG=all 可以打開訊息,在終端機中可見

http://stackoverflow.com/questions/13790559/showing-gtk-debug-log-messages

這篇說的就是這件事

http://developer.gnome.org/glib/2.30/glib-Message-Logging.html

可用的函式與巨集列表

emacs中bookmark plus (bookmark+)的使用

http://www.emacswiki.org/BookmarkPlus

要把這一大篇看完,實在需要耐心…假設用elpa裝好了(實際上有問題,與org mode的情況類似,與elpa整合不好,還是另外抓下來放著吧…然後依 http://stackoverflow.com/questions/1217180/how-do-i-byte-compile-everything-in-my-emacs-d-directory 上的方法編譯整個目錄中的檔案),原則上按鍵組合與原先bookmark是相同的

新增bookmark


http://lists.gnu.org/archive/html/help-gnu-emacs/2011-01/msg00769.html

這篇解釋得很清楚,除了原有的bookmark按鍵 C-x r m,還可以用bookmark plus引入的新按鍵,如 C-x p c m (或C-x p m)

檢視bookmark list


http://www.emacswiki.org/BookmarkPlus#toc39

‘C-x p e’ or ‘C-x r l’ (command ‘bookmark-bmenu-list’)


編輯bookmark list


http://www.emacswiki.org/BookmarkPlus#toc23

與org mode整合--安裝org-bookmark.el


原則上可以,但是目前要先開了*Bookmark List*這個buffer以後, [[bookmark:...][...]] 這個形式的連結才會正確跳轉。 但是用這個功能來標注原始碼等純文字檔,實在是方便…不過我想org-bookmark.el裏面的bookmark-jump要改成bookmark-jump-other-window比較方便…

2013年2月7日 星期四

gtk中的事件處理--以evince為例

gtk的中文文件真的不多,而且很多己經過時,所以英文還是要練好一點…

在ev-view.c當中,宣告了 ev_view_button_press_event , 這個函數類似於在 win 平台上的 RAD 工具中的所謂“事件處理函式", 它會接收到一個型態為 GdkEventButton * 的參數,這裏面包含了事件的詳情。 此函數必需以某個方式讓事件處理迴圈知道, 程式中是以類別的virtual method table 中的 button_press_event 來存放。以Delphi/VCL的術語來說,widget就是VCL的control或window;在class的階層上,所有class都是由GObjectClass所衍生,類比於VCL的TObject,而所有視窗元件都是由GtkWidgetClass所衍生,類比於VCL的TWindow/TControl。

當事件發生時,捕捉這個事件並加以處理的途徑有兩個,分別是物件層級和類別層級。類別層級的處理由類別的(虛擬)函數進行,有效範圍是該類別的所有物件,若未進行override,則交由父類別處理,層層往上。 通常會去override這個函數的情況,一是對該類別的行為有一個統一要求,二是該類別只有一個實例(如主視窗),三是未來有可能會以該類別為父類別而衍生出新類別。其它的情況,處理事件時,物件層級優先於類別層級,適用於例如對話盒中的按鈕被按下後要有不同的行為,以override的方式則必需對各個按鈕寫出各自的類別,而改寫onclick函數(這名字是假設的);以event handler的方式則只需為不同的按鈕指定不同的onclick事件處理函數(這名字是假設的),比較簡單,gtk中是以g_signal_connect來指定。

不過物件層級的事件傳遞有自己的一條路徑,這是由 parent / child 所串起的一顆樹。與此相關的概念是建構/解構元件的從屬關係;通常視窗元件都是由主視窗所建,是一個 owner / component 的關係,只有記憶體管理的議題存在,沒有訊息的傳遞關係。VCL的設計是,放在可以拖放到視窗上的元件時,設立了TComponent類別來對應,處理一些warehousing的問題。

回到事件處理上,物件層級的處理,走完所有parent widgets都沒有辦法解決時,才會走parent classes這條,不過它的處理通常不會很針對不同的case,而是比較一般的通則。目前看到的情況也是如此,只有主視窗,雖然VCL中一貫使用物件層級處理,但是畢竟多了一層不必要的indirection,因此在gtk中似乎都傾向以類別層級來override VMT以進行事件處理。

於ubuntu 12.10上安裝okular

單純的 apt 無法安裝, 看來又要找ppa了

http://www.ubuntuupdates.org/ppa/kubuntu-ppa_backports?dist=quantal

依此網頁指示執行以下命令

sudo add-apt-repository ppa:kubuntu-ppa/backports 
sudo apt-get update
sudo apt-get install okular

這個ppa我覺得可以先不要移除,真要移除的話,一樣的作法

cd /etc/apt/sources.list.d/

sudo rm kubuntu-ppa-backports-quantal.list 

ubuntu上為emacs安裝cscope以進行code navigation

emacs中的elpa有atags (gnu global) 及 etags (ctags for emacs?)可用,不過似乎不如cscope強大

安裝


apt中納入了這兩個cscope套件,安裝一下

sudo apt-get install cscope cscope-el

然後在.emacs或任何等效的檔案中加入

(require 'xcscope)

啟動emacs,打開任一欲檢視的原始碼檔案,如 .c 檔,按下
C-c s I,程式問要從那個目錄建立索引,通常是設我們放置專案的最上層目錄,

如果是jhbuild抓來的檔案,那通常在 ~/code/evince/checkout/

操作說明


http://cscope.cvs.sourceforge.net/viewvc/cscope/cscope/contrib/xcscope/xcscope.el?revision=1.14&view=markup

它的 * Keybindings: 一節詳述了可用的操作

http://www.eefocus.com/fhq1989312/blog/12-04/247349_9c349.html

我是看了這頁才知有apt可裝

小結


這類的 code navigation 解決方案,在正確性上其實遠不如 MSVS 或是 eclipse,不過對於 gtk 這類純c 的專案,速度是很快的 

2013年2月6日 星期三

设置Ubuntu 默认软件打开方式

http://ubuntugenius.wordpress.com/2012/06/18/ubuntu-fix-add-program-to-list-of-applications-in-open-with-when-right-clicking-files-in-nautilus/

http://www.mypaomian.com/%E8%AE%BE%E7%BD%AEubuntu-%E9%BB%98%E8%AE%A4%E8%BD%AF%E4%BB%B6%E6%89%93%E5%BC%80%E6%96%B9%E5%BC%8F/

以單純的自行 make 新版的 evince 為例,就去改 /usr/share/applications/evince.desktop 這個檔案。

sudo gedit /usr/share/applications/evince.desktop

找到 Exec= 帶頭的那行,把路徑指到我們make出來的版本

ubuntu上開源文件檢視器evince的make手記

老實說,有點懷念configure->make->make install的美好老舊時光…

不過還是捲起袖子來吧…

https://live.gnome.org/Evince/GettingEvince

“Building Evince and Poppler from Git in 5 easy steps”

那是他講的,實際上如果像我一樣  你會在第四步就卡關

patch 1


jhbuild是他引入的一個想要整合build process的(又)另一個機制

理想歸理想,但是bleeding edge總是會有問題,這次問題出在poppler

參 http://markmail.org/thread/jd7b4jeskjjb7be6

似乎 http://poppler.freedesktop.org/ 都說.22是穩定版本了,看來還是只好人工介入一下

根據 http://developer.gnome.org/jhbuild/stable/config-reference.html.en 所言,在 jhbuildrc-evince 加入以下這行︰

branches['poppler'] = (None, 'poppler-0.22.0')

patch 2


Requested 'gtk+-3.0 >= 3.7.5' but version of GTK+ is 3.6.0

看來ubuntu 12.10內建版本不夠新啊…

http://www.ubuntuupdates.org/package/gnome_shell/quantal/main/base/libgtk-3-0

有人提供了套件,不過要加入到apt的repository中,在shell中依序執行以下命令

sudo add-apt-repository ppa:gnome3-team/gnome3

sudo add-apt-repository ppa:ricotz/testing

sudo apt-get update

sudo apt-get install libgtk-3-0

裝完記得刪掉這些ppa,不然軟體更新時會哇哇叫的…目前只有手動方法,到 /etc/apt/sources.list.d/ 找到對應的list檔並刪除之