คำถามติดแท็ก elisp

สำหรับคำถามเกี่ยวกับ Emacs Lisp เป็นภาษาเทียบกับภาษาอื่นโดยเฉพาะเมื่อเทียบกับภาษา Lisp อื่น ๆ นั่นคือสำหรับคำถาม * เกี่ยวกับภาษา * นั้น * อย่าใช้มัน * สำหรับคำถามเกี่ยวกับ * โดยใช้ * Emacs Lisp Emacs Lisp เป็นภาษาสคริปต์และการเขียนโปรแกรมที่ตัวแก้ไข Emacs สร้างขึ้น

2
วิธีการใช้ defcustom อย่างถูกต้อง?
เช่นเดียวกับผู้ใช้ Emacs ส่วนใหญ่ฉันได้ปรับแต่งโหมดด้วยการเปลี่ยนตัวแปร สิ่งที่ไม่เคยเกิดขึ้นกับฉันคือความคิดการเขียนโปรแกรมทั้งหมดที่อยู่เบื้องหลังการปรับแต่งสิ่งนี้และสิ่งนั้น ฉันรู้เรื่องนี้เมื่อฉันเริ่มดูซอร์สโค้ดของ eshell ฉันไม่ใช่โปรแกรมเมอร์เอลลิส แต่em-ls.elดูเหมือนว่าจะใช้defcustomเป็นdefgroupพิเศษ ฯลฯ ดูเหมือนว่านี่จะเป็นโลกเงาของตัวแปรที่กำหนดทั่วโลกซึ่งโค้ด elisp ใช้ ดังนั้นคำถามหนึ่งก็คือการใช้defcustomตัวแปรระดับโลก (ปรับแต่ง) อีกวิธีหนึ่งได้หรือไม่? ทุกคนสามารถชี้ให้ฉันเห็นวิธีการใช้อย่างถูกต้อง (เข้าใจก่อน) ความคิดทั้งหมดที่อยู่เบื้องหลังdefcustomเมื่อใดควรใช้ทำไมเมื่อไม่ อาจเป็นตัวอย่างสำหรับมือใหม่สำหรับมือใหม่
15 elisp  defcustom 


2
ฟังก์ชั่นหรือมาโครสามารถระบุคำเตือนของคอมไพเลอร์ไบต์ได้หรือไม่?
ฉันกำลังเขียนฟังก์ชั่นซึ่งโดยหลักการแล้วจะมีจำนวนของข้อโต้แย้งโดยพลการ อย่างไรก็ตามในทางปฏิบัติก็ควรเท่านั้นที่เคยได้รับการผ่าน แม้จำนวนของการขัดแย้งและจะก่อให้เกิดผลที่ไม่พึงประสงค์อย่างอื่น นี่คือตัวอย่างจำลองสำหรับบริบท: (defun my-caller (&rest args) (while args (call-other-function (pop args) (pop args)))) เมื่อไฟล์ elisp ถูกคอมไพล์ด้วยไบต์คอมไพเลอร์ไบต์จะส่งคำเตือนเมื่อเห็นฟังก์ชันที่ถูกเรียกใช้ด้วยจำนวนอาร์กิวเมนต์ที่ไม่ถูกต้อง เห็นได้ชัดว่ามันจะไม่มีทางเกิดขึ้นmy-callerเพราะมันถูกกำหนดให้ใช้หมายเลขใด ๆ ถึงกระนั้นก็อาจจะมีคุณสมบัติสัญลักษณ์ที่ฉันสามารถตั้งค่าหรือ(declare)รูปแบบที่ฉันสามารถเพิ่มความหมายของมัน สิ่งที่ต้องแจ้งให้ผู้ใช้ทราบว่าฟังก์ชั่นนี้ควรได้รับจำนวนอาร์กิวเมนต์ที่เท่ากัน มีวิธีแจ้ง byte-compiler ของข้อ จำกัด นี้หรือไม่? ถ้าไม่ใช่มันเป็นไปได้ไหมที่มีแมโครแทนที่จะใช้ฟังก์ชั่น

1
รับเนื้อหาของบัฟเฟอร์
ดังนั้นbuffer-stringได้รับเนื้อหาของบัฟเฟอร์ปัจจุบัน แต่ไม่อนุญาตให้ระบุบัฟเฟอร์อื่น ฉันจะหลีกเลี่ยงสิ่งนั้นได้อย่างไร ฉันต้องการบางสิ่งบางอย่างsave-window-excursionเพื่อให้มันทำงานได้หรือไม่


2
จุดอ้างอิงที่มีอาร์กิวเมนต์เดี่ยวและเครื่องหมายจุลภาคคืออะไร (อ้างถึงหาเรื่อง)
(quote x)ทำให้ x ไม่ได้รับการประเมิน แต่เพิ่ม,ในด้านหน้าของxภายในquoteทำให้การประเมิน คืออะไรแล้วจุดของการใช้คำพูดที่มีอาร์กิวเมนต์เดียวด้วยเครื่องหมายจุลภาคในด้านหน้าของมันเช่นดังนั้น: (quote ,x)? แรงบันดาลใจจากสาย 59 จากลูกศรที่น่ารำคาญ : (put (quote ,cmd) 'aa--alts ,alternatives) ทำไมจึงไม่(put cmd 'aa-alts ,alternatives)ดีเท่ากัน?
15 elisp  backquote 

3
มีวิธีใดบ้างที่จะเรียกใช้ฟังก์ชั่น hook ได้เพียงครั้งเดียว?
บริบท ฉันใช้after-make-frame-functionsเบ็ดโหลดอย่างถูกต้องในรูปแบบนั้นกำหนดค่าไคลเอ็นต์ emacs / เซิร์ฟเวอร์ โดยเฉพาะนี่คือข้อมูลโค้ดที่ฉันใช้ในการสร้าง (ตามคำตอบ SOนี้): (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup))) (progn (load-theme 'monokai t) (sml/setup))) ปัญหา เมื่อมีemacsclient -c/tเซสชั่นจะเริ่มต้นเบ็ดจะถูกดำเนินการไม่เพียง แต่ในกรอบใหม่ แต่ในทุกกรอบที่มีอยู่ก่อนหน้า (อื่น ๆemacsclientครั้ง) และมันทำให้ผลภาพที่น่ารำคาญมาก (รูปแบบที่มีการโหลดอีกครั้งในเฟรมทุกคน) ที่แย่ยิ่งกว่านั้นในไคลเอนต์เครื่องเทอร์มินัลได้เปิดสีของชุดรูปแบบเรียบร้อยแล้ว เห็นได้ชัดว่าเกิดขึ้นเฉพาะในไคลเอนต์ emacs ที่เชื่อมต่อกับเซิร์ฟเวอร์ emacs เดียวกัน สาเหตุของพฤติกรรมนี้ชัดเจน hook ถูกเรียกใช้บนเซิร์ฟเวอร์และไคลเอ็นต์ทั้งหมดได้รับผลกระทบ …

1
ทำไม setq และ set quote ทำหน้าที่แตกต่างกันของตัวแปรที่มีขอบเขตเป็นขอบเขต
ฉันมีข้อผิดพลาดในหนึ่งในส่วนขยายของฉันซึ่งในที่สุดก็กลายเป็นว่าเกิดจากการsetไม่ทำงานตามที่ฉันคาดไว้: ;; -*- lexical-binding: t -*- (let ((a nil)) (setq a t) (print a)) (let ((a nil)) (set 'a t) (print a)) เมื่อทำงานกับงานemacs -Q --batch -l temp.elพิมพ์: t nil ดูเหมือนว่าฉันจะแปลกมาก ผมก็รู้สึกว่าเป็นชวเลข(setq a b) (set 'a b)เกิดอะไรขึ้น?

1
เหตุใดไฟล์ elisp จึงมีความเห็นท้ายไฟล์
ทำไมไฟล์ elisp ถึงลงท้ายด้วย ;;; file.el ends here? มีเหตุผลทางประวัติศาสตร์ว่าทำไมสิ่งนี้มีประโยชน์? ฉันเคยเห็นมันแนะนำในไกด์สไตล์ elisp และฉันก็ยังเห็นมันในแพ็คเกจ elisp ทันสมัย auto-insert-modeยังเพิ่มความคิดเห็นดังกล่าวไปยังไฟล์ elisp ใหม่ตามค่าเริ่มต้น


2
“ และ” vs“ เมื่อ” สำหรับเงื่อนไข
นี่คือการติดตามความคิดเห็นของคำตอบนี้ บิตของรหัสต่อไปนี้ดูเหมือนจะเทียบเท่า: (and a b) (when a b) แน่นอนandช่วยให้คุณใส่เงื่อนไขเพิ่มเติม: (and a b c d)หมายถึง(when (and a b c) d) ฉันมักจะใช้whenเพื่อแสดงการแตกแขนงเท่านั้น มีความแตกต่างที่เกิดขึ้นจริง? ดีกว่าที่จะใช้อย่างใดอย่างหนึ่ง? ฉันไม่มีแหล่งที่มาของ Emacs andเป็นฟังก์ชั่น C; whenเป็นแมโครที่ขยายไปifซึ่งตัวมันเองเป็นฟังก์ชั่น C

7
รหัส Elisp เพื่อตรวจสอบการเชื่อมต่ออินเทอร์เน็ต
เมื่อฉันเปิด Emacs มันจะประเมินไฟล์ init ของฉันซึ่งรวมถึงการรีเฟรชคลังข้อมูลแพคเกจของฉันผ่านการเชื่อมต่ออินเทอร์เน็ต นี่เป็นปัญหาเมื่อฉันไม่มีการเชื่อมต่ออินเทอร์เน็ตดังนั้นฉันจำเป็นต้องป้องกันการเรียกใช้โค้ดนั้นเมื่อเริ่มต้น Emacs โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต เพื่อแก้ปัญหานี้ฉันสงสัยว่ามีวิธีให้ Emacs เพิกเฉยต่อรหัสรีเฟรชแพ็กเกจหรือไม่เมื่อฉันไม่มีการเชื่อมต่ออินเทอร์เน็ต นี่คือสองสามบรรทัดแรกของฉันinit.el: ;; Requisites: Emacs >= 24 (require 'package) (package-initialize) ;; PACKAGE MANAGEMENT (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-refresh-contents) ฉันคิดว่าฉันสามารถเพิ่มรหัสเพื่อโหลดไฟล์ Emacs ของฉันดังนี้ ;; Requisites: Emacs >= 24 (when (connected-to-internet-p) ; I need this predicate function (require 'package) (package-initialize) (add-to-list …
13 elisp  networking 

4
ความแตกต่างระหว่างการตั้งค่าปุ่มโหมดหลักด้วยการเปรียบเทียบกับการเพิ่มลงในแผนผังโหมด
สมมติว่าผมได้ดาวน์โหลดโหมดหลักที่เรียกว่าและจะมีรูปแบบแป้นวิเศษของตัวเองที่เรียกว่าmagical-mode magical-mode-mapโหมดนี้ยังมีตะขอmagical-mode-hookที่รันในแต่ละครั้งmagical-modeกลายเป็นโหมดหลักของบัฟเฟอร์ ตอนนี้ฉันต้องการแก้ไขไฟล์ init เพื่อเพิ่มการเชื่อมโยงคีย์แบบกำหนดเองเพื่อใช้ในโหมดนั้น มันดูเหมือนว่ามี (อย่างน้อย) magical-modeสองวิธีในการตั้งค่าปุ่มลัดที่กำหนดเองสำหรับ สิ่งที่ฉันเห็นบ่อยที่สุดคือ: (defun my-magical-keys () (local-set-key (kbd "C-i") 'previous-line) (local-set-key (kbd "C-k") 'next-line) (local-set-key (kbd "C-j") 'backward-char) (local-set-key (kbd "C-l") 'forward-char)) (add-hook 'magical-mode-hook 'my-magical-keys) แต่ก็เป็นไปได้ที่จะทำเช่นนี้: (define-key magical-mode-map (kbd "C-i") 'previous-line) (define-key magical-mode-map (kbd "C-k") 'next-line) (define-key magical-mode-map (kbd "C-j") 'backward-char) (define-key magical-mode-map (kbd …

9
วิธีแก้ไข elisp โดยไม่หลงทางในวงเล็บ
ฉันกำลังแก้ไขโค้ด elisp จาก linum.el: (custom-set-variables '(linum-format 'dynamic)) (defadvice linum-update-window (around linum-dynamic activate) (let* ((w (length (number-to-string (+ (count-lines (point-min) (point-max)) 1)))) (linum-format (concat " %" (number-to-string w) "d "))) ad-do-it)) ผมสามารถที่จะแก้ไขข้อผิดพลาดที่เยื้องถูกปิดโดยหนึ่งโดยการปรับเปลี่ยนไป(count-lines (point-min) (point-max)) (+ (count-lines (point-min) (point-max)) 1)นั่นเป็นเรื่องง่าย แต่ตอนนี้ฉันต้องการแก้ไขเพื่อให้ความกว้างต่ำสุดคือ 2 โดยการเพิ่ม if-conditional โดยที่(concat " %" (number-to-string w) "2d ")ถ้าจำนวนบรรทัดเป็น <10 …

4
`สัญลักษณ์ - ค่า 'ทำอะไร
เอกสารทำให้ฉันไม่ฉลาด: ฟังก์ชันนี้คืนค่าที่เก็บไว้ในเซลล์ค่าของสัญลักษณ์ นี่คือที่เก็บค่าปัจจุบัน (ไดนามิก) ของตัวแปร หากตัวแปรไม่มีการเชื่อมต่อโลคัลนี่เป็นเพียงค่าโกลบอล หากตัวแปรเป็นโมฆะข้อผิดพลาดเป็นโมฆะตัวแปรจะถูกส่งสัญญาณ จุดของค่าสัญลักษณ์คืออะไร? ฉันจะต้องใช้ที่ไหนและเมื่อไหร่?
13 elisp  symbols 

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