ホーム >

Emacs

emacs24.1のビルド

Max OS Xの場合

sudo port install ncurses
wget http://ftp.gnu.org/pub/gnu/emacs/emacs-24.1.tar.bz2
svn export http://svn.sourceforge.jp/svnroot/macemacsjp/inline_patch/trunk inline_patch
tar jxf emacs-24.1.tar.bz2
cd emacs-24.1
patch -p0 < ../inline_patch/emacs-inline.patch
./configure --with-ns --without-x
make bootstrap
make install
open nextstep/Emacs.app

nextstep/Emacs.appをApplicationsにコピーすればインストール完了。

Windows(Visual C++)の場合

Visual C++(コンパイラ)だけでなく、MSYSのコマンドが必要なので、事前にインストールしておく。 次に、Visual Studioのコマンドプロンプトを起動し、MSYSのコマンドがインストールされているディレクトリへのPATHを通す。

set PATH=%PATH%;c:\MinGW\msys\1.0\bin

その後、作業ディレクトリに移動し、以下のコマンドを実行。

wget http://ftp.gnu.org/pub/gnu/emacs/emacs-24.1.tar.bz2
tar jxf emacs-24.1.tar.bz2
cd emacs-24.1\nt
configure.bat --with-msvc --without-xpm --without-png --without-jpeg --without-tiff --without-gif
nmake
nmake install INSTALL_DIR=C:\emacs-24.1

ただし、この方法だと日本語入力時に入力途中の文字がインラインで表示されない。

コマンドラインでelispをバイトコンパイルする

emacs -batch -f batch-byte-compile input_files

バックアップの保存先を変更する

編集中のファイルが存在するディレクトリに.backupという名前の ディレクトリを作成して、その中にバックアップファイルを作成する。

(defun make-backup-directory ()
  "Make backup directory, when there is not ./.backup."
  (if (file-directory-p (concat (file-name-directory (buffer-file-name) ) ".backup/" ) )
      ()
    (make-directory (concat (file-name-directory (buffer-file-name)) ".backup/") )
    )
  )
(add-hook 'before-save-hook 'make-backup-directory)

(defun make-backup-file-name (filename)
  (expand-file-name
   (concat ".backup/" (file-name-nondirectory filename) "~")
   (file-name-directory (buffer-file-name))))

text-modeで自動改行をオフにする

(add-hook 'text-mode-hook
          '(lambda () (auto-fill-mode 0)))

flymakeの設定

;; 文法チェックの頻度の設定
(setq flymake-no-changes-timeout 1)
;; 改行時に文法チェックを行うかどうかの設定
(setq flymake-start-syntax-check-on-newline nil)

c, c++用の設定

gccの-fsyntax-onlyオプションを使って、文法チェックを行う。

(setq gcc-warning-options
      '("-Wall" "-Wextra" "-Wformat=2" "-Wstrict-aliasing=2" "-Wcast-qual"
      "-Wcast-align" "-Wwrite-strings" "-Wfloat-equal"
      "-Wpointer-arith" "-Wswitch-enum"
      ))

(setq gxx-warning-options
      `(,@gcc-warning-options "-Woverloaded-virtual" "-Weffc++")
      )

(setq gcc-cpu-options '("-msse" "-msse2" "-mmmx"))

(defun flymake-c-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name)))
       )
    (list "gcc" `(,@gcc-warning-options ,@gcc-cpu-options "-fsyntax-only" "-std=c99" ,local-file))
    ))
(push '(".+\\.c$" flymake-c-init) flymake-allowed-file-name-masks)
(add-hook 'c-mode-hook '(lambda () (flymake-mode t)) )

(defun flymake-c++-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
                       temp-file
                       (file-name-directory buffer-file-name))))
    (list "g++" `(,@gxx-warning-options ,@gcc-cpu-options "-fsyntax-only" "-std=c++0x" ,local-file))
    ))
(push '(".+\\.h$" flymake-c++-init) flymake-allowed-file-name-masks)
(push '(".+\\.cpp$" flymake-c++-init) flymake-allowed-file-name-masks)
(add-hook 'c++-mode-hook '(lambda () (flymake-mode t)) )

ファイルを保存したときに任意のコマンドを実行する

(add-hook 'after-save-hook '関数名)

でセーブ時にフックして、関数を実行することができる。バッファ名の拡張子に応じてコマンドを実行するようにすれば、コンパイル等の作業を自動化する事が可能。

(defvar after-save-hook-command-alist
  '(("c" . "make")
    ))
(defun after-save-hook-command ()
  (let* ((filename (buffer-file-name))
       (extension (file-name-extension filename))
       (pair (assoc extension after-save-hook-command-alist))
       )
    (when pair
      (shell-command (format (cdr pair) filename)))
    ))
(add-hook 'after-save-hook 'after-save-hook-command)