emacs な日々

悪戦苦闘の備忘録

*scratch*バッファーを消さないようにする

without comments

Emacsのなんたるかも知らずに使い始めたころ、何のために*sratch*バッファーがあるのかも知らずに、保存不要のメモテーブルとして使っていました。

その後の学習で、Emacsにとって重要な役目をしていることが解り、うっかりkill-bufferで消してしまって、やむなくEmacsを再起動するというナンセンスなことをやっていました。
そこで見つけたのが次のリンクのTips


このlispを導入すると、*scratch* バッファで kill-buffer した場合はバッファの内容をクリアし、*scratch* バッファの内容を名前をつけて保存したときには新しく、*scratch* バッファを作ってくれます。


(defun my-make-scratch (&optional arg)
  (interactive)
  (progn
    ;; "*scratch*" を作成して buffer-list に放り込む
    (set-buffer (get-buffer-create "*scratch*"))
    (funcall initial-major-mode)
    (erase-buffer)
    (when (and initial-scratch-message (not inhibit-startup-message))
      (insert initial-scratch-message))
    (or arg (progn (setq arg 0)
                   (switch-to-buffer "*scratch*")))
    (cond ((= arg 0) (message "*scratch* is cleared up."))
          ((= arg 1) (message "another *scratch* is created")))))

(add-hook 'kill-buffer-query-functions
          ;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
          (lambda ()
            (if (string= "*scratch*" (buffer-name))
                (progn (my-make-scratch 0) nil)
              t)))

(add-hook 'after-save-hook
          ;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
          (lambda ()
            (unless (member (get-buffer "*scratch*") (buffer-list))
              (my-make-scratch 1))))


コメントはお気軽に ( 0 )

Written by admin

1月 16th, 2013 at 5:12 pm

Posted in Emacs

emacs の IME を便利にコントールする設定

without comments

Emacsを日本語環境でよく使う僕の場合、うっかりIME ON のままでミニバッファーへのコマンド入力や、[MIGEMO]isearch して「おいおい・・」というケースが多かったので、以下のように設定しています。

lipsを見て貰えば一目瞭然、説明の必要は無いと思います。



;; emacs 起動時は英数モードから始める
(add-hook 'after-init-hook 'mac-change-language-to-us)

;; minibuffer 内は英数モードにする
(add-hook 'minibuffer-setup-hook 'mac-change-language-to-us)
(mac-translate-from-yen-to-backslash)

;; buffer 切替時、IMEの状態をアップデート
(load "cl")
  (add-hook
   'post-command-hook
    (lexical-let ((previous-buffer nil))
      #'(lambda ()
          (unless (eq (current-buffer) previous-buffer)
           (if (bufferp previous-buffer) (mac-handle-input-method-change))
           (setq previous-buffer (current-buffer))))))

;; [migemo]isearch のとき IME を英数モードにする
(add-hook 'isearch-mode-hook 'mac-change-language-to-us)


コメントはお気軽に ( 0 )

Written by admin

12月 31st, 2012 at 7:31 pm

Posted in Emacs

Emacs24 Fullscreen の評価は?

without comments

まずはプリントスクリーンの比較から

 

Fullscreen

fullscreen

 
 

Normalscreen

tabbar



よく見ると、タイトルバーの部分がブラックでマスキングされてるだけ、作業面積で言えば全く変わりません。僕の場合、通常は外部モニター側をメインに作業するため、Mac本隊のメニューバーは外部モニターに表示させています。したがって、MacBook側の表示は、フルスクリーン表示でもノーマルスクリーン表示で同じ・・・なんです。

 

いいかえるとMacBook単体で使う場合に限っては、メニューバーの分だけ広くなると言うことですね。
写真でも解るようにフルスクリーンモードでは、画面の透過機能は死んでしまいます。またマルチスクリーンの場合、片側モニターの表示も死んでしまいます。なのでマルチモニター環境では余り意味の無い設定といえます。ま、不要なものが表示されない分、集中できる・・・と言った程度の効用でしょうか。


コメントはお気軽に ( 0 )

Written by admin

12月 31st, 2012 at 6:09 pm

Posted in Emacs

無料で使えるオンラインストレージの活用

without comments

外付けHDDにバックアップを取るという時代は終わりつつあるようです。
一人のユーザーが MacBook / iPad / iPhone というような複数端末を使うとか、自宅 Mac / 職場 Mac というような作業環境の人も増えてきました。そうしたニーズからクラウドという発想が生まれ、昨今は、クラウドサービス戦争の時代に入りました。


そこで、ぼくが構築しているクラウド環境をご紹介したいと思います。Mac環境に特化した話の内容で申し訳ないが、異種環境であっても十分応用は可能だと思う。取り急ぎ、以下の二つの無料クラウドを導入して試して欲しい。



◆ Dropbox(2GB まで無料)

  • Dropbox は最もレスポンスがよく、自動的にバージョン管理もしてくれるので、設定ファイル群の管理にお勧めです。
  • 複数端末を同じ環境で使えるように以下のようなディレクトリ構成で管理しています。

~/.emacs.d/init.el  ← Dropbox/emacs/init.el のシンボリックリンク
~/Dropbox/emacs/
     ├ init.el  ← 基本設定と分割された設定ファイルの読み込み
     ├ conf    ← init.el から読み込む分割された設定ファイル群
     ├ elisp    ← 他者の配布しているファイルのインストール先
     └ tmp     ← backup file などの一次ファイル置き場
~/Dropbox/howm/    ← howmファイル群
~/Dropbox/org/     ← orgファイル群
~/Dropbox/KyepassX/   ← パスワード管理ファイル
~/Dropbox/Public/    ← 共有ファイルフォルダー

 
 

◆ SugarSync(5GB まで無料)

  • SugarSync は、パソコン側のデレクトリ構造のまま同期が取れるのでデーターバックアップに向いています。
  • ~/Documents ~/Music ~/Movies など必要なデータフォルダーを同期設定するだけ
  • 文書ファイルだけのバックアップなら、5GBあれば十分です。


◆ Flickr / Picasa (Googleアカウントで利用可)

  • 容量の大きいフォトデーターを保存します。
  • 2045ピクセル以下で管理、保存するなら、picasa が無料(容量無制限)で利用できるようなのでお勧めです。僕の場合は高解像度のまま保存したいので flickrのプロアカウント(24.95US$ 容量無制限)にしています。
  • いずれも、iPhoto同期ツールがあるようなので問題ない思うが、picasaは後発なので実績評価が少なく未知数。判断の分かれ道は、サーバーのレスポンス次第と思うが、picasaは、まだ試していないので何ともいえない。


◆ YouTube

  • 動画データーを保存します。
  • ワンファイルの容量最大2GBまで、一つの動画につき10分という制限はあるが実用上は十分。非公開や限定公開などの設定が可能なので安心して使える。
  • 現在は広告収入で運用されており、ユーザーに対しては直接課金が行われていないが将来的な保証は無い。有償化の噂もある。


◆ 外付けHDD(NAS)

  • ぼくが Mac へ移行した最大の理由が、バックアップ機能 Time Machine の信頼性です。Time Machine によるバックアップは、NAS機能を具備した外部HDDを買うのがてっとり早い。
  • 内蔵HDDにバックアップをとるのは、HDD自体がクラッシュした場合を想定すると、バックアップ本来の信頼性の点で、ほとんど無意味。不謹慎な言い方だけど、東北大震災のような状況まで想定すると、データバックアップはクラウドにしておかないと意味が無いことになる。
  • そういう意味では、NASなどを使った外部デバイスによるバックアップは、パソコンシステムが壊れたときの復元用と割り切った方が賢明。僕の場合、QNAP という NASを使っているのですが、いまいちアクセス速度が遅く、アップルの「Time Capsule」2TB が amazon で24,722円になっているので心が動いています(^_^)
  • MacのTime Machine専用という割り切りなら2TBは多すぎなんですけどね。
  • 写真や画像データーをMac本体に保存してバックアップを取るというのは、必ずいつかは保存容量の限界にぶつかります。本体はいつも軽快な環境に保っておき、容量の大きい画像ファイル群は、信頼の置けるクラウドに置くというのが、昨今のベストな選択だと僕は思います。


ps: 
emacs設定ファイル群をDropbox で管理する方法は快適且つ安心です。別途 Tips にまとめてご紹介しましょう。


コメントはお気軽に ( 0 )

Written by admin

12月 31st, 2012 at 1:01 pm

Posted in Emacs

MountainLion はマウスレスで使うべし

without comments

MountainLionは、なんといってもタッチパッド機能が優れているので、はっきりいってマウスは不要です。もちろん最初は慣れが必要ですが、マウスレスに馴れてくると逆にもうマウスには戻れません。そんなマウスレス環境をより快適にするために、ぜひお勧めしたい方法を紹介します。


Mac を英語環境で使う

MountainLion から iPad や iPhone と同様の LaunchPad というデスクトップメニュー機能が採用されました。なので従来の Docメニューは常に隠しておいて画面スペースをより有効に使うことが出来ます。でも、iPad/iPhone のようにタッチパネルでは無いので、これをマウスで追っかけてクリックしてアプリを起動というのでは面白くありません。


ではマウスレスで使うにはどうするかというと、キーボード入力による絞り込み機能を利用します。画面メニューを表示させた状態でキーボードからアプリ名のスペルをタイプしていくと自動的にアプリを絞り込んでくれます。


Safari を起動させたいときは、sa の入力ぐらいで絞り込んでくれますから、あとは enter を押すだけです。馴れてくるとメニューのページを繰りながらマウスで追っかけるよりも遙かにスピーディーです。


ところがこの手法にも問題があります。Mac OS は本来、英語で構築されているのですが、日本語や他の言語でも使えるようにローカライズという翻訳機能を介して表示(日本で販売されているMacは、デフォルトが日本語設定)させています。日本語表記になっているアプリというのは、Mail:メール、Preview:プレビュー Dictionary:辞書などのたぐいですね。


当然ながら日本語表記のアプリは日本語入力でないと絞り込み出来ませんから、これではとても不便です。そこで、日本語ローカライズをやめて Macを英語モードで使うという発想が生まれるのです。英語モードで使うことでアプリ名は全て英語名表記になります。翻訳プロセスが無くなるからか、心持ち Mac の動きも軽快な感じがします。



こうすることで、LaunchPad のアプリ名はすべてアルファベット名になるので、先のキーボード入力での絞り込み機能が完結します。しかしながら、この方法にも落ちし穴があって、Illustratorなどの一部のアプリが動かなくなります。他にも英語環境では使いづらいというアプリもあるかも知れないですね。



この問題を解決してくれるのが、下記にリンクしてある Language Switcher というフリーソフトです。アプリごとにそのアプリケーションが対応している言語リソースの中から、どれかの言語を選択してアプリケーションを起動できる・・という優れものです。



TouchPad機能を拡張する

さて、マウスレスを支援するためのもう一つのお勧めは、BetterTouchTool というフリーToolです。MountainLion の標準機能 を越えた TouchPad の設定が可能になります。文章で説明しても理解するのは難しいので、実際に導入して試してみるといいです。


このアプリは、TouchPad 機能を拡張するだけでは無くて、アプリ起動などのためのキーボードシュートカットも設定できます。たとえば [⌘ + s] というキーに Sfari起動を割り当てる・・といった感じの設定ですね。右手の親指で ⌘ を押し、人差し指で s キーを押すわけです。頻繁に使う操作やアプリ起動にキーボードショートカットを設定しておくと便利です。ワンタッチで Mac を Sleep 出来るようにしておくのも便利ですよ(^_^)



僕の場合は、MacBookの横に24インチの外部モニターを並べて併用していますので、画面間の移動とかも TouchPad で操作できるように設定しています。


コメントはお気軽に ( 0 )

Written by admin

12月 29th, 2012 at 7:42 pm

Posted in Emacs

Mountain Lion に emacs24.2 をインストール

without comments

Mac OS X を SnowLeopard から MountainLion にバージョンアップしたので、改めてフルスクリーンパッチを当てた emacs24.2 をビルドしました。参考にしたのは以下の Tips です。というかほとんどがコピーですが・・・


インストール環境を整える

このTips通りに進めるためには、最新版の autoconf が必要なのと、Mac標準では具備していないコマンド(wget gtar )を使うので、入っていない場合は、Homebrew とかで以下をインストールしておく必要があります。


brew install autoconf
brew install wget
brew install xz
brew install gnu-tar

Homebrew でインストールしたTool群は、/usr/local/Cellar というフォルダーにインストールされて、コマンドはみな、/usr/local/bin にシンボリックが置かれます。パスが通っていないとインストールしたコマンドが有効にならないのでターミナルでチェックして下さい。正しく認識された autoconf の場所とバージョンの表示を貼っておきます。


% which autoconf
/usr/local/bin/autoconf
% autoconf --version
autoconf (GNU Autoconf) 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

うまくいかないときは、bashrc(zsh環境の人は、zshrc)に以下のパス設定を書きます。


# Path for Homebrew
export PATH=/usr/local/bin:/usr/local/sbin:$PATH

 

インストール作業開始

ここまでの準備が問題なく整えば、後はスムーズです。ターミナルを起動して以下の手順で一行ずつ作業してください。Copy & Paste でも大丈夫と思います。
私の場合、ターミナルで操作しながら進捗が確認できるので、desktopで作業を行うことが多いです。
make の -j2 オプションは、CPU のコア数に合わせて適宜変更するとのことで、もし 4コアなら -j4 ですね。 既知のバク修正パッチも適用しています。

cd desktop
EMACS_VER=24.2
wget http://ftp.gnu.org/pub/gnu/emacs/emacs-${EMACS_VER}.tar.xz
wget https://gist.github.com/raw/1355895/b5fe6c3bfcb88e1e80b43ecd50f635053e11d3bc/lion-fullscreen.patch
wget http://svn.sourceforge.jp/svnroot/macemacsjp/inline_patch/trunk/emacs-inline.patch
wget -O emacs-popup-crash.patch https://gist.github.com/raw/397610/a459b517a4cb07f5a1938b6e46e848860f42b464/gistfile1.diff
wget https://gist.github.com/raw/2924676/fc089328a3ae56443ed19de5d32d1a6bc00cd558/patch-for-emacs-inline.patch
gtar xvf emacs-${EMACS_VER}.tar.xz
cd emacs-${EMACS_VER}
patch -p1 < ../lion-fullscreen.patch
patch -p0 < ../emacs-inline.patch
patch -p1 < ../emacs-popup-crash.patch
patch -p1 < ../patch-for-emacs-inline.patch
./configure --with-ns --without-x && make -j2 && make install
open nextstep/Emacs.app

~/desktop/emacs-24.2/nexstep に emacs.app がビルドされているので、Application フォルダーに移動して作業は完了です。


上記リストに従って 実際に Copy&Paste でターミナル上で作業してみて時間を計ってみました。手際よく作業すると約7分でしたので、普通でも10分程度でビルドできると思います。ビルド後のファイルサイズは、100.5MB でした。


M-x ns-toggle-fullscreen でフルスクリーンの on/off が可能です。もちろん、ウインドウの右上からでも大丈夫です。


コメントはお気軽に ( 0 )

Written by admin

12月 29th, 2012 at 12:00 pm

Posted in Emacs

Mac:Lion はメモリーを食う・・と言う話

without comments

Lion がメモリー食いだという噂は聞いていましたが、Mountain Lion はもっと大食いみたいです。


Lion から Snow Leopard にダウングレードした という記事に至っては、ほんと笑えない話ですよね。


ということで、ぼくは、OSX用のメモリー開放ユーティリティー使っています。FreeのToolがたくさん出回っているようで、あれこれ使ってみましたが、以下の物が一番よさげでした。無料版もありますが、85円払って有料版にされた方が幸せになれると思います(^_^)


初めて MacBook を買うとき、Air にするか Pro にするかで迷いました。メモリー増設が出来ない、HDDの換装も難しいという Air を嫌って Pro にしたのは正解だったかも・・・と今更ながら思っています。


最近では常識みたいですが、ぼくの MacBookPro は HDD を 255GB の SSD に換装し 16GB のメモリーを積んでいます。それでも、sleepを繰り返し、ごちゃごちゃしているとあっという間にメモリのFreeエリアが2GBくらいに減っていて驚くことがあります。


ま、あればあるだけ贅沢に使うということであって、実際は8GBあれば十分だと思うんですが、5,000円で16GBが買える時代なので奮発しました。元々使っていた8GBメモリーは、家内の Win7機に引っ越しました。


いづれにしてもこれから Air を買われる方は8GBは必須かも知れませんね。逆にメモリ2GBや4GBのマシンに Lion/Mountain Lion をいれるのはかなりストレスと思います。


コメントはお気軽に ( 0 )

Written by admin

12月 21st, 2012 at 10:00 am

Posted in Emacs

Mac:システム言語を英語にすると Illustrator が起動できない

without comments

Mac OS X Mountain-Lion は、Trackpad が便利につかえるので、基本的にマウスを使わない運用に移行しつつあります。


Lion から採用された Launchpad なども、システムの言語を英語にしておくとアプリを選択しやすいです。例えば Mail.app などでも [mai・・] とキー入力すれば絞り込めるので、そこで enter を押すとアプリを起動できます。言語が日本語になっていると、メール.app となっているのでマウスポインターを移動させてクリックということになりますよね。


ということで、基本的にシステムの言語は英語にしてあるのですが、Mac版の Illustrator を起動しようとすると「プラグイン読み込みエラー」がでてスムーズに起動できないし、メニューの日本語が ????? ???? という感じに文字化けします。あげくのはてに終了時にもエラーがでる始末。でも、言語を日本語に戻すとあっさり正常起動します。困り果ててググったら、対応 Tips ありました(^_^)v


参考にしたTips:http://d.hatena.ne.jp/sDaigo/20110225/1298597845


Language Switcher というToolを導入することで、Illustrator を起動するときだけ日本語で起動できるようになります。よかった(^_^)


コメントはお気軽に ( 0 )

Written by admin

12月 20th, 2012 at 9:05 am

Posted in Emacs

Emacs 画面分割・移動方法

without comments

Emacsのウインドウ操作については、下記が基本中の基本ですね。


カーソルのあるウィンドウを閉じる  C-x 0
他のウィンドウを全て閉じる     C-x 1
ウインドウを上下に分割       C-x 2
ウインドウを左右に分割       C-x 3
ウィンドウ間のカーソル移動     C-x o
ウィンドウ削除           C-x k


両手使いができない横着者のぼくは、以下のように設定しています。


;; カーソルのあるウィンドウを閉じる
(define-key global-map (kbd "M-0") 'delete-window)

;; 他のウィンドウを全て閉じる
(define-key global-map (kbd "M-1") 'delete-other-windows)

;; ウィンドウを上下に分割
(define-key global-map (kbd "M-2") 'split-window-vertically)

;; ウィンドウを左右に分割
(define-key global-map (kbd "M-3") 'split-window-horizontally)

;; ウィンドウ間のカーソル移動
(defun other-window-or-split ()
  (interactive)
  (when (one-window-p)
    (split-window-horizontally))
  (other-window 1))
(global-set-key (kbd "M-o") 'other-window-or-split)

;; ウインドウ削除
(global-set-key (kbd "M-/") 'kill-buffer)


コメントはお気軽に ( 0 )

Written by admin

12月 17th, 2012 at 12:42 pm

Posted in Emacs

tabbar.el 2.0 を導入してみた

without comments

以下のサイトを参考に導入し、自分好みに一部修正しました。


version 2.0 では、マウスを使った機能がいろいろ拡張されているようですが、ぼくは基本的にemacs でマウスは使わないのでその辺はカットしてます。



tabbar
(クリックで拡大します)

;;--------------------------------------------------------------------------------
;; tabbar
;; (install-elisp "http://www.emacswiki.org/emacs/download/tabbar.el")
;;--------------------------------------------------------------------------------
(require 'tabbar)
(tabbar-mode 1)

;; タブ上でマウスホイール操作無効
(tabbar-mwheel-mode -1)

;; グループ化しない
(setq tabbar-buffer-groups-function nil)

;; 左に表示されるボタンを無効化
(dolist (btn '(tabbar-buffer-home-button
               tabbar-scroll-left-button
               tabbar-scroll-right-button))
  (set btn (cons (cons "" nil)
                 (cons "" nil))))

;; ウインドウからはみ出たタブを省略して表示
(setq tabbar-auto-scroll-flag nil)

;; タブとタブの間の長さ
(setq tabbar-separator '(1.5))

;; 外観変更
(set-face-attribute
 'tabbar-default nil
 :family "Comic Sans MS"
 :background "black"
 :foreground "gray72"
 :height 1.0)
(set-face-attribute
 'tabbar-unselected nil
 :background "black"
 :foreground "grey72"
 :box nil)
(set-face-attribute
 'tabbar-selected nil
 :background "black"
 :foreground "#c82829"
 :box nil)
(set-face-attribute
 'tabbar-button nil
 :box nil)
(set-face-attribute
 'tabbar-separator nil
 :height 1.2)

;; タブに表示させるバッファの設定
(defvar my-tabbar-displayed-buffers
 '("scratch*" "*Messages*" "*Backtrace*" "*Colors*" "*Faces*" "*vc-")
  "*Regexps matches buffer names always included tabs.")
(defun my-tabbar-buffer-list ()
  "Return the list of buffers to show in tabs.
Exclude buffers whose name starts with a space or an asterisk.
The current buffer and buffers matches `my-tabbar-displayed-buffers'
are always included."
  (let* ((hides (list ?\  ?\*))
         (re (regexp-opt my-tabbar-displayed-buffers))
         (cur-buf (current-buffer))
         (tabs (delq nil
                     (mapcar (lambda (buf)
                               (let ((name (buffer-name buf)))
                                 (when (or (string-match re name)
                                           (not (memq (aref name 0) hides)))
                                   buf)))
                             (buffer-list)))))
    ;; Always include the current buffer.
    (if (memq cur-buf tabs)
        tabs
      (cons cur-buf tabs))))
(setq tabbar-buffer-list-function 'my-tabbar-buffer-list)

;; タブ移動キーバインド
(global-set-key (kbd "<M-right>") 'tabbar-forward-tab)
(global-set-key (kbd "<M-left>") 'tabbar-backward-tab)

;; タブモードのオン/オフをトグル
(global-set-key (kbd "M-4") 'tabbar-mode)

;; Sort tabbar buffers by name
(defun tabbar-add-tab (tabset object &amp;optional append_ignored)
 "Add to TABSET a tab with value OBJECT if there isn't one there yet.
 If the tab is added, it is added at the beginning of the tab list,
 unless the optional argument APPEND is non-nil, in which case it is
 added at the end."
  (let ((tabs (tabbar-tabs tabset)))
    (if (tabbar-get-tab object tabset)
        tabs
      (let ((tab (tabbar-make-tab object tabset)))
        (tabbar-set-template tabset nil)
        (set tabset (sort (cons tab tabs)
                          (lambda (a b) (string&lt; (buffer-name (car a)) (buffer-name (car b))))))))))
;;--------------------------------------------------------------------------------


コメントはお気軽に ( 0 )

Written by admin

12月 16th, 2012 at 6:04 pm

Posted in Emacs