add-hook
add-hook 関数を使うことで定義済み hook 変数に関数を追加できる
(add-hook 'text-mode-hook 'turn-on-auto-fill)text-mode の場合は disable truncate にする
(add-hook 'text-mode-hook (lambda() (setq truncate-lines nil)))
(add-hook 'text-mode-hook 'turn-on-auto-fill)text-mode の場合は disable truncate にする
(add-hook 'text-mode-hook (lambda() (setq truncate-lines nil)))
; TCP コネクション (localhost:80) をはる ; open-network-stream は返値に process 名を返してくるので、それを proc に格納する (setq proc (open-network-stream "http-proc" "*test-http-buffer*" "localhost" 80)) #指定した *test-http-buffer* に結果が表示される; proc の状態を確認 (process-status proc) open ; proc に対して送る coding を指定する (set-process-coding-system proc 'binary 'binary) nil ; proc に文字列を送る (process-send-string proc (format(concat "GET / HTTP/1.0\r\n" "\r\n"))) nil
Process http-proc connection broken by remote peer HTTP/1.1 200 OK Date: Thu, 06 Aug 2009 13:59:44 GMT Server: Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8i mod_autoindex_color mod_python/3.3.1 Python/2.5.2 PHP/5.2.6 Last-Modified: Fri, 06 Mar 2009 23:42:57 GMT ETag: "6000000000669-1bc-4647bd829e8db" Accept-Ranges: bytes Content-Length: 444 Connection: close Content-Type: text/html <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8"> <title>Test page</title> </head> <body> Hello, world </body> </html> Process http-proc connection broken by remote peer
open-network-stream NAME BUFFER-OR-NAME HOST SERVICETCP 接続を確立する
| 引数 | 内容 |
| NAME | process 名を指定する |
| BUFFER-OR-NAME | この TCP コネクションに割り付けられるバッファ名 |
| HOST | 接続先ホスト |
| SERVICE | ネットワークサービス名 または ポート番号 |
process-status PROCESS-NAMEPROCESS-NAME で指定したプロセスの状態を返す
| 引数 | 内容 |
| PROCESS-NAME | プロセス名 |
| 返値 | 意味 |
| run | プロセスは running 状態 |
| stop | プロセスは停止している、再開可能 |
| exit | プロセスは終了している |
| signal | プロセスは fatal signal を受けた |
| open | ネットワークコネクションが open している |
| closed | ネットワークコネクションは close した |
| connect | non-blocking コネクション、完了待ち |
| failed | non-blocking コネクション、失敗 |
| listen | ネットワークサーバが listen 中 |
| nil | 指定したプロセス名のプロセスは存在しない |
set-process-coding-system PROCESS &optional DECODING-SYSTEM ENCODING-SYSTEMPROCESS で指定したプロセスとの output/input 用コーディングを指定する
| 引数 内容 | |
| PROCESS | プロセス名 |
| DECODING-SYSTEM | プロセスからの output コーディング |
| ENCODING-SYSTEM | プロセスへの input コーディング |
process-send-string PROCESS STRINGプロセスに対して文字列を送る
| 引数 内容 | |
| PROCESS | プロセス名 |
| STRING | 文字列 |
start-process
set-process-sentinel process sentinelprocess が Finished, exited abnormally など特定のイベント状態になった場合に sentinel で渡した命令を実行する
(defun ls-test ()
(interactive)
(defun msg-me (process event)
(princ
(format "Process: %s had the event [%s]" process event)))
(set-process-sentinel
(start-process "ls" "*ls*" "ls" "-a")
'msg-me)
)
(defun ls-test2 ()
(interactive)
(set-process-sentinel
(start-process "ls" "*ls*" "ls" "-a")
(lambda (process event)
(princ
(format "Process: %s had the event [%s]" process event)))
)
)
*ls*
.
..
COPYING
addpm.exe
cmdproxy.exe
ctags.exe
ddeclient.exe
digest-doc.exe
ebrowse.exe
emacs.exe
emacsclient.exe
emacsclientw.exe
etags.exe
hexl.exe
movemail.exe
runemacs.exe
sorted-doc.exe
*Messages*
Process: ls<1> had the event [finished
]
(defun dosomething-region (pmin pmax) (interactive "r") (message "pmin:%d pmax:%d" pmin pmax) )region を選択して M-x dosomething-region を実行すると *Messages* バッファに以下のように表示される
pmin:405 pmax:423interactive に "r" を渡すと選択した region の開始位置、終了位置が引数に格納される。
(defun http-post (server fname lname)
(interactive "sServer:\nsFirst name:\nsLast name:")
(setq proc (open-network-stream "http-proc" "*http-buffer*" server 80))
(set-process-coding-system proc 'binary 'binary)
(setq content-len
(+ (+ (+ (length "fname=") (length fname)) (length "&lname=")) (length lname)))
(process-send-string
proc
(format (concat
"POST /test.php HTTP/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: "
(number-to-string content-len)
"\r\n"
"\r\n"
"fname="
fname
"&lname="
lname))))
(defun string-length (str) (interactive "sInput a string:") (setq len (length str)) (message "String: %s (%d)" str len))M-x string-length を実行すると mini-buffer に文字列の入力を求めるメッセージが表示される。文字列を入力すると入力した文字列とその文字数を表示する
String: hello (5)
(interactive "sWhat is your name: ")これを実行すると mini-buffer に What is your name: と表示される。そこで文字列を入力すると結果が表示される
(interactive "sWhat your name: ")
("hoge")
数字を入力させる場合は下記のように n を先頭につける
(interactive "nInput your favorite number: ") (5)関数を定義して M-x 関数名 で実行すると mini-buffer に interactive で値を入力して渡すことができる
(defun add (a b) (interactive "nFirst argument:\nnSecond argument:") (setq ans (+ a b)) (message "Ans: %d" ans)) addM-x add を実行すると First argument:, Second argument: と mini-buffer に表示され、数値を入力する。計算結果は mini-buffer に出力される
(defun hello (a b) (setq ans (+ a b)) (message "Ans: %d" ans)) hello (hello 1 3) "Ans: 4"フォーマット
defun NAME ARGUMENT-LIST BODY-FORMSTable: defun の引数
| 引数 | 意味 |
| NAME | 関数名 |
| ARGUMENT-LIST | 引数リスト |
| BODY-FORMS | 関数の中身 |
(defun http-post (server)
(setq proc (open-network-stream "http-proc" "*http-buffer*" server 80))
(set-process-coding-system proc 'binary 'binary)
(process-send-string
proc
(format (concat
"POST /test.php HTTP/1.0\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Length: 23\r\n"
"\r\n"
"fname=hello&lname=world"))))
http-post
(http-post "localhost")
nil
(message "Hello, world")*Message* バッファには次のように出力される
Hello, world
(princ "hello, world") hello, world"hello, world"
(operand arg1 arg2)例)
(variable value)例)
(lambda (arg-variables...) [documentation-string] [interactive-declaration] body-forms ...)
((lambda (a b c) (+ a b c)) 1 2 3) 6(a b c) という新しい関数を登録する。内容は (+ a b c) となる。その (a b c) という関数に (1 2 3) という引数を渡した結果は 1 + 2 + 3 となるので結果は 6 となる。
;;; ===== 印刷 =====
(setq exec-path (cons "C:\\Program Files\\Utility\\sakuraW_r1428" exec-path))
(setq print-region-function
(lambda (start end
&optional lpr-prog
delete-text buf display
&rest rest)
(let* ((procname (make-temp-name "w32-print-"))
(tempfile
(subst-char-in-string
?/ ?\\
(expand-file-name procname temporary-file-directory)))
(coding-system-for-write 'sjis-dos))
(write-region start end tempfile)
(set-process-sentinel
(start-process procname nil "sakuraW.exe" tempfile)
(lambda (process event)
(let ((tempfile
(expand-file-name (process-name process)
temporary-file-directory)))
(when (file-exists-p tempfile)
(delete-file tempfile))))))))
# yum install anthy-el.emacs に Anthy の設定を追記
;; Anthy (set-language-environment "Japanese") (setq default-input-method "japanese-anthy") (global-set-key [zenkaku-hankaku] 'toggle-input-method)emacs で M-x toggle-input-method を実行すると Anthy が起動して日本語入力ができるようになる
(setq file-name-coding-system 'utf-8-unix)
> ./configure --with-emacs=emacs > make > make install
set PREFIX=c:\usr\emacs set EMACS=%PREFIX%\bin\emacs.exe set LISPDIR=%PREFIX%\site-lisp set DEFAULT_MAKE_ARG=elc
> makeit.bat
> makeit.bat install
;;; ===== sqlite-dump =====
(autoload 'sqlite-dump "sqlite-dump" nil t)
(modify-coding-system-alist 'file "\\.sqlite\\'" 'raw-text-unix)
(add-to-list 'auto-mode-alist '("\\.sqlite\\'" . sqlite-dump))> sqlite3.exe test.sqlite SQLite version 3.6.18 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> CREATE TABLE test (id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL); sqlite> INSERT INTO test VALUES (NULL, 'Tokyo'); sqlite> INSERT INTO test VALUES (NULL, 'Osaka'); sqlite> INSERT INTO test VALUES (NULL, 'Nagoya'); sqlite> SELECT * FROM test; 1|Tokyo 2|Osaka 3|Nagoya sqlite> .exit
BEGIN TRANSACTION; CREATE TABLE test (id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL); INSERT INTO "test" VALUES(1,'Tokyo'); INSERT INTO "test" VALUES(2,'Osaka'); INSERT INTO "test" VALUES(3,'Nagoya'); COMMIT;
INSERT INTO "test" VALUES(4,'Sapporo');
> sqlite3.exe test.sqlite SQLite version 3.6.18 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> SELECT * FROM test; 1|Tokyo 2|Osaka 3|Nagoya 4|Sapporo
;;; ===== twittering-mode ===== (require 'twittering-mode) (setq twittering-username "ユーザ名") (setq twittering-password "パスワード")
| キーバインド | コマンド | 機能 |
| C-c C-f | twittering-friends-timeline | フレンドタイムラインを表示 |
| C-c C-s | twittering-update-status-interactive | つぶやきをポストする |
| i | twittering-icon-mode | アイコンモード、テキストモードの toggle |