Özel değişkeni programsal olarak varsayılan değere sıfırla


25

S: Elisp'i kullanarak, bu değerin ne olduğunu bilmeden bir değişkeni varsayılan değerine nasıl sıfırlayabilirim?

Bunun nasıl yapılacağını bulmaya çalıştım, init dosyamda varsayılan olmayan bir değere ayarladığım bir değişken için Özelleştir arabiriminiC-h k açıp ardından "Geri al ..." düğmesini tıklatarak tuşuna basmaya çalıştım . Belli widget-button-clickki pek bir yardımı olmayan belgeleri de getirdi . (Benzer şekilde, C-h k RETdüğmedeki nokta için yardım da var Custom-newline, bu da aradığım şey değil.)


Yanıtlar:


23

C-hig (elisp) Variable Definitions

Dahili olarak, standart değerin ifadesini kaydetmek, kullanıcı tarafından kişiselleştirme tamponu ile kaydedilen değeri kaydetmek ve kullanıcı tarafından ayarlanan değeri kişiselleştirme tamponu ile kaydetmek , ancak kaydetmemek defcustomiçin symbol özelliğini kullanır . Sembol Özellikleri bölümüne bakınız . Bu özellikler , değerleri değerlendiren bir ifade olan listelerdir .standard-valuesaved-valuecustomized-valuecar

Dolayısıyla:

(setq foo (eval (car (get 'foo 'standard-value))))

Bunun sadece defcustomdeğişkenler için geçerli olduğuna dikkat edin (örn. "Kullanıcı seçenekleri"). Emacs, bir defvardeğişkenin başlangıç ​​değerini hiçbir yerde kaydetmez .


3
Aslında, plisteki değeri değerlendirmeniz gerekir. Örneğiniz şu şekilde değiştirilmelidir: (setq foo (eval (car (get 'foo 'standard-value))))Oluşturulan varsayılan değer formu defcustom, bir funcall ve kapatmaya sahip bir formdur (bu, yalnızca sözcüksel bağlanma etkin olduğunda gerçekleşir)
Elias Mårtenson,

Muhtemelen bu durumda kullanmak setq-defaultyerine kullanmak istersin setq.
sanityinc

11

Başka bir, muhtemelen daha temiz, bir değişkenin değerini sıfırlamanın bir yolu:

custom-reevaluate-settingiçinde derlenmiş bir Lisp işlevidir custom.el.

(custom-reevaluate-setting SYMBOL)

SYMBOLKayıtlı veya standart değerini yeniden değerlendirerek değerini sıfırlayın . :setBunu yapmak için işlevi kullanın . Bu, standart değerlerinin gerçekten hesaplanabilmesinden önce tanımlanan özelleştirilebilir seçenekler için kullanışlıdır. Örneğin, varsayılan çalışma zamanı bilgisine bağlı olan terkedilmiş değişkenler.

Yani örneğin:

(custom-reevaluate-setting 'emms-player-next-function)

önceki değeri o sembolün yerine koyacaktır standard-value.

DÜZENLE

Bu işleve ilişkin çok önemli bir ayrıntı için @ phils yorumunu okuyun.


5
Not " kaydedilmiş veya standart değer". Bu öncelik sırasına göre. Kullanıcı değişken için bir değer özelleştirmiş ve kaydetmişse, bu işlev değerine saved-valuedeğil onu sıfırlar standard-value.
phils,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.