2008-08-18 33 views
26

Tôi muốn lấy một ứng dụng hiện có (được viết bằng OCaml) và tạo một giao diện "Emac" cho nó (ví dụ như chế độ GDB Emacs). Tôi muốn làm điều này mà không cần viết một tấn mã Lisp. Trong các điều khoản MVC, tôi muốn cho View là Emacs, nhưng đối với Model và Controller vẫn giữ nguyên (chủ yếu) OCaml.Viết phần mở rộng Emacs bằng các ngôn ngữ khác ngoài Lisp

Có ai biết cách viết các phần mở rộng Emacs bằng ngôn ngữ khác ngoài ngôn ngữ Lisp không? Điều này có thể có dạng liên kết với API mở rộng Emacs bằng một số ngôn ngữ khác (ví dụ: làm OCaml là ngôn ngữ mở rộng Emacs hạng nhất) hoặc chế độ tương tác Emacs, ví dụ, phần mở rộng có một đường ống mà nó có thể viết Biểu thức Emacs Lisp và đọc các giá trị kết quả.

+0

Tôi khuyên bạn nên xem cách hoạt động của merlin, như được đề xuất bởi Erik Allik, ví dụ: https://github.com/the-lambda-church/merlin/blob/master/emacs/merlin.el#L430 bắt đầu quy trình và https://github.com/the-lambda-church/merlin/blob/ master/emacs/merlin.el # L631 gửi một lệnh đến tiến trình meram ocaml, với một trình xử lý async. – unhammer

Trả lời

4

Tôi không biết nếu điều này sẽ làm việc cho vấn đề cụ thể của bạn, nhưng tôi đã và đang làm một cái gì đó tương tự như sử dụng vỏ lệnh-to-chuỗi chức năng:

(shell-command-to-string 
    "bash -c \"script-to-exec args\"") 

Vì vậy, ví dụ, chúng tôi đã hiện hữu kịch bản được viết bằng python sẽ mangle một tập tin, do đó, ở trên cho phép tôi gọi kịch bản thông qua emacs lisp.

Tìm kiếm nhanh trên google found this page mô tả hệ thống để viết tiện ích mở rộng bằng Python, vì vậy có vẻ như khả thi để làm những gì bạn muốn ... bạn sẽ phải xem liệu có ai đã viết khung tương tự cho OCaml hay không.

13

http://www.emacswiki.org/cgi-bin/emacs-en?CategoryExtensionLanguage là danh sách tất cả các ngôn ngữ mở rộng không phải Elisp mà bạn có thể sử dụng.

Dường như đây là trung tâm ngôn ngữ động.

http://common-lisp.net/project/slime/ bị thiếu trong danh sách đó vì đây không phải là ngôn ngữ mở rộng, nhưng là cầu nối Lisp thường gặp. Mã nguồn của nó sẽ cho thấy làm thế nào để giao tiếp qua lại trên ổ cắm.

IDE tương tự cho Erlang là Distel, tại http://fresh.homeunix.net/~luke/distel/ (hiện xuống) và https://github.com/massemanet/distel.

Chúc may mắn!

0

Không có "API tiện ích mở rộng". Emacs Lisp là con đường trong đó, và nó không di chuyển.

Bạn có thể chạy các lệnh Emacs từ quá trình khác của bạn. Hãy xem Gnuserv.

Có rất nhiều ứng dụng mà Emacs là Chế độ xem cho Mô hình/Bộ điều khiển trong một quy trình riêng biệt. Giao diện GDM Emacs là một ví dụ tốt. Tôi không chắc chắn về một ví dụ đơn giản hơn, có lẽ sql-postgresql?

3

Hãy thử PyMacs, cho phép mở rộng Emacs bằng Python.

chỉnh sửa: liên kết được cập nhật.

+0

Liên kết chết, điều đó không hữu ích – Anthon

2

Từ các ngôn ngữ phía tĩnh đánh máy, có cái gì đó trông khá performant và cũng đặc trưng cho Haskell:

https://github.com/knupfer/haskell-emacs

cũng có lẽ là một cái gì đó hữu ích cho Scala được tái sử dụng từ dự án Ensime (có một cây cầu cho cả Emacs và Vim):

https://github.com/ensime/ensime-server

Bên cạnh đó, một tìm kiếm google nhanh chóng tiết lộ một ứng cử viên tiềm năng cho việc mở rộng E mac với ngôn ngữ FP cổ điển, OCaml; dự án có rất nhiều .ml file nguồn do đó là đã nhận được một cầu Emacs-OCaml ở đâu đó:

https://github.com/the-lambda-church/merlin

2

Một số mở rộng Api bây giờ có thể với emacs đến 25,1 và mô-đun năng động

Một Thư viện , emacs-ffi cung cấp giao diện chức năng nước ngoài dựa trên libffi.

Xem tài liệu hoàn chỉnh trên README.

Các vấn đề liên quan