クラなんとか or くらなんとか or cla なんとかの日記

2011-07-19

htmlize-region-and-browse を書く流れ

ということで,region 版を書いてみたけど,

こういうの増やすのはどうやるのが正しいのか知らないので識者に期待する流れ.

;;; htmlize
(add-to-list 'load-path (expand-file-name ".emacs.d/htmlize" home))
(require 'htmlize)
;;; http://www.kanasansoft.com/weblab/2011/07/htmlize-and-browse.html
(defun htmlize-region-and-browse ()
  (interactive)
  (defcustom
    htmlize-and-browse-directory-path temporary-file-directory
    "htmlize-and-browse-temporary-file-directory"
    :type 'string
    :group 'htmlize-and-browse)
  (setq htmlize-and-browse-buffer-file-name
        (concat "htmlize-and-browse-"
                (format-time-string "%Y%m%d%H%M%S" (current-time))
                ".html"))
  (setq htmlize-and-browse-buffer-file-path
        (concat htmlize-and-browse-directory-path
                htmlize-and-browse-buffer-file-name))
  (with-current-buffer (htmlize-region (region-beginning) (region-end))
    (write-file htmlize-and-browse-buffer-file-path)
    (set-buffer-modified-p nil)
    (kill-buffer htmlize-and-browse-buffer-file-name)
    (shell-command (concat "open " htmlize-and-browse-buffer-file-path))))

;;; htmlize
(add-to-list 'load-path (expand-file-name ".emacs.d/htmlize" home))
(require 'htmlize)
;;; http://www.kanasansoft.com/weblab/2011/07/htmlize-and-browse.html
(defun htmlize-region-and-browse ()
  (interactive)
  (defcustom 
    htmlize-and-browse-directory-path temporary-file-directory
    "htmlize-and-browse-temporary-file-directory" 
    :type 'string
    :group 'htmlize-and-browse)
  (setq htmlize-and-browse-buffer-file-name
        (concat "htmlize-and-browse-" 
                (format-time-string "%Y%m%d%H%M%S" (current-time))
                ".html"))
  (setq htmlize-and-browse-buffer-file-path
        (concat htmlize-and-browse-directory-path
                htmlize-and-browse-buffer-file-naame))
  (with-current-buffer (htmlize-region (region-beginning) (region-end))
    (write-file htmlize-and-browse-buffer-file-path)
    (set-buffer-modified-p nil)
    (kill-buffer htmlize-and-browse-buffer-file-name)
    (shell-command (concat "open " htmlize-and-browse-buffer-file-path))))

2010-06-30

Emacs-Eclim を試す

この記事はかきかけです.

ということで,インストール

ここを見る.

ようするに

  • eclim インストール
  • emacs-eclim インストール
  • .emacs 修正

の流れ.

使う前に eclimd を起動する必要がある.

これだけは覚えておけ.

  • M-x eclim-manage-project
    • i (M-x eclim-project-info)
    • r (M-x eclim-project-refresh)
  • M-x eclim-ant-run
  • M-x eclim-java-import-missing

続く.

とりあえず,android-mode のコマンド(C-c C-c i とか) を使いがち.

これでcreate project もemacs の中からやる方向だなー.

eclim にあるかな?

参考

2009-11-09

distel を入れてみた

make する.あと erlang.el をコピる.

erlang-start.el は,初期設定でたぶんそのまま使えばいい.

$ cd distel
$ make
$ locate erlang.el|xargs diff # 念の為
$ cp `locate erlang.el|head -1` elisp
$ locate erlang-start.el|xargs diff # 念の為
$ cp `locate erlang-start.el|head -1` elisp

あとは,.emacs に適宜追加.

;; erlang
(add-to-list 'load-path (expand-path ".emacs.d/distel/elisp" home))
(require 'erlang-start)
(require 'distel)
(distel-setup)

これで,*.erl への関連とか.M-x run-erlang も使えるようになる.

README にこんな記述が.

だけど,NetInfo Manager なんてもんは無い.

参考記事だと dscl を使うらしいけど,困ったら何かしよう.

Special notes for Mac OSX:

David Wallin reports the following procedure to setup Distel to work
on an OSX machine with no network connection:

1. Start NetInfo Manager.app (in /Applications/Utilities)
2. From NetInfo Manager, select the directory path
   "/machines/localhost" and mark property "name" and (and anytime
   before here: click on the lock and enter the password) choose
   "Append Value" from the "Directory" menu.
3. Enter your machine name as the appended value and Save.

This procedure is like putting "127.0.0.1 <hostname>" into /etc/hosts
on a UNIX machine. It's necessary so that Emacs can open sockets to
the localhost via the hostname part of a nodename without talking to
DNS.

参考

2009-11-08

Window を適当に移動する

うわー.これ知らなかった.早速使おう.

デフォルトキィバインドは,org-mode と相性悪そう.

;; windmove
(windmove-default-keybindings)
(global-set-key (kbd "C-s-h") 'windmove-left)
(global-set-key (kbd "C-s-j") 'windmove-down)
(global-set-key (kbd "C-s-k") 'windmove-up)
(global-set-key (kbd "C-s-l") 'windmove-right)

とりあえず,Control+Option+[hjkl] でしばらくやってみよう.

haskell-mode を入れる

リンク先からダウンロードしてきて,haskell-site-file をロードすればいいみたい.

;; haskell
(add-to-list 'load-path (expand-file-name ".emacs.d/haskell-mode" home))
(load-library "haskell-site-file")
(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
;;(add-hook 'haskell-mode-hook 'turn-on-haskell-simple-indent)

hook で機能を追加する形式らしい.

indent はお好みで.ちょっと試してからどれ使うか決定する予定.

haskell-ghci/hugs はobsolete らしい.

M-x run-haskell を使えばいいみたい.

これは何かキィバインドしておいた方がいいかもね.

参考

こういうのもあるらしい.

もうちょっとコード書くようになったら試してみよう.

Church 数を書いてみた

Emacs Lisp で書いてみる.

とりあえず,Hello World から.

; -*- mode: emacs-lisp; coding: utf-8-unix; -*-
; hello.el
(princ "Hello, world!\n")
$ emacs -script hello.el
$ emacs -batch -l hello.el # for emacs 21 or before

ちょっと調べたら,lexcal-let*1 を使わないとアレみたい.

d:id:Ehren:20091019:1255976209 さんのを真似して,テストも書いてみる.

;; -*- mode: emacs-lisp; coding: utf-8-unix; -*-
;; church.el

(require 'cl)

(setq zero
      ;; church number
      (lambda (f)
        (lexical-let ((f f))
          (lambda (x)
            (lexical-let ((x x))
              x)))))

(setq add1
      ;; church number - (+ 1 x)
      (lambda (n)
        (lexical-let ((n n))
          (lambda (f)
            (lexical-let ((f f))
              (lambda (x)
                (lexical-let ((x x))
                  (funcall f (funcall (funcall n f) x)))))))))

(setq plus
      ;; church number - (+ x y)
      (lambda (m n)
        (lexical-let ((m m)
                      (n n))
          (lambda (f)
            (lexical-let ((f f))
              (lambda (x)
                (lexical-let ((x x))
                  (funcall (funcall m f) (funcall (funcall n f) x)))))))))

(setq church-to-int
      (lambda (n)
        (lexical-let ((n n)
                      (inc
                       (lambda (n)
                         (lexical-let ((n n))
                           (+ n 1)))))
          (funcall (funcall n inc) 0))))

(setq print-church
      (lambda (n)
        (lexical-let ((n n))
          (princ (concat (int-to-string (funcall church-to-int n)) "\n")))))

;; (let* ((one
;;         (funcall add1 zero))
;;        (two
;;         (funcall add1 one)))
;;   (funcall print-church zero)
;;   (funcall print-church one)
;;   (funcall print-church two)
;;   (funcall print-church (funcall plus one two)) ; (+ 1 2) => 3
;;   (funcall print-church (funcall plus (funcall plus one two) two)) ; (+ (+ 1 2) 2) => 5
;;   )

(provide 'church)
;; -*- mode: emacs-lisp; coding: utf-8-unix; -*-
;; test-church.el

(require 'el-expectations)
(require 'church)

(setq one (funcall add1 zero))
(setq two (funcall add1 one))
(setq three (funcall plus one two)) ; (+ 1 2) => 3
(setq five (funcall plus (funcall plus one two) two)) ; (+ (+ 1 2) 2) => 5

(expectations

 (desc "zero")
 (expect 0
         (funcall church-to-int zero))

 (desc "one")
 (expect 1
         (funcall church-to-int one))

 (desc "two")
 (expect 2
         (funcall church-to-int two))

 (desc "three")
 (expect 3
         (funcall church-to-int three))

 (desc "five")
 (expect 5
         (funcall church-to-int five))

 )
$ emacs-app -q --no-site-file --batch -L . -l el-expectations -f batch-expectations aaa test-church.el; cat aaa
Executing expectations in nil...
5 expectations, 0 failures, 0 errors
Expectations finished at Sun Nov  8 16:35:33 2009
1  :+++++ New expectations +++++
2  :zero
3  :OK
4  :one
5  :OK
6  :two
7  :OK
8  :three
9  :OK
10 :five
11 :OK

5 expectations, 0 failures, 0 errors
Expectations finished at Sun Nov  8 16:35:33 2009

ちょっとfuncall がウザイけど.まぁ.読めばわかるよね.

スコープを作るところに lexcal-let が入っているだけ.

churcl.el のコメントアウトしてある部分を使えば,

emacs -script church.el で確認することもできます.

これで,みんなも Emacs-Lisp でスクリプトが書けるようになったよね.

追記

後から思ったけど,Emacs-Lisp 的には prefix 付けるべきだよな.

最初 lexical-let で囲んでたからそのまま書いちゃった.

参考

*1Emacs-Lisp はデフォルトダイナミックスコープ(全部外部変数みたいなもの)なので,lexcal-let はレキシカルスコープを導入するマクロ.(require 'cl) が必要

2009-10-16

outputz-growl.pl を使う

outputz を使おうと思って,typing-outputz.el を導入してみた,

ついでに,outputz-growl.pl を使ってみたけど,

最初つまづいたのでちょっと書いておく.

この辺を見ると,導入できる.

Growl の設定で,以下をすればよい.

  • ネットワーク > 受信される通知を開く, リモートアプリケーション登録を許可+パスワード

このパスワードは,Net::Growl のパスワードに使う

crontab

0 * * * * zsh -c 'source ~/.zshrc; /opt/local/bin/perl /Users/.../local/bin/outputz-growl.pl' > /Users/.../tmp/outputz-growl.log 2>&1

local::lib の環境変数が .zshrc にしかないので,苦しいけどこんな感じ.

shellscript にすればいい.というのは同意できる.

あと,改行が変だったのと,最初 ranking_info が無かったので,

ちょっと修正した.

github で fork するのは初めてだったのだけど,

gist.github が service unavailable だったこと以外は特に問題無かった.

というのを書いてから気付いたけど,Emacs-Lisp でいろいろやっている人も居るらしい.

そっちに流れるのもいいなー.とは思った.

あんまり見ないからなー < Growl

Save したトリガとかの方が見る気はする.

あと Emacs から shell を動かす必要は確かにあるかもしれない.