ইতিমধ্যে কোনও ফ্রেম না থাকলে কেবল ইমালস্ক্লিয়েন্ট তৈরি করুন


11

emacsclient -a '' -nইতিমধ্যে একটি না থাকলে আমি কীভাবে একটি নতুন ফ্রেম তৈরি করতে পারি ?

-cপতাকাটির সমস্যাটি হ'ল এটি প্রতিবার একটি নতুন ফ্রেম তৈরি করে। এটি ছাড়াই সমস্যাটি হ'ল যদি কোনও ফ্রেম ওপেন না হয় তবে কমান্ড লাইনে এটি খুলবে।

আমি যদি শেল থেকে কোনও ওপেন ইম্যাক্স ফ্রেম আছে কিনা তা যদি জানতে পারি তবে আমি -cযে আচরণটি করতে চাই তার জন্য বা তার উপর নির্ভর করে কল করতে পারি। আমি চেষ্টা করেছিলাম:

$ emacsclient -a '' --eval '(frames-on-display-list)'
(#<frame F1 0xba2740>)

আমি সবসময় একই ফলাফল পেতে।

আমি অস্থায়ী ফাইল বা pgrep ব্যবহার করতে পারি, তবে এই পদ্ধতিগুলি খুব ত্রুটিযুক্ত।

এটি এই প্রশ্নের অনুরূপ , তবে এটি কোনও সদৃশ নয়, কারণ ওপি কল করার আগে একটি ফ্রেম খোলার বিষয়ে সন্তুষ্ট ছিল emacsclient


1
Superuser.com / প্রশ্নগুলি / 358037/…elisp , bashএবং shউত্তরগুলির সাথে একই প্রশ্ন ।
কনস্ট্যান্টিন মোরেঙ্কো

উত্তর:


3

আমি এই উপর ভিত্তি করে এই স্ক্রিপ্ট তৈরি শেষ

#!/bin/bash -e

if [[ "$DISPLAY" ]]; then
        frame=`emacsclient -a '' -e "(member \"$DISPLAY\" (mapcar 'terminal-name (frames-on-display-list)))" 2>/dev/null`
        [[ "$frame" == "nil" ]] && opts='-c' # if there is no frame open create one
        [[ "${@/#-nw/}" == "$@" ]] && opts="$opts -n" # don't wait unless we've asked to run in a terminal
else
        opts='-nw'
fi

exec emacsclient -a '' $opts "$@"

যদি কোনও প্রদর্শন না থাকে তবে এটি দিয়ে খোলে -nw। যদি $DISPLAYসেট করা থাকে তবে এটিতে একটি নতুন তৈরি করা প্রয়োজন কিনা তা দেখার জন্য সেটিতে ফ্রেমগুলির সন্ধান করে।

সম্পাদনা: আমি এটিকে সংশোধন করেছি যাতে আপনি -nwকোনও ডিসপ্লে থাকলেও টার্মিনালে খুলতে চান কিনা ম্যানুয়ালি নির্দিষ্ট করতে পারেন।


1
গৌণ নিটপিক: $@ উদ্ধৃত করা উচিত
শেফার্ড

0

তুমি ব্যবহার করতে পার:

emacsclient -s server_name -e '(+ 1 0)' >/dev/null 2>&1

Emacs সার্ভার "server_name"ইতিমধ্যে চালু আছে কিনা তা পরীক্ষা করতে । যদি কমান্ডটি প্রস্থান কোড 0 দেয়, এটি চলছে is যদি তা হয় তবে কেবল emacsclientকমান্ডটি ব্যবহার করুন :

emacsclient -s server_name -n file_name.txt

যদি এটি চলমান না থাকে তবে উদাহরণস্বরূপ আপনি একটি নতুন ইমাস সার্ভারটি খুলতে পারেন:

emacs --eval '(setq server-name "server_name")' --eval '(server-start)' file_name.txt &

তবে আপনি একবার শেলটি বন্ধ করলে আপনি সার্ভারটি মেরে ফেলবেন, তাই না? emacsclient -a ''শুরু emacs --daemonপ্রয়োজনে, যা চলতেই থাকবে এমনকি আপনি যদি শেল বন্ধ করুন।
স্পেলুফো

@ স্পেলুফো শেলটি মেরে সার্ভারটি মারা যায় না। &কমান্ডের শেষে নোট করুন ; এর অর্থ সার্ভারটি ব্যাকগ্রাউন্ড প্রক্রিয়া হিসাবে চালানো ...
হ্যাকন হাগল্যান্ড

যা এটি বর্তমান শেলের পটভূমিতে কাঁটাচামচ করে। আপনি যখন নিজের শেলটি ফিরে পেয়েছেন তখন এটি হত্যা করা হয় না, তবে আপনি যখন শেলটি পুরোপুরি বন্ধ করেন তখন এটি মারা যায় C-d
spelufo

আপনি যদি আপনার সমস্ত টার্মিনাল বন্ধ করে থাকেন তবে ডিমন চলতে থাকে। এটি তখনই চলতে থাকবে যদি server-startডেমন প্রক্রিয়া হিসাবে সার্ভারটি শুরু করে। আপনি যদি এইভাবে ইমাস শুরু করেন এবং তারপরে সমস্ত ইম্যাকস এবং টার্মিনালগুলি বন্ধ করে রাখেন, তবে একটি নতুন টার্মিনাল খুলুন এবং চালনা করবেন তবে আপনি pgrep emacsকী পাবেন?
spelufo

@ স্পেলুফো আসলে এটি এখনও চলছে C-d। আমি এখন gnome-terminalউবুন্টু 14.10 ব্যবহার করে এটি চেষ্টা করেছিলাম .. আমার মনে হয় আপনি সমস্ত ইমাস ফ্রেম বন্ধ করার পরে কোনও চলমান উদাহরণের কথা উল্লেখ করছেন? তারপরে,
এটির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.