Emacs

คำถาม & คำตอบสำหรับผู้ใช้ขยายหรือพัฒนา Emacs

1
ทำไมความสูงของแบบอักษรจึงเปลี่ยนเมื่อเป็นตัวหนา
มันน่ารำคาญมาก ... เมื่อข้อความใด ๆ ในบรรทัดมีการเปลี่ยนแปลงใบหน้าเพื่อให้ข้อความมีความหนาความสูงของบรรทัดจะเพิ่มขึ้นตาม (ฉันถือว่า) พิกเซลเดียว มันแสดงได้ดีที่สุดด้วยภาพ: ทำไมนี้ ฉันจะป้องกันมันได้อย่างไร ตามที่ร้องขอข้อมูลบนแพลตฟอร์ม: Debian GNU / Linux sid (ไม่เสถียร) ใน amd64 Emacs ใช้ libgtk-3.so.0 (gtk 3.14.5) บน XFCE 4.12 ฉันลองแบบอักษรต่อไปนี้ที่ 8 พอยต์, 9 พอยต์, 10 พอยต์และ 11 พอยต์: DejaVu Sans Mono DejaVu Sans Serja DejaVu Droid Sans Mono ปลดปล่อยโมโน ปัญหาเกิดขึ้นเฉพาะกับ DejaVu Sans …
9 faces 

2
วิธีหลีกเลี่ยงการพิมพ์“ space” หลังจาก“ ^” เพื่อเลื่อนขึ้นในไดเรกทอรีใน dired?
^เป็นกุญแจสำคัญในการย้ายไปยังไดเรกทอรีหลักในdired("ไดเรกทอรีขึ้น") อย่างไรก็ตามGnu Emacsเมื่อต่อไปWindows 7 Professional 64-bitกับรูปแบบแป้นพิมพ์ภาษาเยอรมันของฉันมันไม่เพียงพอที่จะพิมพ์ "^" แต่ฉันต้องพิมพ์เว้นวรรคหลังจากนั้นเพื่อให้การเชื่อมโยงคีย์ทำงานได้ ฉันจะกำหนดค่าการเชื่อมโยงคีย์ใหม่เพื่อหลีกเลี่ยงการกดเว้นวรรคและเลื่อนขึ้นด้วย "^" ได้อย่างไร C-h k ^<space> ผลตอบแทน ^ รันคำสั่ง dired-up-directory ซึ่งเป็นฟังก์ชัน Lisp ที่คอมไพล์แบบอินเตอร์แอคทีฟใน `dired + .el ' มันถูกผูกไว้กับ ^,. (ไดเรกทอรี dired-up-& ตัวเลือก OTHER-WINDOW) รัน Dired บนไดเร็กทอรีพาเรนต์ของไดเร็กทอรีปัจจุบัน ค้นหาไดเรกทอรีหลักทั้งในบัฟเฟอร์นี้หรือบัฟเฟอร์อื่น สร้างบัฟเฟอร์หากจำเป็น

1
วิธีการแยกประวัติสำหรับการแจ้งเตือน Helm ที่แตกต่างกัน
เมื่อการดำเนินงานเป็นที่แยกต่างหากหมอชะตากรรม, Inza สวมหางเสือ et และเคนท์ในขณะที่เครื่องแต่งกายเดิม ... - Google บนhelm separate history เมื่อฉันกดปุ่มM-pHelm เพื่อhelm-git-grepรับพา ธ ไฟล์ที่ฉันป้อนก่อนหน้านี้ในhelm-find-files: helm-git-grepสิ่งที่ผมจะชอบที่จะเห็นเป็นรูปแบบที่ฉันค้นหาด้วยก่อนหน้านี้ใน วิธีที่จะทำให้พวงมาลัยมีประวัติแยกต่างหากมินิบัฟเฟอร์สำหรับชนิดที่แตกต่างกันของพวงมาลัย ( helm-M-x, helm-mini, helm-git-grepและhelm-find-files)?
9 helm 

1
ทำไม defgroup จึงมีประโยชน์
ฉันอ่านidoต้นฉบับแล้วดู: (defgroup ido nil "Switch between files using substrings." :group 'extensions :group 'convenience :version "22.1" :link '(emacs-commentary-link :tag "Commentary" "ido.el") :link '(emacs-library-link :tag "Lisp File" "ido.el") :link '(custom-manual "(ido) Top") :link '(info-link "(ido) Customization")) defgroupปรากฏที่ด้านบนของแพ็คเกจขนาดใหญ่มากมาย ฉันเห็นมันทำสิ่งนี้: ประกาศ SYMBOL เป็นกลุ่มการปรับแต่งที่มีสมาชิก SYMBOL ไม่จำเป็นต้องเสนอราคา และหน้าของกลุ่มการปรับแต่งนั้นก็ไม่ได้ตอบว่าจะใช้เมื่อไหร่หรืออย่างไร คุณใช้พวกเขาเมื่อไหร่หรืออย่างไร

1
ฉันจะตั้งค่าการเชื่อมโยงที่สำคัญสำหรับโหมดในสถานะความชั่วร้ายที่เฉพาะเจาะจงได้อย่างไร
ฉันมีชุดของการเชื่อมโยงคีย์ที่ฉันใช้สำหรับทั้งสองweb-modeและphp-modeในโหมดแทรก (ของความชั่วร้าย) ดังนั้นฉันไม่สามารถใช้set-local-mapหรืออะไรบางอย่าง เพราะในโหมดปกติปุ่มเดียวกันจะเรียกคำสั่งอื่น ๆ ดังนั้นการผูกจะต้องใช้งานในevil-insert-state-mapเท่านั้น ฉันมีดังต่อไปนี้: (eval-after-load 'php-mode '(progn (define-key evil-insert-state-map (kbd "C-<next>") (lambda () (interactive) (insert " = "))) (define-key evil-insert-state-map (kbd "C-<prior>") (lambda () (interactive) (insert "->"))))) (eval-after-load 'web-mode '(progn (define-key evil-insert-state-map (kbd "C-<next>") 'zencoding-expand-yas) (define-key evil-insert-state-map (kbd "C-<prior>") 'zencoding-expand-line))) ดังนั้นทุกครั้งweb-modeหรือphp-modeกำลังถูกโหลดการเชื่อมโยงคีย์เหล่านี้จะถูกเปิดใช้งาน ปัญหาคือ:สมมติว่าฉันมีบัฟเฟอร์เปิดสองอันหนึ่งอันphp-modeและอีกweb-modeอัน เมื่อweb-modeบัฟเฟอร์เป็นบัฟเฟอร์ปัจจุบันและฉันสลับไปยังบัฟเฟอร์อื่นที่อยู่ในphp-modeการweb-modeผูกยังคงใช้งานอยู่ภายในphp-modeบัฟเฟอร์ ผมพยายามที่จะแก้ปัญหานี้โดยใช้(add-hook 'web-mode-hook [...])และแทนการตั้งค่าในการผูก(add-hook 'php-mode-hook …

4
วิธีการผูกกุญแจของคุณกับปุ่มกดที่ยังไม่ได้โหลด?
ฉันใช้use-packageเพื่อจัดการแพ็คเกจที่ติดตั้งและbind-keyกำหนดการกระทำให้กับคีย์แบบกำหนดเองที่ฉันชอบ ฉันแทนที่ที่สุดของการเริ่มต้น Emacs ปุ่มลัด (เช่นC-nกลายเป็นM-k, C-pกลายเป็นM-i) แต่ฉันตกลงกับโหมดอื่น ๆ เอาชนะโครงการปุ่มลัดของฉัน อย่างไรก็ตามในบางครั้งฉันต้องการให้ปุ่มกดยังคงอยู่ ฉันต้องการความM-kหมายอย่างอื่นมากกว่าใน Gnus หรือ Helm ที่เป็นค่าเริ่มต้น อย่างไรก็ตามพวกเขาขัดแย้งกันในการเริ่มต้นของ Emacs เพราะฉันไม่สามารถเพิ่มการเชื่อมโยงกับ keymap ได้หากไม่มีอยู่ (เพราะuse-packageบางครั้งทำให้การโหลดแพคเกจล่าช้า) เช่นคำสั่งต่อไปนี้มีข้อผิดพลาด (เช่น(void-variable helm-map)) เนื่องจาก Helm และ Gnus ยังไม่โหลดเต็มที่ (bind-key "M-Y" 'helm-end-of-buffer helm-map) (bind-key "M-k" 'helm-next-line helm-find-files-map) (bind-key "M-s" 'other-window gnus-summary-mode-map) ฉันมีuse-packageการร้องขอทั้งหมดของฉันในไฟล์เดียวและbind-keyสำหรับการผูกคีย์ที่กำหนดเองในไฟล์อื่น ฉันไม่ต้องการผูกuse-packageสายไว้เพราะบางทีฉันอาจต้องการเผยแพร่รูปแบบการผูกกุญแจที่กำหนดเองของฉันเป็นแพ็คเกจแบบสแตนด์อโลน จะทำอย่างไรถ้าฉันต้องการให้ใครบางคนติดตั้งแบบแผนของฉันมี Helm และ Gnus keybindings ในพื้นที่อยู่ด้วยหรือไม่ ฉันจะจัดการการโยงbind-keyคีย์- …

3
ด้วย org-babel วิธีตั้งชื่อผลลัพธ์ของการเรียกฟังก์ชันและนำกลับมาใช้ใหม่
ในorg-modeฉันพยายามกำหนดฟังก์ชั่น, ตัวแปรแล้วกำหนดให้ตัวแปรอื่นเป็นผลลัพธ์ของการเรียกใช้ฟังก์ชันบนตัวแปรแรก อย่างไรก็ตามดูเหมือนว่าฉันไม่สามารถใช้ตัวแปรใหม่นี้ในการเรียกฟังก์ชั่นที่ตามมา การเชื่อมการเรียกฟังก์ชันใช้งานได้ แต่มีผลกับค่าของตัวแปรก่อนจะอนุญาตให้ทำการดีบักได้เร็วขึ้นในกรณีที่มีสิ่งผิดปกติในการเรียกใช้ฟังก์ชันแรกและเพื่อหลีกเลี่ยงการคำนวณซ้ำที่อาจมีราคาแพง MWE: (ใช้(require 'ob-emacs-lisp)ถ้าจำเป็น) #+name: square #+begin_src emacs-lisp :var x=3 (message (format "%s" (* x x))) #+end_src #+RESULTS: square : 9 #+name: value : 45 #+name: squaredvalue #+call: square(x=value) #+RESULTS: squaredvalue : 2025 Now I try to reuse this value: #+begin_src emacs-lisp :var res=squaredvalue (message res) …

1
เหตุใด emacs จึงไม่สนับสนุนเหตุการณ์สำคัญขึ้น / ลง
emacs AFAIK ไม่สนับสนุนเหตุการณ์เท่านั้นkeyup/keydown keypressedตัวอย่างของผลที่ตามมาคือเมื่อเราต้องการทำเครื่องหมายภูมิภาคเราต้องตั้งเครื่องหมายset-mark-commandก่อนแล้วจึงสามารถทำเครื่องหมายภูมิภาคโดยเคลื่อนที่ไปรอบ ๆ จุด แม้ว่านี่จะเป็นคุณลักษณะที่น่าสนใจเนื่องจากคุณไม่จำเป็นต้องกดปุ่ม Shift ค้างไว้ในขณะที่ทำเครื่องหมายข้อความบางครั้งมันก็เป็นสิ่งที่พึงปรารถนาที่จะมีพฤติกรรมแบบเดียวกับในบรรณาธิการอื่น ๆ คำถามนี้คือการเข้าใจว่าทำไม emacs ไม่สนับสนุนคุณสมบัตินี้และทำไมจึงถือว่าดีกว่านี้ นอกจากนี้ยังมีวิธีการในอุดมคติที่เราจะแก้ปัญหานี้ใน emacs ได้อย่างไร?

1
ฉันจะตรวจสอบแพคเกจขนาดใหญ่ใน repo git ปลอดภัยได้อย่างไร
ฉันกำลังดูพวงมาลัย emacsโดยเฉพาะซึ่งมีคุณสมบัติดังต่อไปนี้: มันมีความมุ่งมั่นหลายพัน มันถูกบำรุงรักษาส่วนใหญ่โดยผู้ใช้คนหนึ่ง ผู้ดูแลไม่มีโปรไฟล์อื่น ๆ (โซเชียลมีเดีย ฯลฯ ) ฉันสามารถค้นหาได้จากการค้นหาเพียงไม่กี่ครั้ง มันได้รับการบำรุงรักษาอย่างแข็งขัน (วันนี้) เนื่องจากฉันกำลังจะติดตั้งรหัสโดยพลการบนคอมพิวเตอร์ของฉันเพื่อใช้ในโปรแกรมแก้ไขข้อความของฉันฉันต้องการตรวจสอบว่าสิ่งนี้ได้ผ่านกระบวนการตรวจสอบใด ๆ หรือไม่ ฉันต้องการจะพูดว่า "โอเพนซอร์ส" แต่ฉันก็ยังห่างไกลจากความสามารถในการตรวจสอบรหัสทั้งหมดด้วยตัวเอง ฉันต้องการสมมติให้คนอื่น ๆ ในชุมชนได้ตรวจสอบ แต่สิ่งหนึ่งที่อาจเป็นเท็จและสองรายการมีความมุ่งมั่นล่าสุด มีกลยุทธ์อื่นที่ฉันขาดไปหรือไม่ สำหรับบันทึกแล้วเวกเตอร์นั้นง่าย: "โอเพ่นซอร์ส" ไม่สำคัญเลยว่าหากผู้มีส่วนร่วมทำงานภายใต้บัญชีผู้ใช้ที่ไม่มีใบอนุญาตหรือหากไม่มีกระบวนการตรวจสอบ

1
วิธีการเรียกใช้กระบวนการที่ด้อยกว่าโดยอัตโนมัติเมื่อโหลดโหมดหลักเป็นครั้งแรก?
สมมติว่าเรากำลังทำงานกับ Python (หรือ Matlab) กับ บริษัท โดยไม่ต้องมีกระบวนการ บริษัท ที่ด้อยกว่าข้อความว่า Completion needs an inferior Python process running อย่างไรก็ตามทางออกที่ชัดเจนในการเรียกใช้กระบวนการที่ต่ำกว่าโดยอัตโนมัติ (add-hook 'python-mode 'run-python) จะเรียกใช้กระบวนการ python ใหม่ทุกครั้งที่ฉันเปิดไฟล์. py (ซึ่งมีราคาแพงกว่าด้วย Matlab) มีตะขอที่เรียกใช้เฉพาะครั้งแรกที่เรียกใช้โหมดหลักหรือไม่ หรือมีวิธีการตรวจสอบว่ากระบวนการที่ต่ำกว่าของ python / matlab ทำงานอยู่หรือไม่? หรือมีวิธีอื่นในการแก้ปัญหานี้ในการเรียกใช้กระบวนการที่ด้อยกว่าโดยอัตโนมัติด้วยโหมดหลัก แต่เพียงครั้งเดียว

3
ฉันจะเลื่อนการโหลด elpy โดยใช้แพ็กเกจได้อย่างไร
ฉันได้รับการอัปเดตการโทรแพ็กเกจที่ฉันใช้อยู่ตอนนี้ซึ่ง:idleเป็นวิธีที่ดีในการเลื่อนสิ่งต่างๆ ในขณะนี้หนึ่งในเพลงฮิตที่ยิ่งใหญ่ที่สุดในเวลาโหลดของฉันคือการelpyโหลดโมดูลเพิ่มเติมทั้งหมด ในขณะที่การภาวนาของฉันค่อนข้างพื้นฐาน: (use-package elpy :commands elpy-enable :init (elpy-enable) :config (progn (setq elpy-rpc-backend "jedi" elpy-rpc-project-specific 't) (when (fboundp 'flycheck-mode) (setq elpy-modules (delete 'elpy-module-flymake elpy-modules))))) อย่างไรก็ตามมันค่อนข้างสิ้นเปลืองหากฉันไม่เคยแก้ไขโมดูลหลาม ปัญหาคือ elpy คือชุดของโหมดดังนั้นฉันไม่สามารถใช้รูปแบบการรวมโหมดตามที่elpy-enableต้องการเรียกใช้ ดังนั้นฉันควรใช้วิธีใด มันเป็นเพียงกรณีของการทริกเกอร์ในเบ็ดหลามโหมด?

4
คัดลอกสตริงใน Elisp หรือไม่?
ฉันมีสตริงที่ถูกต้อง ฉันต้องการทำสำเนาลึกของมันเพื่อเพิ่มคุณสมบัติมากขึ้นในขณะที่รักษาคุณสมบัติในสายเดิม ฉันจะทำสิ่งนั้นได้อย่างง่ายดาย ตัวอย่าง ประเมินหนึ่งต่อหนึ่ง: (setq test-str-1 #(";; This `is' a test" 0 3 (fontified nil face font-lock-comment-delimiter-face) 3 9 (fontified nil face font-lock-comment-face) 9 11 (fontified nil face (font-lock-constant-face font-lock-comment-face)) 11 19 (fontified nil face font-lock-comment-face))) (setq test-str-2 (concat test-str-1)) (add-face-text-property 0 (length test-str-2) 'foobar t test-str-2) และผลลัพธ์: test-str-2 …
9 elisp 

1
วิธีการกำหนดใบหน้าไฮไลต์ที่ดี
ฉันต้องการใช้global-hl-line-modeแต่ธีมของฉันบางหน้าไม่มีใบหน้าที่เน้นสีที่ดี มีวิธีทั่วไปในการกำหนดอย่างใดอย่างหนึ่ง (ที่ไม่ใช่สีผกผัน)? ฉันต้องการคงการเน้นไวยากรณ์ไว้ซึ่งทำให้ฉันขาดความพยายาม
9 colors 

1
ฉันจะแทนที่ใบหน้าที่กำหนดไว้ล่วงหน้าสำหรับแสงพื้นหลังและสีเข้มได้อย่างไร
ฉันต้องการใช้set-face-attributeเพื่อเลือกหนึ่งในสองสีสำหรับพื้นหน้าขึ้นอยู่กับว่าพื้นหลังของชุดรูปแบบปัจจุบันนั้นสว่างหรือมืด พฤติกรรมที่คาดหวังคือพื้นหน้าจะเปลี่ยนโดยอัตโนมัติหากฉันเปลี่ยนจากชุดรูปแบบพื้นหลังสีอ่อนเป็นชุดรูปแบบพื้นหลังสีเข้มหรือในทางกลับกัน นี่คือกรณีการใช้งาน: ฉันปรับแต่งหน้าใบหน้าstripe-hl-lineดังนี้: (set-face-attribute 'stripe-hl-line nil :overline "gray" :underline "gray" :foreground "dodger blue") แต่ฉันต้องการเปลี่ยนฉากหน้าโดยยึดตามถ้าธีมนั้นสว่างหรือมืด ด้วยวิธีนี้ฉันไม่ต้องกังวลกับการปรับแต่งใบหน้านั้นในแต่ละธีม
9 faces 

3
ข้อผิดพลาดการเข้ารหัสตัวจัดการแพ็กเกจ
เมื่อทำงานpackage-list-packagesฉันได้รับข้อผิดพลาดดังต่อไปนี้ These default coding systems were tried to encode text in the buffer ` *temp*': (iso-latin-1-dos (3242 . 37326) (3243 . 40165)) However, each of them encountered characters it couldn't encode: iso-latin-1-dos cannot encode these: 野 鳥 ฉันจะตั้งค่าการเข้ารหัสตัวจัดการแพคเกจเริ่มต้นเป็นutf-8อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.