Mac

mac⌘英かな.appをEmacs専用に使う

macのkeyboard customizerとしては、 Karabiner-Element が有名ですが、Emacs専用として使うなら ⌘英かな.app が超簡単でおすすめです。

コンセプト

通常は、他のキーと組み合わせて機能させる修飾キー、Command_L command_R Option_L Fn かな は単独では何も仕事をしません。そこで、⌘英かな.appを使ってEmacsのキーバインドを割り当てようというものです。

比較的頻繁に操作するキーバインドを以下のように設定すればワンキー操作で動きます。いづれもFunctionキーに割り当てるという発想もありますが、手近な修飾キーを利用することでより便利に操作できます。

キーリマップ

key remap command
Command_L C-g keyboard-quit
Command_R s-m mozc-temp-convert
Option_L s-n neo-tree-toggle
Fn C-j emmet-expand-line
かな s-j toggle-input-method

設定法

Hide .DS_Store file from Emacs

.DS_StoreファイルをMacから削除する…というTipsは山ほどあるのですが、いづれもいつの間にかまた復活してしまいます。なので私の場合は、Emacsの各シーンで非表示になるように設定しています。

counsel

(setq counsel-find-file-ignore-regexp (regexp-opt '(".DS_Store")))

dired

;; omit .DS_Store
(require 'dired-x)
(setq-default dired-omit-files-p t)
(setq dired-omit-files "^\\.DS_Store")

neotree

;; Patched to allow everything but .DS_Store
;; Tips from https://github.com/syl20bnr/spacemacs/issues/2751
(with-eval-after-load 'neotree
  (defun neo-util--walk-dir (path)
    "Return the subdirectories and subfiles of the PATH."
    (let* ((full-path (neo-path--file-truename path)))
      (condition-case nil
	  (directory-files
	   path 'full "^\\([^.]\\|\\.[^D.][^S]\\).*")
	('file-error
	 (message "Walk directory %S failed." path)
	 nil)))))

Macにe2psをインストールする

WtSeries : UNIXソフトからe2psをダウンロードして解凍します。 現在の最新バージョンは、e2ps-4.34

解凍フォルダー内のps-font.cをエディタで開き、14~53行の行末にバックスラッシュを追加します。

char *gsFonts = "Times-Roman\
Times-Italic\
Times-Bold\
Times-BoldItalic\
Helvetica\
Helvetica-Oblique\
Helvetica-Bold\
Helvetica-BoldOblique\
Courier\
Courier-Oblique\
Courier-Bold\
Courier-BoldOblique\
Symbol\
AvantGarde-Book\
AvantGarde_BookOblique\
AvantGarde_Demi\
AvantGarde_DemiOblique\
Bookman-Light\
Bookman-LightItalic\
Bookman-Demi\
Bookman-DemiItalic\
Helvetica-Narrow\
Helvetica-Narrow-Oblique\
Helvetica-Narrow-Bold\
Helvetica-Narrow-BoldObliqeu\
NewCenturySchlbl-Roman\
NewCenturySchlbl-Italic\
NewCenturySchlbl-Bold\
NewCenturySchlbl-BoldItalic\
Palatino-Roman\
Palatino-Italic\
Palatino-Bold\
Palatino-BoldItalic\
Zapfchancery-MediumItalic\
ZapfDingbats\
Ryumin-Light.Hiragana\
Ryumin-Light.Katakana\
Gothic-Meduim.Hiragana\
Gothic-Medium.Katakana\
";

terminalで解凍フォルダー内に移動します。

cd e2ps-4.34

続いて以下のようにmakeします。

make
sudo make install

/usr/local/bin に e2ps と e2lpr がインストールされていたら成功です。

iPadでBootstrapのnavbarをcollapseさせる

CSSフレームワークのBootstrapを使って、ナビゲーション(navbar)を導入する場合、Bootstrapのデフォルトだと、iPadでnavbarがcollapseしてくれません。メニュー項目が多くなってくると、collapseしてくれないとレイアウト崩れが起きるので対策しました。

iPadでBootstrapのnavbarをcollapseさせるには、CSSに下記のコードを追加すればOKです。

/* navbar collapse for iPad (bootstrap) */
@media (max-width: 991px) {
    .navbar-header {
        float: none;
    }
    .navbar-toggle {
        display: block;
    }
    .navbar-collapse {
        border-top: 1px solid transparent;
        box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
    }
    .navbar-collapse.collapse {
        display: none!important;
    }
    .navbar-nav {
        float: none!important;
        margin: 7.5px -15px;
    }
    .navbar-nav>li {
        float: none;
    }
    .navbar-nav>li>a {
        padding-top: 10px;
        padding-bottom: 10px;
    }
    .navbar-text {
        float: none;
        margin: 15px 0;
    }
    .navbar-collapse.collapse.in {
        display: block!important;
    }
    .collapsing {
        overflow: hidden!important;
    }
}

参考サイト

Macの 'too many open file' エラーを解消する方法

MacでEmacsを起動しているときに 'too many open file' と出て固まってしまうことがありました。

別環境のDebianで起動しているEmacsでは、そうした現象もないので、Mac固有の問題だと考えて情報を収集していたら、 以下のTipsを見つけました。

以下、内容的には重複しますが備忘録として残しておきます。

Macの上限値を調べる

ターミナルでコマンドを打って現在の上限数を確認。 私の場合は、以下の表示でした。

$ sudo launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     1418           2128
    maxfiles    256            unlimited

maxfilesが 256 になっているのが確認できました。

設定ファイルを作る

/Library/LaunchDaemons/limit.maxfiles.plist に設定ファイルを作成する。

初期では、当該ファイルはないので新規に作成します。

$sudo vi /Library/LaunchDaemons/limit.maxfiles.plist

vi が開かれたら以下のようにペーストします。

limit.maxfiles.plist
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">  
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>524288</string>
      <string>524288</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

plistファイルを読み込んで適用させる。

$ sudo launchctl load -w /Library/LaunchDaemons/limit.maxfiles.plist

適用されたことを確認する

$ sudo launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        unlimited      unlimited
    stack       8388608        67104768
    core        0              unlimited
    rss         unlimited      unlimited
    memlock     unlimited      unlimited
    maxproc     1418           2128
    maxfiles    524288         524288

maxfilesが 524288 に増えていることが確認できました。

macOS SierraでSIPを無効にする方法

Sierraには、SIP(System Integrity Protecton)というセキュリティを強化機能が追加されていて、sudoを使ってもシステム用とされる/usr等のディレクトリに変更を加えられないようになっていて、開発環境の構築になにかと不都合です。

そこでSIPを無効にすることにしました。

1.リカバリーモードで起動する

command + r を押したままMacを起動させます。

2.ターミナルを起動

再起動後いつもとは違う画面となっていますが、ビックリしないでください。

画面上の選択のユーティリティーからターミナルを起動します。

Alt Text

3.SIPコマンドを打ち込む

立ち上げたターミナルに以下を打ち込み、enterを押す。

csrutil disable

Alt Text

上図のように、

Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.

と返ってくれば成功です。Appleメニューから「再起動」を選んで再起動すると,SIPが無効化された状態で起動します。

4.SIPを有効に戻す

SIPが無効の状態で行う必要な作業が終わったら、元に戻しておきましょう。

同じ手順でターミナルを立ち上げて、csrutil enable と打ち込むだけです。

ちなみに私は無効のままにしています。

SierraでIllustrator(CS3~6)のエラーを回避する方法

macOSをSierraにバージョンアップすると、せっかく構築した開発環境にいろいろ障害が出そうなので、ずっとMarvericsで頑張っていましたが、iTunesなどのバージョンアップについていけなくなったので、やむなくSierraに移行しました。

Javaランタイムエラーを回避する方法

Sierraにアップグレードした状態で、Illustrator(CS3~6)を起動させると、次のようなエラーメッセージが出ます。

Alt Text

原因は、Appleが、El Capitan以降でJava 6のサポートを終了する。

とのことで、Sierra(10.12)では、CSシリーズを起動することができなくなったというわけです。

Javaチェックの実態

エラーがでるのは、起動時に以下のJava6の2つのディレクトリの有無をチェックしているからだとのことです。

  • /System/Library/Java/JavaVirtualMachines/1.6.0.jdk
  • /System/Library/Java/Support/Deploy.bundle

ところが実際には、Java6は使っていないそうです。 ということは、Java6の2つのディレクトリさえ存在していれば、実際にJava6がインストールされてなくても、Adobe CSシリーズは動作するということになります。

SierraにJava6のデレクトリを作成する方法

実は、Sieeraの問題点はここからです。

EI Capitan以後に採用された、System Integrity Protection(SIP)による制約のために、管理者権限をもってしても、/System/Library 下に任意のデレクトリを新規作成することができません。

そこで、一時的にSIPを無効にし、当該ディレクトリを作成した後に、再びSIPを有効にする必要があります。

macOS SierraでSIPを無効にする方法

上記によりSIPを無効化して再起動し、改めてターミナルを起動します。ターミナルに以下のように入力して実行します。

sudo mkdir -p /System/Library/Java/JavaVirtualMachines/1.6.0.jdk /System/Library/Java/Support/Deploy.bundle

非常に長いコマンドなので、右端の、Deploy.bundleまで確実にコピーしてください。

管理者パスワードを要求されるので入力します。

これで、Illustrator/Photoshop が起動できると思います。

Illustrator CS4のプラグイン読み込みエラーを回避する方法

私の場合、Illustrator CS4を起動したところ「プラグインの読み込みエラーです。PhotoshopImport.aip」とでます。

いろいろググって試しましたが解決せず、最終的に下記サイトにある、Yosemite.AICS4.Fix.mpkg.zipをDownloadし、インストールすることで解決しました。

https://github.com/ralvarezt/aics4_yosemite_fix/releases

Yosemite対応のようですが、Sierra でも大丈夫でした。

UpFtpをMacとLinuxとで共用する方法

UpFtpと言うのは、結城浩さんの作られたMakeWebと併せて使うためのFTP自動化ツールのことです。

  • Makeweb:テキストをXHTMLに変換するPerlスクリプト
  • UpFtp:ホームページ更新用Perlスクリプト

これらのツールを使えば、MakeWeb記法(Markdown記法のような書式)で書いた、index.txtをMakeWebでコンパイルしてindex.htmlを生成させ、UpFtpでサーバーに送って更新する…という手順を下記のように makefileに書き、make -k するだけで自動処理されます。

makefile

target = index.html
a.out:all
all: $(target)

.SUFFIXES: .txt .html
.txt.html:
	perl ~/Dropbox/Web/GH/mw/makeweb.pl $< $@ # index.txt to index.html
	perl ~/Dropbox/Web/GH/upftp/upftp.pl 

異なる環境でデータを共有するのはDropboxが便利

Dropboxは、Windows/Linux/macOSとマルチ環境で使えるので、WEB構築の元データを複数端末で共有するのには一番適している。同期速度などの点でも他のクラウドと比較して一番早い。

ぼくの場合は、どの環境もユーザーフォルダの直下にDropboxをインストールしているので、以下のようPATH構成になる。

  • Windows C:\Users/minoru/Dropbox
  • Lnux /home/minoru/Dropbox
  • Mac /Users/minoru/Dropbox

Makefileの場合は、~/Dropboxと書くことで認識してくれるので容易に共用設定が書けるが、UpFtpの設定ファイルの場合は、以下のようにフルパスを書く必要があるので工夫が必要となる。

# Local root directory (in fullpath)
my $localrootdir = "";
# File list (in fullpath)
my $filelist = "";

ユーザフォルダーを変数で取得

フルパスを直書きするとマルチ環境で共用できないので、変数を取得してそれを共通で使えるようにします。

Mac/Linuxの場合

MacもLinuxも同じUNIXなので以下の方法でユーザーフォルダのPATHを取得できる。

$home = $ENV{"HOME"}
$home = %USERPROFILE%

Mac/Linux共用の設定

私の場合は、以下のように書くことでうまく動いている。

# Get HOME directory from environment variables
my $home = $ENV{"HOME"};
# Local root directory (in fullpath)
my $localrootdir = "$home/Dropbox/Web/GH";
# File list (in fullpath)
my $filelist = "$home/Dropbox/Web/GH/upftp/filelist.txt";

Windows/Mac(Linux)共用の設定

ここからは確認できていないので無責任になるけれども、OSを判別する特殊変数を使って分岐させる必要がある。

mozc_emacs_helper on macOS Sierra

macOS Sierra をクリーンインストールしたので mozc_emacs_helper を使えるようにした。google日本語入力と連携できるようにビルドできるという以下のサイトの Tips を参考にしたが、ちょっと解りにくかったので備忘録として整理しておく。

準備

Xcodeが必要と言うことだけどコマンドラインツールのみで大丈夫だった。

xcode-select --install

ninja が要るらしいので homebrew でインストールしておく。

brew install ninja

mozc をダウンロードする

作業ディレクトリはどこでもいいが、僕は基本的にdesktopで作業することが多い。

cd desktop
git clone https://github.com/google/mozc.git -b master --single-branch --recursive

Mac の google日本語入力と連携させるためにソースを修正

以下のファイルを作ってパッチをかけてもいいが、簡単なのでぼくは直接修正した。

diff --git a/src/build_mozc.py b/src/build_mozc.py
index a56aaaf..d419f49 100644
--- a/src/build_mozc.py
+++ b/src/build_mozc.py
@@ -167,6 +167,8 @@ def GetGypFileNames(options):
   # Include subdirectory of win32 and breakpad for Windows
   if options.target_platform == 'Windows':
     gyp_file_names.extend(glob.glob('%s/win32/*/*.gyp' % SRC_DIR))
+  elif options.target_platform == 'Mac':
+    gyp_file_names.extend(glob.glob('%s/unix/emacs/*.gyp' % SRC_DIR))
   elif options.target_platform == 'Linux':
     gyp_file_names.extend(glob.glob('%s/unix/*/*.gyp' % SRC_DIR))
     # Add ibus.gyp if ibus version is >=1.4.1.
diff --git a/src/mac/mac.gyp b/src/mac/mac.gyp
index 76b540d..2ee4006 100644
--- a/src/mac/mac.gyp
+++ b/src/mac/mac.gyp
@@ -586,7 +586,6 @@
             ['branding=="GoogleJapaneseInput"', {
               'dependencies': [
                 'DevConfirmPane',
-                'codesign_client',
               ],
             }],
           ],
           

コンパイル

cd mozc/src
GYP_DEFINES="mac_sdk=10.12 mac_deployment_target=10.12" python build_mozc.py gyp --noqt --branding=GoogleJapaneseInput
$ python build_mozc.py build -c Release unix/emacs/emacs.gyp:mozc_emacs_helper

動作確認

以下のように表示されれば成功!