顯示具有 Emacs 標籤的文章。 顯示所有文章
顯示具有 Emacs 標籤的文章。 顯示所有文章

2012年10月16日 星期二

Emacs 24 color theme 錯誤

是因為Emacs有內建color theme,語法改一下就好了。

參考:
http://batsov.com/articles/2012/02/19/color-theming-in-emacs-reloaded/

2011年10月4日 星期二

drupal emacs mode

http://drupal.org/node/59868

Emacs設定預設開啟瀏覽器

預設是firefox,在init.el裡加上, 就變Opera了。
; default browser
(setq browse-url-browser-function (quote browse-url-generic))
(setq browse-url-generic-program "opera")

2010年11月14日 星期日

[Emacs] 透過ssh遠瑞編輯檔案

在Emacs可以使用gnu的TRAMP,以ssh遠端登入並編輯檔案。

1. 到TRAMP下載,解開,
./configure;make;make install # 需texinfo套件
2. .emacs設定
(setq tramp-default-method "ssh")
3. 開Emacs,像開檔一樣 C-x C-f
/ssh:mydomain.com:/path/to/file.txt

打/mydomain.com:就會進去tramp模式, 可以按tab自動補完了

2010年1月7日 星期四

[Emacs] calendar/diary mode

M-X calendar

有一個.diary檔(預設),記錄diary的資訊.

常用鍵
* M-a/M-e 上/下個月
* M->/< 去/明年
* d 顯示當天的diary
* s 開diary檔
* i d 游標的那天加入diary檔
* i a 游標的那天加入"週年慶", %d可自動算出幾週年(歲)

我的.emacs跟calendar/diary相關設定
;;;; calendar
(setq calendar-week-start-day 1) ; 第一天為星期一
(setq view-diary-entries-initially t) ; 開calendar時也顯示diary
(setq mark-holidays-in-calendar t) ; 開calendar時也顯示 holiday

;; 隱藏跟我無關的節日
(setq holiday-general-holidays nil)
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq bahai-holidays nil)

; 按p C顯示天干地支, from http://forum.slime.com.tw/post1100258-1.html
(defconst chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "已" "庚" "辛" "壬" "癸"])
(defconst chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])

;; diray
; diary-mode fancy display 炫麗顯示
(setq view-diary-entries-initially t
mark-diary-entries-in-calendar t
number-of-diary-entries 7)
(add-hook 'diary-display-hook 'fancy-diary-display)
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
(add-hook 'fancy-diary-display-mode-hook
'(lambda ()
(alt-clean-equal-signs)))
; via http://www.emacswiki.org/emacs/DiaryMode

; set date format
(setq calendar-date-display-form '(year "-" month "-" day))
; diary檔用iso日期格式(預設是美國式)
(setq calendar-date-style 'iso)

(setq calendar-latitude +25.02)
(setq calendar-longitude +121.31)
(setq calendar-location-name "台北")


ref:
DiaryMode(EmacsWiki)
The Calendar and the Diary (GNU Emacs Manual)

2010年1月5日 星期二

[Emacs] gdb開很多視窗就是個很帥的IDE了

.emacs設定加上
(setq gdb-many-windows t)
(setq gdb-show-main t)

在source code的視窗裡:
* Mouse-1點在左邊行數旁的邊框裡,可以設定中斷點(breakpoint)
* C-Mouse-1可以拖現在執行點到任一想要的地方

ref:
- Emacs Mode for GDB
- GDB User Interface Layout

2009年11月26日 星期四

[Emacs] 把換行去掉,或改成別的字

M-x replace-string
然後打C-q C-j (換行符號)
再打要取代的字

或是windows下的檔案到了linux常會出現的^M
就用
M-x replace-string [ENTER] C-q C-m [ENTER] \n [ENTER]

2009年10月22日 星期四

Emacs強大的Org Mode (持續更新)

本來以為Org Mode只是無聊的TODO模式,沒想到還有很多強大而且有用的功能,我又大失敬了!

  • 編大網 - 有顏色highlight顯示, 自動縮排, 加tag, 分類

  • TODO - 可以和calendar/diary搭配, 有DEADLINE, SCHEDULED, DONE等關鍵字

  • 超方便編表格 - 文字檔格式, 自動用空白幫你排的漂漂亮亮(但中英文混合字還是會沒對齊)

  • Agenda buffer - 以星期為單位的備忘錄,一目了然

可以拿來作很紅的GTD(Getting Things Done),暫時先把Remember The MilkGoogle Calendar放一邊了。

目前只是剛上手,等用一陣子後再來寫一下心得~

快速入門
開一個副檔名為org的新檔,就可以編了:
* 主標題
** 副標題 (按TAB會折疊)
*** 請選擇 [/]或是[%] -> 會自動顯示[1/2]或[50%], 要打C-c #啟動
[] 選擇一 (checkbox)
[X] 選擇二

[[link][說明]]

先打這樣就好:
|Name|Phone|Age|
|-
|Peter|1234|17|

再按一些Tab,就會排的漂漂亮的:

| Name | Phone | Age |
|-------+-------+-----|
| Peter | 1234 | 17 |
| Anna | 4321 | 25 |


自己常用的快速鍵
* 一般
M-S-ENTER (增加新item)
C-c C-c (點選checkbox)
C-c , (加入priority)
Tab (折疊)
S-Tab (全部折疊)
M-S Left/Right | 減/加星(層級)
C-c [ / ] 此org檔加入/移除agenda
** tag
C-c C-q (edit tag)
C-c \ (search tag)
** timestamp
也可以在calendar上用滑鼠點
C-c . (加timestamp)
C-c C-d (加DEADLINE)
C-c C-s (加SCHEDULED)

* Outline
C-c C-n/p (下/上個標題)
C-c C-f/b (下/上個同級的標題)
C-c C-u (上一級標題)
C-c C-j (jump?)

* 表格 Table
M-Left/Right (欄位左/右移)
M-S-Left (砍此欄)
M-S-Right (加新欄至右邊)
M-Up/Down (此列上/下移)
M-S-Up (砍此列)
M-S-Down (加新列至下行)

* Agenda Buffer
p/n (上/下)
L (另一視窗顯示org檔,並畫面置中)
TAB(另一視窗顯示org檔)
ENTER (進入org檔, 並關掉agenda)
F (跟隨模式, 移游標, 另一視窗的org跟著動)
* 輸出 export
M-x org-export-as-html 輸出HTML
#+OPTIONS: "\n:t" 換行, 把\n變成


設定(.emacs)
Emacs22.1版後就有了,所以無需再安裝。

;(global-set-key "\C-ca" 'org-agenda) ; 說明文件是用這個顯示agenda mode, 但我用以下代替
(global-set-key [f11] 'org-agenda) ; 按F11就顯示agenda mode比較方便
(setq org-agenda-include-diary t) ; 整合diary mode和org的agenda mode


The Org Manual (一頁HTML)
Org tutorials 一些教學文件和強者的使用經驗談

不過在org mode裡會跟WindMove(按Shift和方向鍵可以在各視窗間移動)和CuaMode衝突

Emacs的calendar-mode

.emacs 設定
;;;; calendar
(setq calendar-week-start-day 1) ; 第一天為星期一
(setq view-diary-entries-initially t) ; 開calendar時也顯示diary
(setq mark-holidays-in-calendar t) ; 開calendar時也顯示 holiday

;; 隱藏跟我無關的節日
(setq holiday-general-holidays nil)
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq bahai-holidays nil)

; 按p C顯示天干地支, from http://forum.slime.com.tw/post1100258-1.html
(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "已" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])

;; diary
(setq diary-file "~/mydiary") ; 設diary檔案路徑(預設是diary)
; diary-mode fancy display 炫麗顯示
(setq view-diary-entries-initially t
mark-diary-entries-in-calendar t
number-of-diary-entries 7)
(add-hook 'diary-display-hook 'fancy-diary-display)
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
(add-hook 'fancy-diary-display-mode-hook
'(lambda ()
(alt-clean-equal-signs)))
; via http://www.emacswiki.org/emacs/DiaryMode

; set date format
(setq calendar-date-display-form '(year "-" month "-" day))
; diary檔用iso日期格式(預設是美國式)
(setq calendar-date-style 'iso)

(setq local-holidays '((holiday-fixed 10 2 "我生日")
));加很多人的生日


操作

. (today)
M-}/{ (上/下個月的同一天)
M-a/M-e (上/下個月的頭/尾)
M->/< (去/明年)
d (show diary date)
s (show diary file)
i d (insert date)
i a (insert anniversary)

The Calendar and the Diary (Emacs Manual)

漸漸捨棄google calendar...

2009年10月21日 星期三

Emacs分頁瀏覽 tabbar.el

Emacs也可以分頁瀏覽,但要安裝tabbar.el。
原本emhacks上的沒有再更新了,是1.3版的,Aquamacs Emacs有改了一個2.0的版本,長的也比較漂亮(下載: tabbar.el),另外debianemacs-goodies-el套件也可以找到,跟Aquamacs是一樣的。

; 不要自動分組 (全部分在同一組)
(setq tabbar-buffer-groups-function
(lambda ()
(list "All"))) ;; code by Peter Barabas


參考:
http://www.emacswiki.org/emacs/TabBarMode
http://www3.ntu.edu.sg/home5/pg04878518/EmacsTools.html (tabbar設定)

2009年9月21日 星期一

Emacs寫HTML

C-c C-t 加tag, 然後照指示加attribute: property, value.
C-c C-v 開browser看
C-c C-f 移到下個匹配tag
C-c C-b 移到上個匹配tag
C-c Tab 隱藏HTML tag, 再打一次C-c Tab就顯示回來
C-c / 加入結尾tag
C-c C-a 在HTML tag裡加attribute
C-c C-d 刪除HTML tag開頭和結尾都會一起刪
C-c RET 插入<p>
C-c j 插入<br>
C-c C-n 插入特殊字元, 像空白&nbsp;, 小於&lt;, 大於&gt;...
C-c C-c h 插入<a href=...>
C-c C-c u 插入<ul><li>...</ul>
C-c C-c o 插入<ol><li>...</ol>
C-c C-c c 插入checkbox
C-c C-c r 插入radio

C-c C-h 看說明

2009年9月18日 星期五

用Emacs編dot (graphviz)

用Emacs來寫dot (Graphviz)也很方便.有人寫了Graphviz dot mode for emacs

1) 到以上網站下載graphviz-dot-mode.el
2) 在.emacs加(load-file "PATH_TO_FILE/graphviz-dot-mode.el")
3) 指令:
M-x compile或C-c c -> 編譯dot, 其實是幫你執行"dot -Tpng foo.dot > foo.png", 但是我都用設定好的F5, 因為C-c c常會按成C-x c就離開了, 囧rz
C-c p -> 顯示png

2009年9月7日 星期一

編輯器的編碼::Editor's Coding

用Windows的筆記本(Notepad)打om二字, 然後按Enter, 再打個, 存成不同的編碼來看:

ANSI:
6F 6D 0D 0A D4 7B
UTF-8:
EF BB BF 6F 6D 0D 0A E5 94 B5
Unicode(預設是little-endian):
FF FE 6F 00 6D 00 0D 00 0A 00 35 55

* 0D 0A是ASCII的CR LF, Windows用的換行, Unix則用LF, Mac用CR. 所以windows編過的檔案到Linux上常會看到^M的標誌. [LF(Line Feed) 就是換行, CR(Carriage Return)是因為以前用電報機, 換行後還是回到第一格.]
* Unicode編碼開頭的U+FEFF是BOM(byte-order mark), UTF-8的BOM則是EF BB BF 
* 唵的Unocode

Emacs:
C-h C ENTER (看現在的coding)
M-x list-coding-systems (列出全部coding system)
C-x ENTER f coding ENTER (改用coding system)
C-x ENTER c coding ENTER (用coding system來看目前的buffer)

Vim:
" 設定自動轉換為 UTF-8 編碼
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1 "在讀寫檔案的編碼
set encoding=utf8
set tenc=utf8
set ff=unix

如果PHP讀到有BOM格式的檔案, 會當成一般字元輸出, 如果用到header()要導向別頁時,就會出現:

Cannot modify header information - headers already sent...的錯誤訊息

2009年8月24日 星期一

emacs設macro

改程式像我這種健忘又駑鈍的最常做一個動作就是把這行註解起來,然後再複製一行下來改,Vim裡可以可方便的用yy複製一行,然後註解掉, 再p貼上就可以了‧Emacs雖然有Ctrl-C Ctrl-C加註解,但是不是我要的...就自己錄一個macro來試試, 做了三個:

Alt-yy就跟Vim的yy指令一樣
Alt-yyc就是複製一行再貼上,並且把上一行註解起來
Alt-cc就是到這行開頭加//註解

;; my macro
(fset 'yy
[?\C-a ?\C-@ ?\C-e ?\M-w])
(fset 'yyc
[?\C-a ?\C-@ ?\C-e ?\M-w return ?\C-y up ?\C-a ?/ ?/])
(fset 'cc
"\C-a//")

駑鈍如我覺得打Alt太麻煩,所以用function key更快
(global-set-key [f2] 'yy)
(global-set-key [f3] 'yyc)
(global-set-key [f4] 'cc)

註解只用//是很呆的事,像python或shell就不適用了,相信會有更聰明的做法。

----
後來發現真的有很帥的方法!! 用elisp神奇的advise功能擴充~~
http://www.emacswiki.org/emacs/SlickCopy

沒有選取時, C-w會砍整行, M-w會複製整行, 就像Vim的dd和yy

emacs的unicode

emacs 23有了unicode支援
趕快把預設改成utf-8,才有安心的感覺~
;; set up unicode
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)