2014-12-06 9 views
0

Mathematica 10에서 Emacs에서 mathematica.el을 성공적으로 사용하고 있습니다. 그러나 문자 인코딩과 관련하여 Mathematica 표현식에서 mathematica-execute를 호출하면 많은^M 문자가 결과로 출력됩니다. OS X Mavericks에서 모든 프로세스를 실행하고 있습니다.) 처음에는 매쓰 매 티카의 $ CharacterEncoding이 파일과 일치하고 Emacs의 인코딩 과정을 최대한 잘 사용하고 있는지 확인했습니다 : utf-8. 여전히 문제가있을 수 있지만 그 경로는 해결책을 찾지 못했습니다. 다음으로 mathematica-execute를 호출하고 결과 출력에서 ​​^ M 문자를 제거하는 자체 함수를 작성하지 않는 것이 좋습니다. 다음은 관련 코드입니다.Emacs, mathematica.el 및 Mathematica 10에서 문자 인코딩 문제를 해결하는 방법은 무엇입니까?

(defun delete-to-out() 
    (next-line) 
    (set-mark-command nil) 
    (search-forward "]=") 
    (previous-line) 
    (delete-region (region-beginning) (region-end))) 

(defun remove-^M() 
    "Get rid of ^M characters" 
    (interactive) 
    (message "remove-^M called!") 
    (save-excursion 
    (goto-char (point-min)) 
    (while (re-search-forward "\r" nil t) 
     (replace-match "")))) 

(defun my-mathematica-execute (arg) 
    "Call mathematica-execute and then clean out the ^M characters 
    it inserts by calling remove-^M" 
    (interactive "P") 
    (save-excursion 
    (mathematica-execute arg) 
    (remove-^M) 
    ;; (delete-to-out) 
    )) 

;;; Define some mathematica mode keyboard bindings 
(if mathematica-mode-map 
    (progn 
     (define-key mathematica-mode-map [remap mathematica-execute] 
     'my-mathematica-execute) 
     (define-key mathematica-mode-map (kbd "C-c m") 
     'remove-^M))) 

my-mathematica-execute를 호출해도 작동하지만^M 문자는 제거되지 않습니다. remove-^M 또는 delete-to-out을 호출하면 이후에는 격리되어 작동합니다. 동기화 문제 또는 타이밍 문제 일 수 있습니까? 어떤 도움을 주시면 감사하겠습니다. 대안 솔루션은 확실히 환영합니다.

답변

1

^M은 실제로 디코딩 문제처럼 보이지만 문자 인코딩이 아니라 EOL 인코딩입니다. 둘 다 보통 Emacs에서 함께 지정되므로 utf-8 대신 어쨌든 utf-8-dos을 사용해야합니다.

+0

@Stefan에게 제안 해 주셔서 감사합니다. 나는 네가 그랬던 것처럼 생각했지만, 그렇지 않다는 것을 알았다. Mathematica는 utf-8을 Emacs로 사용하고 있습니다. (필자가 말할 수있는 한) Emacs이며, 터미널, 키보드, 파일, 프로세스 및 기타 다른 상황을 통해 인코딩을 설정할 수 있습니다.). – Joe

+0

저는 mathematica 프로세스 출력을위한 프로세스 필터로 설정되는 mathematica-filter라는 함수를 해킹 할 적절한 장소를 찾을 수있었습니다. 거기에 replace-regexp-in-string 호출을 삽입하여 모든 \ r 문자를 제거했습니다. 그거야. 이제는 약간 조정할 것입니다 : 결과는 출력과 함께 현재 입력을 울려 퍼지고 싶지 않을 수 있습니다. 전형적으로 그것은 기본 쉘이 반향하기 때문입니다 (Mathematica가 쉘에서 실행 중이기 때문에, zsh). 적어도 내가 원하는대로 출력 스트림을 조작 할 수있는 엔트리 포인트가 있습니다. ... – Joe

+0

잘만되면 누군가가 따라 와서 Emacs와 zsh가 함께 작업하여 입력 음을 멈추게 할 수있는 방법을 말해 주겠지 만 그것은 아마도 다른 질문 일 수 있습니다. 도움을 주셔서 다시 한 번 감사드립니다. – Joe