Câu hỏi Làm thế nào để khởi chạy GUI Emacs từ dòng lệnh trong OSX?


Làm cách nào để khởi chạy GUI Emacs từ dòng lệnh trong OSX?

Tôi đã tải xuống và cài đặt Emacs từ http://emacsformacosx.com/.

Tôi sẽ chấp nhận câu trả lời đáp ứng tất cả các tiêu chí sau:

  1. Cửa sổ emacs mở ra ở đằng trước cửa sổ đầu cuối của tôi.
  2. Nhập "emacs" sẽ khởi chạy cửa sổ GUI Emacs. Tìm tệp trong cửa sổ đó sẽ mặc định để tìm trong thư mục từ nơi tôi bắt đầu Emacs.
  3. Nhập "emacs foo.txt" khi foo.txt tồn tại khởi chạy cửa sổ GUI Emacs với foo.txt được tải.
  4. Nhập "emacs foo.txt" khi foo.txt thực hiện không phải tồn tại khởi chạy một cửa sổ GUI Emacs với một bộ đệm văn bản trống có tên là "foo.txt". Làm ^ X ^ S trong bộ đệm đó sẽ lưu foo.txt trong thư mục từ nơi tôi bắt đầu Emacs.

76
2018-04-16 09:02


gốc


Tiêu chí nào không được đáp ứng bằng cách nhập 'emacs' tại dấu nhắc thiết bị đầu cuối? Yêu cầu của bạn mô tả hành vi mặc định trên Linux. Tôi đã không được sử dụng một máy Mac trong một thời gian, nhưng tôi nghĩ rằng các trick đã được chỉ là tìm đúng chương trình để thực hiện - emacs.app có thể? - Tyler
Tyler, đến từ một nền tảng Linux, tôi luôn ở bên bạn; chỉ cần gõ "emacs" tại dấu nhắc là tất cả những gì tôi cần làm. Làm điều đó trên OSX khởi chạy chế độ văn bản Emacs trong cửa sổ terminal tuy nhiên (do đó không đạt tiêu chuẩn 1), và đó không phải là những gì tôi muốn. - Johan Walles
Johan - bạn đã tìm thấy một giải pháp trong khi chờ đợi? Tôi đang đấu tranh với những vấn đề tương tự và suy nghĩ về việc bắt đầu một tiền thưởng. Đặc biệt là gây phiền nhiễu là gọi emacs (và không phải là Emacs.app) từ dòng lệnh sẽ mở ra một cửa sổ trong nền ... - alexurba
@alexurba, không, không có câu trả lời: (Tôi là loại được sử dụng để các hành vi bị hỏng mặc dù ... Tại sao mọi người tiếp tục upvoting câu trả lời sai dưới đây cũng là một bí ẩn. - Johan Walles
Tôi không biết liệu nó có hoạt động trên OSX hay không nhưng bạn có thể thử: emacsclient -c -a "" "$@" chỉ huy - jfs


Các câu trả lời:


Gọi tập lệnh sau "emacs" và đặt nó vào PATH một vài nơi:

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@"

Điều đó bao gồm # 2, # 3 và # 4.

Đối với # 1, hãy đặt cái này ở đâu đó trong tệp .emacs của bạn:

(x-focus-frame nil)

Các emacsformacosx.com trang web hiện có Trang hướng dẫn, là nơi đoạn trích hàng đầu đến từ. Có thêm thông tin về việc chạy emacsclient và hooking Emacs lên đến git mergetool.


102
2018-05-29 09:20



Cảm ơn David, bạn cai trị! - Johan Walles
Hoạt động tuyệt vời. Tiền thưởng sắp tới. - Thom Blake
Cảm ơn - Làm việc cho tôi cũng! - ktdh
Cảm ơn rất nhiều: D - Tony Han
Trên Mavericks nếu tôi ở trong thư mục ~/foo và muốn mở bar.txt Tôi gõ gmacs bar.txt nhưng nó tạo ra một tập tin mới tại ~/bar.txt thay vì mở ~foo/bar.txt. Tôi có làm điều gì sai? - Daniel Compton


Trong trình bao của bạn, hãy đặt bí danh lệnh 'emacs' để trỏ tới ứng dụng emac OSX

Trong trình bao của tôi (chạy bash mặc định), tôi có phần sau (trong .bashrc của tôi)

alias emacs='open -a /Applications/Emacs.app $1'

Sau đó, gõ các emacs trên dòng lệnh bắt đầu ứng dụng emacs.

Tuy nhiên, tôi khuyên bạn nên mở một bản sao của các emac và chỉ giữ nó và chạy. Nếu trường hợp đó xảy ra và bạn muốn tải một tệp vào một bản sao hiện tại của các emacs, bạn có thể sử dụng các emacsclient bằng cách đặt như sau trong .bashrc của bạn:

alias ec='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'

Sau đó, thêm phần sau vào tệp .emacs của bạn để khởi động máy chủ emacs (nhận các cuộc gọi emacsclient)

;;========================================
;; start the emacsserver that listens to emacsclient
(server-start)

Sau đó, bạn có thể nhập

ec .bashrc

tải bản sao .bashrc vào phiên emacs hiện tại!


68
2018-04-16 17:31



Xin chào Chris! Câu trả lời đầu tiên của bạn không đạt tiêu chuẩn 2 và 4. Câu trả lời thứ hai của bạn không đạt tiêu chuẩn 2. Tôi đang tìm một giải pháp đáp ứng tất cả các tiêu chí đánh số. Trân trọng / Johan - Johan Walles
Dường như tất cả các vấn đề của bạn có thể được giải quyết nếu bạn chỉ sử dụng các emacs để tải các tệp, thay vì dựa vào dòng lệnh để khởi chạy một cá thể mới mỗi lần. Tôi thường bắt đầu các emacs vào đầu ngày của tôi (nếu nó vẫn không chạy), và sử dụng nó để tải các tập tin, thay đổi thư mục, tạo các tập tin mới và bất cứ thứ gì tôi muốn mà không cần chạm vào cửa sổ đầu cuối. - Chris McMahan
Tôi phải nói, có một số câu hỏi trên trang web này đối phó với câu hỏi này, nhưng đây là câu hỏi duy nhất giải quyết được hoàn toàn vấn đề của việc mở một tệp, theo cách thức hùng biện ngắn. - tylerthemiler
@tylerthemiler, câu trả lời hoàn toàn giải quyết vấn đề ở đâu? Cả hai câu trả lời trong câu trả lời này đều thất bại tiêu chí 2 và câu trả lời đầu tiên cũng thất bại 4. - Johan Walles
Một chút khéo léo đi một chặng đường dài trong việc trả lời một câu hỏi. Vì vậy, một chút Googling. - duma


Điều này cải thiện Câu trả lời của David Caldwell bằng cách bắt đầu Emacs trong nền:

#!/bin/sh
$(/Applications/Emacs.app/Contents/MacOS/Emacs "$@") &

Như đã nêu trong câu trả lời khác, điều này bao gồm # 2, # 3 và # 4. Đối với # 1, hãy đặt cái này ở đâu đó trong tệp .emacs của bạn: (x-focus-frame nil).

Lưu ý rằng những điều sau đây không phải làm việc cho tôi - nó không khởi động Emacs trong một thư mục được chỉ định trên dòng lệnh (ví dụ: emacs .)

# NOT RECOMMENDED
#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" &

8
2017-10-25 18:17



Điều này khắc phục sự cố với OSX (có thể bắt đầu với 10,9 Mavericks). Kể từ 10.9, phương pháp "không được đề xuất" không thành công, khi tối thiểu là 10.6, không được khuyến nghị đã đồng bộ hóa trình bao $ PWD và Emacs (pwd). Câu trả lời của David có thể là ở nơi khác, nhưng làm thế nào để bạn có được công cụ tìm kiếm để hiểu: "pwd không pwd"? - infogizmo


Trên sư tử núi, tôi đang sử dụng cổng của Yamamoto Mitsuharu https://github.com/railwaycat/emacs-mac-port với bí danh sau:

alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs

và nó đáp ứng tất cả các tiêu chí của bạn.


4
2018-05-05 03:41





Tiếp tục cải thiện về phản ứng của David James những công trình sau đây cho tôi:

Theo hướng dẫn để mở tệp từ thiết bị đầu cuối được tìm thấy tại http://www.emacswiki.org/emacs/EmacsForMacOS#toc20

open -a /Applications/Emacs.app <file-name>

kết hợp điều này với phản ứng của David Jame tôi đã tạo ra những điều sau đây emax bash script và đặt nó vào con đường của tôi tại ~ / bin

#!/bin/bash
(open -a /Applications/Emacs.app "$@") &

Nhớ lại: để nhận được các emacs để mở thư mục hiện tại Bị sa thải theo tên chế độ, bạn cần sử dụng

emax .

Môi trường:

  • OS X Yosemite Phiên bản 10.10.2
  • GNU Emacs 24.4.2 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14) của 2014-11-13

4
2018-03-27 00:38





Tôi giả sử bạn:

  • Bắt đầu daemon emacs khi đăng nhập
  • Có (máy chủ bắt đầu) trong các tệp .emac của bạn
  • Đừng bận tâm khi có nhiều bản sao riêng biệt của các emacs đang chạy

Nếu có, thì tôi nghĩ điều này thỏa mãn bốn tiêu chí ban đầu, cộng thêm một tiêu chí nữa:

  1. Cửa sổ emacs mở ra trước cửa sổ đầu cuối của tôi.

nó sẽ luôn mở cho nền trước (với x-focus-frame).

  1. Nhập "emacs" sẽ khởi chạy cửa sổ GUI Emacs. Tìm tệp trong cửa sổ đó sẽ mặc định để tìm trong thư mục từ nơi tôi bắt đầu Emacs.

Nó sẽ mở một cửa sổ emac hiện tại trong chế độ dired.

  1. Nhập "emacs foo.txt" khi foo.txt tồn tại khởi chạy cửa sổ GUI Emacs với foo.txt được tải.

Nếu emacs đã chạy và có một máy chủ, sau đó nó sẽ mở ra trong cửa sổ hiện có và đi đến nền trước.

  1. Nhập "emacs foo.txt" khi foo.txt không tồn tại khởi chạy cửa sổ GUI Emacs với bộ đệm văn bản trống có tên "foo.txt". Làm ^ X ^ S trong bộ đệm đó sẽ lưu foo.txt trong thư mục từ nơi tôi bắt đầu Emacs.

Chính xác.

Một thêm:

Kiểm soát trở lại phiên đầu cuối ngay lập tức sau khi gõ lệnh.

~ / bin / emacs

#!/bin/bash
EMACSPATH=/Applications/Emacs.app/Contents/MacOS

# Check if an emacs server is available 
# (by checking to see if it will evaluate a lisp statement)

if ! (${EMACSPATH}/bin/emacsclient --eval "t"  2> /dev/null > /dev/null )
then
    # There is no server available so,
    # Start Emacs.app detached from the terminal 
    # and change Emac's directory to PWD

    nohup ${EMACSPATH}/Emacs --chdir "${PWD}" "${@}" 2>&1 > /dev/null &
else
    # The emacs server is available so use emacsclient

    if [ -z "${@}" ]
    then
        # There are no arguments, so
        # tell emacs to open a new window

        ${EMACSPATH}/bin/emacsclient --eval "(list-directory \"${PWD}\")"
    else    
        # There are arguments, so
        # tell emacs to open them

        ${EMACSPATH}/bin/emacsclient --no-wait "${@}"
    fi

    # Bring emacs to the foreground

    ${EMACSPATH}/bin/emacsclient --eval "(x-focus-frame nil)"
fi

4
2017-07-08 22:50



Tuyệt vời! Có vẻ như chân args và no-args của bạn được chuyển đổi mặc dù. - eriksensei


Chỉ cần xây dựng các emacs với người quản lý gói homebrew theo hướng dẫn này: http://www.emacswiki.org/emacs/EmacsForMacOS với brew install --cocoa emacs Sau đó ta nên khởi chạy phiên bản .app để lấy gui, trong trường hợp của tôi là /usr/local/Cellar/emacs/24.3/Emacs.app/Contents/MacOS/Emacs


3
2018-02-17 13:58



--cocoa không được chấp nhận; sử dụng - với ca cao thay thế! - Erwin Rooijakkers


Các câu trả lời khác ở đây không hoàn toàn phù hợp với tôi. Đặc biệt, trên máy của tôi, tập lệnh bash

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$@" 

luôn mở các emac trong thư mục chính. Để mở nó trong thư mục làm việc hiện tại, tôi phải làm

#!/bin/sh
/Applications/Emacs.app/Contents/MacOS/Emacs "$PWD/$@"

thay thế.


1
2018-05-22 16:13



Xây dựng / cài đặt cụ thể của tôi không có vấn đề đó, nhưng có một vấn đề với giải pháp của bạn. Nếu bạn cố mở nhiều tệp, chỉ tệp đầu tiên sẽ mở rộng vào thư mục PWD. Phần còn lại sẽ không có đường dẫn $ PWD tiền tố. - kmarsh