Windows 7 で Cygwin + NTEmacs 事始め

何はともあれ

エディタがないと始まらない。 Windows 7 の設定の続きで、今回は Cygwin と NTEmacs を導入した顛末をメモしておく。

Cygwin

Cygwin とは Windows で Linux-like な環境を提供するツール群であるが、Cygwin のインストールを行う前に環境変数 HOME を設定しておくと良い。

https://skalldan.files.wordpress.com/2011/11/wpid-variables.png

これによって Windows のホームが Cygwin のホームにもなる。

インストールやアップデートは setup.exe から行う。Cygwin Mirror Sites から近くのミラーサイトを選択しておく。

https://skalldan.files.wordpress.com/2011/11/wpid-cygwin_setup.png

setup.exe にはコマンドラインオプションも用意されている (cf. Setting up Cygwin)。なお gnupack というアーカイブ展開のみで使用できるパッケージも利用できる。

EDIT: 2011/11/16
apt-cyg という Cygwin のためのコマンドラインインストーラーがあって、殆ど apt-get のように操作できる。先日導入した Cygwin (v.1.7.9-1) でうまく動いている。パッケージ管理はこちらから行ったほうが勝手が良さそうだ。
https://skalldan.files.wordpress.com/2011/11/apt_cyg.png

mintty

mintty とは Cygwin のためのターミナルエミュレータで Cygwin の setup.exe からもインストールできる。ネイティブの Windows インターフェースが利用できるなど (cf. MinTTY Gives Cygwin a Native Windows Interface)、これを使う利点はいろいろある。背景が半透明にできるのも嬉しいところ。

https://skalldan.files.wordpress.com/2011/11/wpid-mintty.png

alias

Cygwin のインストールが終了するとホーム (~/) に .bashrc のひな形が自動生成される。ここに幾つか alias の記述をしておくとランチャ代わりになって便利だ。

# alias
alias ls="ls -aFh --color=auto --show-control-chars"
alias firefox="/usr/local/bin/firefox.exe &" # シンボリックリンクを作成, mklink
alias itunes="/usr/local/bin/itunes.exe &"
alias halt="c:/Windows/winsxs/amd64_microsoft-windows-shutdown-event-tracker_31bf3856ad364e35_6.1.7600.16385_none_5ec90957e1a8fe95/shutdown.exe -s -t 0"
alias reboot="c:/Windows/winsxs/amd64_microsoft-windows-shutdown-event-tracker_31bf3856ad364e35_6.1.7600.16385_none_5ec90957e1a8fe95/shutdown.exe -r -t 0"

Firefox や iTunes などはデフォルトでは c:/Program Files (x86)/ 以下にインストールされるが、このパスは Unix 的にはあまり嬉しくない。なので /usr/local/binmklink コマンドを用いてシンボリックリンクを作成しておいた。頻繁に使用するものは同様にして登録しておけばいい。halt や reboot (もどき) は Windows の shutdown.exe を利用することにした。

NTEmacs

NTEmacs とは Windows 用にビルドされた GNU Emacs である。インストールは、

から最新の exe ファイル (emacs-23.3a-20110815.exe) をダウンロードして実行するだけで可能となっていた。解凍先を指定するだけでインストール完了である。

https://skalldan.files.wordpress.com/2011/11/wpid-ntemacs_compr.png

さすがに Cygwin で (apt-get のように) 主要な elisp が導入できる、とまではいかないが、何も設定しなくとも日本語インライン入力など、使用し始めるのに不自由しない基本的な設定はなされている。ひとまず Org-Mode だけ導入してこの記事を書いている。フォント設定もデフォルトの「MS ゴシック」が見やすく、あえて変える必要もないと感じている。

https://skalldan.files.wordpress.com/2011/11/wpid-ntemacs_font.png

Windows (NTEmacs) 特有の設定だけメモしておく。検索結果が文字化けするとエディタとして致命的なので lgrep のオプション設定には注意が必要だった (lgrep のオプションは Command line options を参照)。lgrep を含む日本語ページャ lv は Cygwin の setup.exe で入った。

;; 日本語環境
(set-language-environment "Japanese")

;; 文字コード
(set-selection-coding-system 'utf-16le-dos) ; クリップボード文字化け対策

;; インプットメソッド
(setq default-input-method "W32-IME")
(w32-ime-initialize)
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq mw32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list
      '("[--]" "[あ]" "[--]"))
(add-hook 'input-method-activate-hook
           (lambda () (set-cursor-color "firebrick")))
(add-hook 'input-method-inactivate-hook
           (lambda () (set-cursor-color "orange")))

;; 検索 (grep-find)
(setq grep-find-command "find . ! -name '*~' -type f -print0 | xargs -0 lgrep -n -Os -Ia ") ; 出力 sjis, 入力 auto

以下は日本語を含む grep-find の検索結果の例。出力は sjis となっている。Linux と同じように “lgrep -n -Au8 -Ia” とやりたいところだが、分からないので保留しておく。

https://skalldan.files.wordpress.com/2011/11/wpid-grep-find.png

dired 関連も Windows 独特のものがあるのでメモしておく。次のサイトの設定を参考にした。

;;------------------------------------------------
;; Dired Mode
;;------------------------------------------------
(require 'dired-x)
(require 'wdired)
(setq dired-listing-switches "-alh")
(setq dired-recursive-copies 'always)
(setq dired-recursive-deletes 'always)
(setq dired-copy-preserve-time nil)

;; cygstart を使う
(setq dired-guess-shell-alist-user
      '((".png"   "cygstart")
        (".jpeg"  "cygstart")
        (".jpg"   "cygstart")
        (".gif"   "cygstart")
        (".tif"   "cygstart")
        (".tiff"  "cygstart")
        (".pdf"   "cygstart")
        ;; MS Office
        (".doc"   "cygstart")
        (".docx"  "cygstart")
        (".xls"   "cygstart")
        (".xlsx"  "cygstart")
        ;; Archive
        (".rar" "unrar x")
        (".lzh" "lha x")
        (".7z"  "7z x")
        ))

;; cygstart を実行する (dired で "z")
(defun dired-do-cygstart ()
  "In dired, open with cygstart."
     (interactive)
     (let ((files (dired-get-marked-files)))
       (dired-do-shell-command "cygstart" nil files)))

; other window に コピー (dired で "c")
(defun dired-copy-to-other-window (arg)
   "In dired, copy selected file(s) to the other window."
      (interactive "P")
          (let ((dired-dwim-target t))
                    (dired-do-copy arg)))

; other window に 移動 (dired で "r")
(defun dired-move-to-other-window (arg)
   "In dired, rename selected file(s) to the other window."
      (interactive "P")
          (let ((dired-dwim-target t))
                    (dired-do-rename arg)))

;; Explorer で開く (dired で "E")
(defun dired-exec-explorer ()
  "In dired, execute Explorer."
  (interactive)
  (explorer (dired-current-directory)))

(defun unix-to-dos-filename (file)
  (with-temp-buffer
    (insert file)
    (goto-char (point-min))
    (while (search-forward "/" nil t)
      (replace-match "" nil t))
    (buffer-string)))

(defun explorer (&optional dir)
  (interactive)
  (setq dir (expand-file-name (or dir default-directory)))
  (if (or (not (file-exists-p dir))
          (and (file-exists-p dir)
               (not (file-directory-p dir))))
      (message "%s can't open." dir)
    (setq dir (unix-to-dos-filename dir))
    (let ((w32-start-process-show-window t))
      (apply (function start-process)
             "explorer" nil "explorer.exe" (list (concat "/e,/root," dir))))))

;; キー割り当て
(add-hook 'dired-mode-hook
          '(lambda ()
              (define-key dired-mode-map "c" 'dired-copy-to-other-window) ; copy to other window
              (define-key dired-mode-map "r" 'dired-move-to-other-window) ; rename to other window
              (define-key dired-mode-map "z" 'dired-do-cygstart) ; do cygstart
              (define-key dired-mode-map "E" 'dired-exec-explorer) ; open with explorer
              (define-key dired-mode-map "W" 'wdired-change-to-wdired-mode) ; wdired mode
              ))

;; ドライブ一覧の表示, M-x netdir
(autoload 'netdir "mmemo-drive" "My computer" t)
(autoload 'netcomp "mmemo-drive" "My network" t)

NTEmacs の設定はまだ試行錯誤中。

エディタ環境が整うとやっと LaTeX が導入できるが、まあ、ぼちぼちと。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s