Mac上で仮想化したLinuxのEmacsでcommandキーをメタキーとして使う

Mac上のEmacsでcommandキーをメタキーとして使う方法は、こちらのサイトなどで紹介されていますが、ここではMac上で仮想化したLinuxでcommandキーをメタキーとして使う方法を紹介したいと思います。
commandキーはLinuxからはsuperキーとして認識されるので、x-super-keysymという変数の値を変更することによって、commandキーの挙動を変更することができます。

次のようなelispスクリプト.emacs.elに追加することで、Macと仮想化したLinuxの両方でcommandキーとoptionキーを入れ替えることができます。

(defun mac-window-system-p ()
  (or (eq window-system 'mac) (eq window-system 'ns)))
(defun x-window-system-p ()
  (eq window-system 'x))

(defun swap-meta-and-super-on-mac ()
  (setq ns-command-modifier   'meta)
  (setq ns-alternate-modifier 'super))
(defun swap-meta-and-super-on-x ()
  (setq x-super-keysym 'meta)
  (setq x-meta-keysym  'super)
  )
(defun reset-meta-and-super-on-mac ()
  (setq ns-command-modifier   'super)
  (setq ns-alternate-modifier 'meta))
(defun reset-meta-and-super-on-x ()
  (setq x-super-keysym nil)
  (setq x-meta-keysym  nil)
  )

(defun swap-meta-and-super ()
  (interactive)
  (cond
   ((mac-window-system-p) (swap-meta-and-super-on-mac))
   ((x-window-system-p)   (swap-meta-and-super-on-x))
   ))
(defun reset-meta-and-super ()
  (interactive)
  (cond
   ((mac-window-system-p) (reset-meta-and-super-on-mac))	
   ((x-window-system-p)   (reset-meta-and-super-on-x))
   ))

(swap-meta-and-super)

ただし、MacVirtualBoxでは、デフォルトのホストキーが左commandキーになっており、そのままでは仮想化したLinux上では左commandキーを認識しません。これはVirtualBoxの設定を変更してホストキーを他のキー(右commandキーなど)に変更することで解決することができます。