47 votes

Confusion sur le système personnalisé Emacs

Il y a plusieurs autres fonctions de paramétrage:

  1. set & setq
  2. définir par défaut
  3. defcustom
  4. personnalisé-mise en valeur
  5. personnalisé-set-variables
  6. personnaliser-mise en valeur
  7. personnaliser-set-variable

alors, quelle est la différence entre ces fonctions?

Si je veux placer mes propres préférences pour un add-on, pour ces cas de figure:

  1. Si un paramètre variable par defcustom, le réglage-fonction sera mieux?
  2. Et à propos d'une variable de paramètre par defvar?

62voto

Nicolas Dudebout Points 5457

La réponse courte à votre question est:

  • utiliser setq ou setq-default pour les variables définies par l' defvar.

  • utiliser setq, setq-default, ou l' Customize mécanisme pour les variables définies par l' defcustom

Ci-dessous est la réponse longue.

Les fonctions que vous allez utiliser sont les suivantes:

  • set est la fonction principale de définir la valeur d'une variable.

  • setq est une autre version qui automatiquement des devis son premier argument. C'est utile car citant le premier argument est ce que vous voulez faire presque tout le temps.

  • Certaines variables ne peuvent pas être définies à l'échelle mondiale. Chaque fois que vous définissez la variable n'est définie pour le tampon courant. Si vous voulez simuler la définition de cette variable à l'échelle mondiale vous utilisez set-default ou setq-default.

Les fonctions qu'un paquet écrivain utilise sont:

  • defvar qui permet le package écrivain de définir une variable et de donner un peu de documentation. Cette fonction n'est pas requise, mais rend la vie des utilisateurs plus facile.

  • defcustom s'appuie sur defvar. Il raconte emacs que c'est une variable, et il permet au développeur de créer un custom interface pour définir la valeur. Le développeur peut dire, des choses comme "cette variable peut contenir uniquement la valeur 'foo ou "bar".

La définition de variables peut être fait de deux façons:

  1. si defvar a été utilisé, les valeurs ne peuvent être définies par l'utilisateur dans sa .emacs par l'aide de la set de la fonction (ou variantes)

  2. si defcustom a été utilisé, les valeurs peuvent être définies à l'aide de set (voir 1.) OU en utilisant Customize. Lors de l'utilisation de la personnaliser mécanisme, emacs va générer un code qu'il place dans custom-set-variables. L'utilisateur ne doit pas utiliser cette fonction.

10voto

jeremiahd Points 2685

Ils sont, en grande partie, tous les chemins à la même chose. Il y a d'importantes différences cependant. La meilleure façon d'apprendre à les connaître, c'est de lire les manuels pour Emacs et Elisp (voir C-h i). Sur le dessus de la tête bien:

  • set est un "bas-niveau" affectation de variable
  • (setq foo bar) est une abréviation de" (set (quote foo) bar)
  • (set-default foo bar) signifie "sauf s'il existe une manière plus explicite la portée de la définition de l' foo dans le tampon courant, utilisez la valeur de la barre", et s'applique à tous les tampons.
  • defcustom est utilisé pour marquer une variable comme l'un que l'utilisateur devrait être en mesure de modifier en toute sécurité par le biais de l' customize fonctionnalité.
  • custom-set-value et customize-set-value sont deux noms qui pointent vers la même fonction. Ils sont la commodité des méthodes de travail avec l' customize système.
  • custom-set-variables et customize-set-variables sont utilisés pour faire une série de personnalisé par le biais de personnaliser les variables actives, IIRC.

En général, il est recommandé d'utiliser M-x customize pour changer les choses autour. Vous êtes libre de l'ensemble des choses définies avec defcustom l'aide set ou setq votre .emacs, le personnaliser le système vous en avertira si vous modifiez ultérieurement via customize si.

defcustom est généralement utilisé par des gens qui écrivent des paquets à des fins de diffusion, et je ne pense pas que j'ai vu quelqu'un utiliser custom-set-* à l'extérieur de fichiers internes à personnaliser. setq est très commun dans les fichiers d'initialisation pour paramétrer les choses comme ils veulent, indépendamment du fait que ces choses sont marqués pour une utilisation avec customize ou pas.

Je n'ai pas une compréhension complète de tout cela, j'espère que quelqu'un d'autre peut jeter plus de lumière, mais je pense que c'est une assez bonne vue d'ensemble :P

5voto

Barmar Points 135986
  1. set et setq sont le niveau le plus bas primitives utilisées pour l'attribution de tout type de variable.
  2. set-default et setq-default sont Emacs extensions qui vont avec tampon des variables locales, permettent de définir les valeurs par défaut utilisées pour les nouveaux tampons. 3-7. Tous les "custom" choses " est un ajout ultérieur qui a été conçu pour soutenir une interface utilisateur pour la gestion des variables qui sont destinés à être utilisés comme des préférences de l'utilisateur.
  3. defcustom est similaire à l' defvar, mais vous permet de spécifier une place dans la hiérarchie des options, ainsi que des informations de type de données de sorte que l'INTERFACE utilisateur peut afficher la valeur sous forme de menu ou à convertir automatiquement l'entrée d'utilisateur pour le type approprié.
  4. Je ne pense pas qu'il y a un custom-set-value fonction.
  5. custom-set-variables est utilisé par le personnaliser l'INTERFACE lors de l'enregistrement de toutes ses options. Il répertorie toutes les variables que l'utilisateur a changé à partir de leurs valeurs par défaut. 6-7. custom-set-value et custom-set-variable sont utilisés par le Personnaliser l'INTERFACE afin de demander à l'utilisateur que pour le courant et les valeurs par défaut d'une option variable, et de les affecter. Vous n'avez pas l'habitude d'appeler vous-même.

3voto

kdb Points 447

Tout comme ailleurs, les différences entre ces commandes ont augmenté en raison de l'introduction de la liaison lexicale, bien que ces différences ne sont pas vraiment utiles que si vous voulez juste pour personnaliser certaines variables.

L' def... des constructions de déclarer des variables globales. L' set... fonctions de l' ensemble des variables, que ce soit local ou global. Lors de l' x n'est ni une variable locale (un paramètre formel de la fonction actuelle ou déclarée, par un let formulaire ou similaire), ni définie par un def... formulaire et vous écrivez (setq x 0) de l'octet compilateur va même montrer un avertissement

Warning: assignment to free variable `x'

Les Variables déclarées avec defvar, defcustom, defconst sont dynamiquement lié, c'est à dire quand vous avez une construction

(let ((lisp-indent-offset 2))
  (pp (some-function)))

la fonction some-function va voir le changement de la variable globale lisp-indent-offset.

Lorsqu'une variable n'est pas dynamiquement lié, à quelque chose comme

(let ((my-local-var 1))
  (some-function))

my-local-var n'a pas de valeur mondiales, alors some-function ne verrez pas la valeur assignée, comme il est lexicalement étendue.

D'autre part, de façon dynamique étendue variables de ne pas être capturée lexicale fermetures.

Plus de détails peuvent être vus dans http://www.gnu.org/software/emacs/manual/html_node/elisp/Lexical-Binding.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X