スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Emacsのアイコンを作ってみた

 個人的な話しですが,Emacsのアイコンの色は青系より黒系が好みです.最初は既存のアイコンの色彩を調整したりしていたのですが,アイコンの作り方を検索してみると結構簡単にできそうだったので,試しに作ってみました.

 できた結果はこんな感じです.tarballを展開後,emacs-XX.X\nt\icons\emacs.icoを置き換えてコンパイルすると新しいアイコンの Emacsが出来上がります.
pict091205-001.png
一応,アイコンはここに置いておきます.

テーマ : UNIX/Linux
ジャンル : コンピュータ

NTEmacsにタブ機能をつける

 これまでバッファ切り替えに 「buffer-menu」や「bury-buffer」を使っていたのですが,Firefoxや InternetExplorer8などに付いているタブ機能になれてしまったせいか,大量のバッファを開いている場合,直感的に操作しずらいと思っていました.
 そこで,いっそのこと Emacsでもタブ機能をつけてしまえば良いと思い,調べてみたところtabbarというパッケージを見つけました.

 なお,これらの導入,設定にはEmacs をタブブラウザ化する (Vine Linux 4.2) - ChangeLogメモの抜粋を参考にさせていただきました.
 ただし,一部自分好みに変更しています.具体的には
  • 「 *」ではじまるバッファをタブ化しないところ,「 *scratch*」だけはタブ化するようにした
  • 左上に表示される各種ボタンを非表示にした
  • アクティブタブの文字の配色を赤にした
  • タブとタブの表示間隔を「0.7」から「0.5」に変更した
(require 'cl)
(require 'tabbar)

(setq tabbar-buffer-groups-function
      (lambda (b) (list "All Buffers")))
(setq tabbar-buffer-list-function
      (lambda ()
        (remove-if
         (lambda(buffer)
           (unless (string= (buffer-name buffer) "*scratch*")
             (find (aref (buffer-name buffer) 0) " *"))
           )
         (buffer-list))))
(tabbar-mode)

(setq tabbar-home-button-enabled "")
(setq tabbar-scroll-right-button-enabled "")
(setq tabbar-scroll-left-button-enabled "")
(setq tabbar-scroll-right-button-disabled "")
(setq tabbar-scroll-left-button-disabled "")

;(global-set-key [(control tab)] 'tabbar-forward)
;(global-set-key [(control shift tab)] 'tabbar-backward)

(dolist (func '(tabbar-mode tabbar-forward-tab tabbar-forward-group tabbar-backward-tab tabbar-backward-group))
  (autoload func "tabbar" "Tabs at the top of buffers and easy control-tab navigation"))
(defmacro defun-prefix-alt (name on-no-prefix on-prefix &optional do-always)
  `(defun ,name (arg)
     (interactive "P")
     ,do-always
     (if (equal nil arg)
         ,on-no-prefix
       ,on-prefix)))
(defun-prefix-alt shk-tabbar-next (tabbar-forward-tab) (tabbar-forward-group) (tabbar-mode 1))
(defun-prefix-alt shk-tabbar-prev (tabbar-backward-tab) (tabbar-backward-group) (tabbar-mode 1))
(global-set-key [(control tab)] 'shk-tabbar-next)
(global-set-key [(control shift tab)] 'shk-tabbar-prev)

(set-face-attribute 'tabbar-default-face nil :background "gray60")
(set-face-attribute 'tabbar-unselected-face nil :background "gray85" :foreground "gray30" :box nil)
(set-face-attribute 'tabbar-selected-face nil :background "#f2f2f6" :foreground "red" :box nil)
(set-face-attribute 'tabbar-button-face nil :box '(:line-width 1 :color "gray72" :style released-button))
(set-face-attribute 'tabbar-separator-face nil :height 0.5)

 画面イメージはこんな感じです.
pict091107-001.png

テーマ : UNIX/Linux
ジャンル : コンピュータ

ファイル書き込みのタイミングでNTEmacsがフリーズする?

 近頃,Dドライブに格納したファイルをNTEmacsで編集,保存すると,非常に高い確率で NTEmacsがフリーズします.この状態になるとタスクマネージャから強制プロセス停止しようとしても,まったく反応しなくなってしまい,Windowsのシャットダウンさえも正常に行えなくなってしまいます.
 ファイル保存のタイミングで発生しているので,なんとなく IO周りでストールしているような気がして,状況を切り分けてみた結果,どうやら「make-backup-files」を有効にしていることが直接の原因のようでした.想像の範囲ですが,以前設定したファイルの自動保存に加え,「auto-save-timeout」と「auto-save-interval」を極端に短くしたせいでIO周りが競合したんじゃないかなと考えています.

 ファイルの自動保存を使っていると意図しないタイミングで,あるいは気づかないうちにファイルが変更されてしまうのに対し,バックアップを取っておけば安心と考えたのですが,これではNTEmacsが使い物にならず,本末転倒なのでバックアップの設定は止めることにしました.

参考までに,バックアップは以下のような設定にしています(赤字部分が今回無効にしたところです)

;; 変更ファイルのバックアップ
(setq make-backup-files nil)

;; 変更ファイルの番号つきバックアップ
(setq version-control nil)

;; 編集中ファイルのバックアップ
(setq auto-save-list-file-name nil)
(setq auto-save-list-file-prefix nil)

;; 編集中ファイルのバックアップ先
(setq auto-save-file-name-transforms
      `((".*" ,temporary-file-directory t)))

;; 編集中ファイルのバックアップ間隔(秒)
(setq auto-save-timeout 3)

;; 編集中ファイルのバックアップ間隔(打鍵)
(setq auto-save-interval 5)

;; バックアップ世代数
(setq kept-old-versions 1)
(setq kept-new-versions 2)

;; 上書き時の警告表示
(setq trim-versions-without-asking nil)

;; 古いバックアップファイルの削除
(setq delete-old-versions t)

;;  バックアップ先
(setq backup-directory-alist
      (cons (cons "\\.*$" (expand-file-name myv-backup-dir-alist))
            backup-directory-alist))

テーマ : UNIX/Linux
ジャンル : コンピュータ

IMEの状態とカーソルカラーが時々食い違う

 NTEmacs23.1.1のIME設定のようにして,IMEの ON/OFFでカーソルカラーが変わるようにしていますが, 複数バッファを編集する際,IMEの状態が引き継がれないためカーソルカラーとIME状態に食い違いが出ていることに気づきました.  ということで,以下のようにしてIME状態を別のバッファでも引き継ぐように設定.
;; =====================================================================
;; @ IME
   ;; 言語設定
   (set-language-environment "Japanese")
   ;; IME設定
   (setq default-input-method "W32-IME")
   ;; IME初期化
   (w32-ime-initialize)
   ;; IME ON/OFF時のカーソルカラー
   (add-hook 'input-method-activate-hook
             (lambda() (set-cursor-color "green")))
   (add-hook 'input-method-inactivate-hook
             (lambda() (set-cursor-color "red")))
   ;; バッファ切り替え時にIME状態を引き継ぐ
   (setq w32-ime-buffer-switch-p nil)

ファイルの自動保存 ちょっと一工夫

 Emacs22の時には一度も体験したことなかったのですが,最近Emacs23を使っているとよくクラッシュします.メールの下書き,TODOや議事録などをEmacsで作成しているので,突然のクラッシュは思いのほかダメージが大きいです.
 コンパイルオプションやら,site-start.elをカスタマイズしたりとコンパイル方法を色々凝っていることが原因かもしれません.いずれにせよ,突然死によるデータロストはなんとしても避けたいので,何かよい方法がないか調べてみたところSatoru Takabayashiさんのページより,一定時間間隔で自動保存するというelisp(auto-save-buffers.el)が紹介されていました.
 ただし,この方法をそのまま適用すると,例えば閲覧目的だけでファイルオープンした設定ファイルを気づかないうちに編集してしまうかもしれません(人によってはあまり気にならないかもしれませんが,個人的にはちょっと問題なので…)

 そこでファイルオープンする時はどんなファイルでも read-onlyにして,編集したいときに意図的に編集可能に変更(toggle-read-only)することで上記の問題を解決してみました.
 ついでに C-xC-sはもう使わない(はずな)ので,toggle-read-onlyに割り当てています.
(require 'auto-save-buffers)
(run-with-idle-timer 0.5 t 'auto-save-buffers)

;; 常に読み込み専用でファイルをオープン
(add-hook 'find-file-hooks
          (lambda() (unless buffer-read-only (toggle-read-only) )) )

;; C-xC-sで読み込み専用ON/OFF
(global-set-key "\C-x\C-s" 'toggle-read-only)

テーマ : UNIX/Linux
ジャンル : コンピュータ

リンク
最新コメント
カテゴリー
最近の記事
月別アーカイブ
ブログ内検索
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。