ইম্যাক্স দ্বারা ডাকা একটি প্রোগ্রাম থেকে ইম্যাকস্ক্লিয়েন্টকে কল করুন


9

আমি অউকেক্সের সাথে পিডিএফ ডকুমেন্টেশন ফাইলগুলি দেখতে একটি সমস্যার মুখোমুখি হয়েছি। আমি pdf-toolsইম্যাক্সের মধ্যে থেকে পিডিএফ ফাইলগুলি দেখতে ব্যবহার করেছি এবং আমি emacsclient -nআমার ডিফল্ট পিডিএফ-ভিউয়ার হিসাবে সেট করেছি (দেবিয়ান লিনাক্সে এক্সডিজি-মাইমের মাধ্যমে)। এটি বেশিরভাগ পরিস্থিতিতে সূক্ষ্মভাবে কাজ করে তবে এটি (Tex-documentation-texdoc ...)অ্যাকটেক্স ( C-c ?) এর কার্যকারিতা ভঙ্গ করে ।

আমি কোডটি একক লাইনে সমস্যা সংকুচিত করেছি। আমি যখন listingsপ্যাকেজটির জন্য ডকুমেন্টেশনগুলি দেখার চেষ্টা করি তখন TeX-documentation-texdocএটিকে নীচের লিঙ্গগুলিতে পরিণত করে:

(shell-command-to-string "texdoc --view  listings")

texdocপরিবর্তে কলগুলি emacsclientআসলে ফাইলটি খোলার জন্য (আমি কীভাবে ডেস্কটপটি xdg এর মাধ্যমে কনফিগার করেছি তার উপর ভিত্তি করে)। তবে, এই মুহুর্তে, ইমাসগুলি হ্যাং হয়ে গেছে এবং C-gনিয়ন্ত্রণ ফিরে পেতে আমার ( ) ছাড়তে হবে। এর পরে, নতুন কোনও পিডিএফ খোলা হয় না। যদি আমি সরাসরি ইমক্লিশিয়েন্টকে কল করতে চেষ্টা করি তবে একই জিনিস ঘটে:

(shell-command-to-string "emacsclient -n tmp.pdf")

উভয় কমান্ড কমান্ড লাইনে কাজ করে (যেমন, emacsclient -n tmp.pdfএবং texdoc --view listings

আমার প্রশ্নটি হ'ল এর মতো উদাহরণে আমি কীভাবে ইম্যাক্সের মধ্য থেকে ইমালক্লিয়েন্টকে কল করব? (এবং আমি জানি যে আমি কেবল পিডিএফ ফাইলটি খুলতে পারলাম find-file; এটি এখানে বিকল্প নয় কারণ ফাইলটি সন্ধানের জন্য আমাকে একটি বাহ্যিক প্রক্রিয়া (টেক্সডোক) কল করতে হবে এবং সেই প্রক্রিয়াটি ইম্যাকস্ক্লিয়েন্টকে অনুরোধ করে)।


কেন কেবল texdoc -M --list listingsফাইলটি অনুসন্ধান করতে এবং তারপরে ব্যবহার করবেন না find-file?
কোয়ার্কি

@ সুবায়ু আরেকটি বিকল্প হ'ল কল করার জন্য একটি টার্মিনালে স্যুইচ করা texdoc --viewএবং তারপরে ফাইলটি খোলার পরে ইম্যাকগুলিতে ফিরে যাওয়া। তবে আমি মনে করি ইমাক্স থেকে এক ধাপে এটি করার কোনও উপায় থাকা উচিত?
টাইলার

1
(async-shell-command "emacsclient -n tmp.pdf")সমস্যার সমাধান করতে পারবেন ?
নাম দিন

1
@ নাম আকর্ষণীয় - (async-shell-command "emacsclient -n tmp.pdf")কাজ করে, কিন্তু (async-shell-command "texdoc --view listings")হয় না। সুতরাং এটি একটি দরকারী ক্লু।
টাইলার

1
নেই C-u C-c ?কাজ করে? এটি প্রথমে প্যাকেজ সম্পর্কিত ডক্সের তালিকা প্রদর্শন করে, তারপরে দর্শকের সাথে খোলে (call-process "texdoc" nil 0 nil "--just-view" doc)
জিওর্ডানো

উত্তর:


5

সমাধানটি texdocএকটি অ্যাসিক্রোনাস প্রক্রিয়ার মধ্যে চালানো হয় ।

এটি করার সর্বোত্তম উপায়টি সম্ভবত এর start-file-processপরিবর্তে ব্যবহার করা shell-command-to-string(এটি সম্পর্কিত এলিস্প কোডের তুলনায় সামান্য শেল স্ক্রিপ্ট লেখার পক্ষে সমীচীন হয়ে থাকলে এটি দ্রুত এবং নোংরা কোডের জন্য একটি কার্যকর ফাংশন, তবে অন্যথায় আমার অভিজ্ঞতায় আরও ভাল এড়ানো হবে)।

তবে আশেপাশের কোডটিতে এটি যথেষ্ট পরিবর্তন প্রয়োজন, যেহেতু start-file-processপ্রক্রিয়াটির আউটপুট সরাসরি ফেরত দেয় না, পরিবর্তে এটি আপনাকে নির্দেশ দেয় যে কোন বাফারে আউটপুটটি স্থাপন করতে হবে এবং তারপরে আপনাকে set-process-sentinelএকটি কলব্যাক ফাংশন ব্যবহার করতে হবে যা সেই বাফার থেকে আউটপুট আনবে এবং কমান্ড শেষ হয়ে গেলে "এটির সাথে যা কিছু করা প্রয়োজন" তা করে।


texdocঅ্যাক্টেক্সে চলার নির্দিষ্ট ক্ষেত্রে আমি একটি সেন্ডিনেলকে কিছুটা ওভারকিলের ব্যবহার খুঁজে পাই কারণ এটি কোনও মৌলিক বৈশিষ্ট্য নয় (যেমন এটি আউটপুট নথির জন্য দর্শকের উদ্বোধন, যার ক্ষেত্রে আমরা এটি ব্যবহার করি প্রহরী)।
জিওর্ডানো

"টু-স্ট্রিং" ফাংশনটি কেন ব্যবহৃত হয়েছিল তা আমার কোনও ধারণা নেই, সুতরাং কমান্ডের আউটপুট দিয়ে কী করা হয়েছে তা আমি জানি না। যদি এই আউটপুটটির প্রয়োজন হয় (যেমন ব্যবহারের দ্বারা পরামর্শ দেওয়া হয় ...-to-string), তবে একটি অ্যাসিঙ্ক সমাধানের জন্য হয় একটি প্রক্রিয়া-ফিল্টার বা প্রসেস-সেন্ডিনেল প্রয়োজন হবে। যদি তা না হয় তবে কোডটি সম্ভবত এর মতো কিছু ব্যবহার করতে পারে (shell-command "texdoc --view listings &")
স্টেফান

মন্তব্যগুলিতে এটি ব্যাখ্যা করা হয়েছে TeX-documentation-texdoc: ...-to-stringব্যবহারকারীদের সম্ভাব্য ত্রুটি বার্তাগুলি দেখানোর জন্য বৈকল্পিকটি ব্যবহৃত হয় (উদাহরণস্বরূপ যখন কোনও ডকুমেন্টেশন পাওয়া যায় না)। উপরন্তু, texdoc nonexistingpackageফেরৎ 0, কিন্তু প্রহরী আউটপুট পার্স করতে ব্যবহৃত হতে পারে।
জিওর্ডানো

তারপরে একটি সেন্ডিনেল সেরা বিকল্প বলে মনে হচ্ছে।
স্টেফান

আমি start-file-processআসলে এখানে কাজ করে তার একটি অনুরোধ খুঁজে পাচ্ছি না । (start-file-process "texdoc" "*texdoc*" "texdoc" "--view" "listings")বাফার তৈরি করে *texdoc*, এতে "প্রসেস টেক্সডক সমাপ্ত" সন্নিবেশ করা হয় এবং পিডিএফ কখনও খোলে না। যখন আমি এক্সডিজি-মিম পিডিএফ ভিউয়ারটিকে পাশাপাশি প্রকাশ করার জন্য সেট করি তখন একই জিনিস ঘটে।
টাইলার

1

আপনার যদি কোনও উত্তর অপেক্ষা না করেই কেবল ইমাসকে একটি অনুরোধ ফিরিয়ে দিতে হয় তবে আপনি emacsclientব্যাকগ্রাউন্ডে চালাতে পারেন । ইউনিক্স-স্টাইল ওএসের অধীনে (লিনাক্স, ম্যাকস, সাইগউইন,…):

emacsclient … &

নেটিভ উইন্ডোজ এর অধীনে:

start emacsclient …

অবশ্যই, তবে এই বিশেষ ক্ষেত্রে আমাকে এমন একটি প্রোগ্রাম (টেক্সডোক) কল করতে হবে যা তখন কল করে (ইম্যাক্লিসিয়েন্ট)। পুনর্নির্দেশের অতিরিক্ত স্তরের সমস্যা তৈরি হচ্ছে।
টাইলার

@ টাইলার অ্যাসিক্রোনাস texdoc(যেমন আপনি এটি শেষ হওয়ার অপেক্ষায় নেই), তাই না? সুতরাং আপনি একই নীতি প্রয়োগ করতে পারেন: texdoc … &শেল কমান্ড হিসাবে চালান ।
গিলস

আমরা আমার প্রশ্নের মন্তব্যে মন্তব্য করার চেষ্টা করেছি; emacsclientসরাসরি কল করার সময় এটি কাজ করে, তবে কল করার সময় নয় texdoc
টাইলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.