[Macemacsjp-users 860] mac-key-mode.el with multibyte file/directory name

Back to archive index

Nozomu Ando nand****@mac*****
2005年 12月 29日 (木) 15:29:53 JST


mac-key-mode.el に関してですが、私の環境は英語環境だから、ということも
あるのだと思いますが、マルチバイト文字を含むファイル名/ディレクトリ名に
関してうまく動かないようです。

というわけで、mac-key-show-in-finder と mac-key-open-terminal に関して
改変してみました。CVS HEAD へのパッチを添付します。

変更点は:

ファイル名を do-applescript に渡す時に <<data utf8xxxx>> as Unicode text
の形式で渡す (<< >> は実際には mac-roman の ?\307 ?\310 で、
xxxx は utf-8 の文字列のの16進表現)

mac-key-open-terminal で " や $ などがディレクトリ名に含まれていた
場合、そのまま do script with command に渡すのはまずいので、
quoted form of を使う。

buffer-file-name には ~/ が含まれている可能性があるので、
expand-file-name するようにする

というようなところです。

参考になりましたら幸いです。

Nozomu Ando


*** mac-key-mode.el	17 Dec 2005 23:50:13 +0900	1.9
--- mac-key-mode.el	29 Dec 2005 15:03:21 +0900	
***************
*** 206,211 ****
--- 206,217 ----
  
  ;; Show In Finder
  
+ (defun mac-key-applescript-utf8data (str)
+   (concat "\307data utf8"
+ 	  (mapconcat (lambda (ch) (format "%02X" ch))
+ 		     (encode-coding-string str 'utf-8) "")
+ 	  "\310"))
+ 
  (defun mac-key-show-in-finder ()
    "Document forthcoming..."
    (interactive)
***************
*** 243,255 ****
        (condition-case err
            (progn
              (do-applescript
!              (format "tell application \"Finder\" to select (\"%s\" as POSIX file)"
!                      (if (eq selection-coding-system 'sjis-mac)
!                          (replace-regexp-in-string
!                           "\\\\" "\\\\\\\\"
!                           (encode-coding-string file selection-coding-system))
!                        (encode-coding-string file selection-coding-system))
!                      ))
              (if mac-key-smartactivate-command
                  (shell-command
                   (concat mac-key-smartactivate-command
--- 249,258 ----
        (condition-case err
            (progn
              (do-applescript
!              (concat
! 	      "tell application \"Finder\" to select (("
! 	      (mac-key-applescript-utf8data (expand-file-name file))
! 	      " as Unicode text) as POSIX file)"))
              (if mac-key-smartactivate-command
                  (shell-command
                   (concat mac-key-smartactivate-command
***************
*** 293,300 ****
          (condition-case err
              (progn
                (do-applescript
!                (format "tell application \"Terminal\" to do script with command \"cd %s\"" dir))
!               (if mac-key-smartactivate-command
                    (shell-command
                     (concat mac-key-smartactivate-command
                             " -i com.apple.Terminal"))
--- 296,306 ----
          (condition-case err
              (progn
                (do-applescript
!                (concat "tell application \"Terminal\" to do script"
! 		       " with command \"cd \" & quoted form of ("
! 		       (mac-key-applescript-utf8data (expand-file-name dir))
! 		       " as Unicode text)"))
! 	      (if mac-key-smartactivate-command
                    (shell-command
                     (concat mac-key-smartactivate-command
                             " -i com.apple.Terminal"))



Macemacsjp-users メーリングリストの案内
Back to archive index