আমি কীভাবে সংস্থার মোডে কোনও সম্পূর্ণকরণ ট্রিগার করা থেকে কী কীভাবে আটকাতে পারি?


13

আমি যখন প্রায়শই কোম্পানির মোডের পরামর্শটি দেখাব তখন আমি একটি নতুন লাইনে যেতে চাই। কেবলমাত্র ট্যাব কীটি কীভাবে সম্পূর্ণ হতে পারে তা আমি কীভাবে সংস্থাপনের মোড সেট আপ করতে পারি?

উত্তর:


8

এটি মধ্যে সংজ্ঞায়িত করা হয় company-active-map। আপনি সেই মানচিত্রে রিটার্ন কীটি আবদ্ধ করতে পারেন:

(define-key company-active-map (kbd "<return>") nil)

তবে নোট করুন যে একাধিক প্রার্থী থাকলে রিটার্ন এবং ট্যাব বিভিন্ন কাজ করে। ট্যাবটি আবদ্ধ হয় company-complete-common, যখন ফেরতের সাথে আবদ্ধ থাকে company-complete-selection। আপনি যদি রিটার্ন কীটি আবদ্ধ করেন তবে আপনি ব্যবহার করতে পারবেন না M-nএবং M-pতালিকা থেকে একটি সম্পূর্ণতা বাছাই করতে পারবেন না ।

আপনি ব্যবহার করতে অন্য কিছু কী বাছতে চাইতে পারেন company-complete-selection, উদাহরণস্বরূপ:

(with-eval-after-load 'company
  (define-key company-active-map (kbd "<return>") nil)
  (define-key company-active-map (kbd "RET") nil)
  (define-key company-active-map (kbd "C-SPC") #'company-complete-selection))

ধন্যবাদ - অনেক ভাল: ডি
গন্টার জ্যাচবাউয়ার

8

এই বিরক্তিকর ডিফল্ট আচরণটি ঠিক করার জন্য আমার সম্পূর্ণ সেটআপটি হ'ল:

  ;;; Prevent suggestions from being triggered automatically. In particular,
  ;;; this makes it so that:
  ;;; - TAB will always complete the current selection.
  ;;; - RET will only complete the current selection if the user has explicitly
  ;;;   interacted with Company.
  ;;; - SPC will never complete the current selection.
  ;;;
  ;;; Based on:
  ;;; - https://github.com/company-mode/company-mode/issues/530#issuecomment-226566961
  ;;; - https://emacs.stackexchange.com/a/13290/12534
  ;;; - http://stackoverflow.com/a/22863701/3538165
  ;;;
  ;;; See also:
  ;;; - https://emacs.stackexchange.com/a/24800/12534
  ;;; - https://emacs.stackexchange.com/q/27459/12534

  ;; <return> is for windowed Emacs; RET is for terminal Emacs
  (dolist (key '("<return>" "RET"))
    ;; Here we are using an advanced feature of define-key that lets
    ;; us pass an "extended menu item" instead of an interactive
    ;; function. Doing this allows RET to regain its usual
    ;; functionality when the user has not explicitly interacted with
    ;; Company.
    (define-key company-active-map (kbd key)
      `(menu-item nil company-complete
                  :filter ,(lambda (cmd)
                             (when (company-explicit-action-p)
                               cmd)))))
  (define-key company-active-map (kbd "TAB") #'company-complete-selection)
  (define-key company-active-map (kbd "SPC") nil)

  ;; Company appears to override the above keymap based on company-auto-complete-chars.
  ;; Turning it off ensures we have full control.
  (setq company-auto-complete-chars nil)

( বর্তমান কনফিগারেশনের লিঙ্ক , যা আরও উন্নত করা হয়েছে তবে এদিক থেকে জটিল)

( এই প্রশ্ন অনুসারে আপডেট হয়েছে )


তালিকার প্রথম আইটেমটি নির্বাচন করার জন্য নীচে বসে থাকা এবং ব্যাক আপগুলি রক্ষা করতে (আপনি 'ইন্টারঅ্যাক্ট' না হওয়া পর্যন্ত ফিরতি নিষ্ক্রিয় থাকে) আমি সি-আরইটি সম্পূর্ণ নির্বাচনের বাধ্যতামূলক হিসাবে যুক্ত করতে চেয়েছিলাম যাতে আমি এটি প্রথম আইটেমটিতে ব্যবহার করতে পারি । আমি অন্তর্ভুক্ত করার চেষ্টা করেছি: (define-key company-active-map (kbd "C-RET") #'company-complete-selection) তবে এটি কার্যকর হয়নি। আপনি কি জানেন যে এটি সম্ভব হবে এবং কীভাবে অর্জন করা যায়?
ব্যবহারকারী2237076 15

@ user2237076 আপনি TABতালিকার প্রথম আইটেমটি 'ইন্টারঅ্যাক্ট' না করেই নির্বাচন করতে পারেন । তবে আপনার প্রশ্নের উত্তর দেওয়ার জন্য, আমি বাজি ধরছি যে আপনার টার্মিনাল প্রেরণ করতে পারে না C-RET(আমার পারে না)। চেষ্টা করুন C-h k C-RETএবং দেখুন যে ইমাসগুলি আসলে ন্যায়বিচারের C-RETপরিবর্তে সংকেত পেয়েছে কিনা RET
রেডন রোসবারো

আমি বিকল্পগুলি সাইক্লিংয়ের জন্য ট্যাবকে আবদ্ধ করে রেখেছি: (define-key company-active-map (kbd "TAB") #'company-complete-common-or-cycle) তবে এটি আপনার অধিকার বলে মনে হচ্ছে, যখন আমি সি-আরইটি ছাড়া অন্য কোনও কিছুতে পরিবর্তিত হয়েছি তখন আমি পছন্দসই আচরণ পেয়েছিলাম। ধন্যবাদ।
ব্যবহারকারী2237076

@ ব্যবহারকারী ২২7070707676 মাত্র কিছু অতিরিক্ত তথ্য default ডিফল্টরূপে, আপনি বিকল্পগুলির সাথে M-pএবং এর মাধ্যমে চক্র করতে পারেন M-nবা সেগুলি অনুসন্ধান করতে পারেন C-sবা সরাসরি প্রার্থী নির্বাচন M-1করে M-0(যদি আপনি সেট করেন তবে সংখ্যাগুলি প্রদর্শিত হয় company-show-numbers)।
র‌্যাডন রোসবারো

-1

একই সমস্যার সমাধানের সন্ধান করতে গিয়ে এটি কেবল দেখেছি (যদিও আমার জন্য বিরক্তিকর কীগুলি ছিল SPCএবং .)।

আমি দেখতে পেয়েছি যে nil@ গ্লুকাস এবং @ রেডন রোসবারো প্রস্তাবিত আপত্তিকর কীগুলি বাঁধাই একটি দুর্দান্ত ইউএক্স নয়, সুতরাং আপনাকে গতি টাইপ করার জন্য ব্যাঘাতী এমন সংস্থা ড্রপডাউন নিজেই বাতিল করতে হবে।

মানে, যদি কোম্পানী সক্রিয় হয় এবং আপনি একটি চাবি বাধ্য টাইপ nil কিছুই ঘটবে। আপনি যখন কোনও চরিত্র টাইপ করবেন তখন আপনি যা প্রত্যাশা করবেন তা নয়। আপনি চরিত্রটি sertedোকানো আশা করবেন।

বরং ইমাকগুলি স্বয়ংক্রিয়ভাবে কল করা company-abort এবং তারপরে আপনার জন্য টাইপ করা অক্ষরটি সন্নিবেশ করা আরও অনেক সুবিধাজনক । এখানে আমার সমাধান:

(defun company--my-insert-spc() (interactive) (company-abort)(insert-char #10r32))
(defun company--my-insert-dot() (interactive) (company-abort)(insert-char #10r46))
(define-key company-active-map (kbd "SPC") 'company--my-insert-spc)
(define-key company-active-map (kbd ".") 'company--my-insert-dot)

আমি মনে করি আপনি সহজেই এর পরিবর্তে RETকল করে এটিতে প্রসারিত করতে পারেন (যদিও আমি এটি চেষ্টা করি নি কারণ আমি নির্বাচনের জন্য ব্যবহার করি না )।(newline)(insert-char)RET

আসলে আমি ব্যবহার করছি use-packageতাই এটি আমার উদ্যোগে যা ছিল:

(use-package company
  :config
  (global-company-mode)
  (setq company-minimum-prefix-length 3)
  (setq company-auto-complete t)
  (setq company-show-numbers t)
  :bind
  (("C-<tab>" . company-complete)
   :map company-active-map
   ("ESC" . company-abort)
   ;; prevent company from completing on its own when we type regular characters
   ("SPC" . company--my-insert-spc)
   ("."   . company--my-insert-dot)
   )
  )

আমার দেওয়া কোডটি দিয়ে আপনাকে ম্যানুয়ালি কোম্পানির ড্রপডাউনটি বাতিল করতে হবে না। এম-ট্যাব, সিভি, এমভি, সিএস ইত্যাদির মাধ্যমে আপনি স্পষ্টভাবে ড্রপডাউনটির সাথে ইন্টারঅ্যাক্ট না করলে টাইপিং সম্পূর্ণরূপে নিরবচ্ছিন্ন থাকে আপনার কনফিগারেশনের সাথে কিছু ভুল রয়েছে (যেটি 10 ​​টি ভেরিয়েবলের মতো হওয়ার কারণে আপনাকে সঠিকভাবে সেট করতে হবে তাই অবাক হওয়ার মতো কিছু নয়) যুক্তিসঙ্গত উপায়ে কাজ করতে সংস্থা…)।
রেডন রোসবারো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.