Get rid of some byte-compile messages
There are still a lot of issues, like global variables that should be buffer-local.
This commit is contained in:
parent
bb4469313a
commit
9881fde2f8
112
gobgen.el
112
gobgen.el
@ -1,4 +1,4 @@
|
||||
;;; gobgen.el --- Generate GObject descendants using a detailed form -*- lexical-binding: t; -*-
|
||||
;;; gobgen.el --- Generate GObject descendants using a detailed form -*- lexical-binding: nil; -*-
|
||||
|
||||
;; Copyright (C) 2015 Gergely Polonkai
|
||||
|
||||
@ -30,19 +30,26 @@
|
||||
|
||||
(eval-when-compile (require 'wid-edit))
|
||||
|
||||
(defvar gobgen-widget-name)
|
||||
(defvar gobgen-widget-prefix)
|
||||
(defvar gobgen-widget-parent-name)
|
||||
(defvar gobgen-widget-parent-prefix)
|
||||
(defvar gobgen-widget-recent)
|
||||
(defvar gobgen-widget-private)
|
||||
(defvar-local gobgen-widget-name nil
|
||||
"Widget for the class name.")
|
||||
(defvar-local gobgen-widget-prefix nil
|
||||
"Widget for the class prefix. It is auto-filled, but changeable.")
|
||||
(defvar-local gobgen-widget-parent-name nil
|
||||
"Widget for the name of the parent class.")
|
||||
(defvar-local gobgen-widget-parent-prefix nil
|
||||
"Widget for the prefix of the parent class. It is auto-filled, but changeable.")
|
||||
(defvar-local gobgen-widget-recent nil
|
||||
"Checkbox field for the recent GLib option.")
|
||||
(defvar-local gobgen-widget-private nil
|
||||
"Checkbox field for the private structure option.")
|
||||
|
||||
(defun string-join (list separator)
|
||||
"Takes a list of string and joins them using delimiter."
|
||||
"Takes a list of strings and joins them using delimiter."
|
||||
|
||||
(mapconcat (lambda (x) x) list separator))
|
||||
|
||||
(defun string-has-prefix (full-str prefix-str)
|
||||
"Check if full-str has the prefix prefix-str"
|
||||
"Check if FULL-STR has the prefix PREFIX-STR"
|
||||
|
||||
(let* ((prefix-length (length prefix-str)))
|
||||
(string-equal prefix-str (substring full-str 0 prefix-length))))
|
||||
@ -50,7 +57,18 @@
|
||||
(defun get-gobject-prefix (class-name)
|
||||
(car (split-string class-name "_")))
|
||||
|
||||
(defun gobgen-gen-header ()
|
||||
(defun gobgen-gen-header (CLASS_FULL_NAME
|
||||
CLASS_PREFIX
|
||||
CLASS_NAME
|
||||
ClassFullName
|
||||
func-prefix
|
||||
parent_prefix
|
||||
ParentPrefix
|
||||
ParentName
|
||||
parent-header
|
||||
recent-glib
|
||||
need-private)
|
||||
"Generate the contents of a GObject header file."
|
||||
|
||||
(concat
|
||||
"#ifndef __"
|
||||
@ -141,7 +159,19 @@
|
||||
CLASS_FULL_NAME
|
||||
"_H__ */\n"))
|
||||
|
||||
(defun gobgen-gen-code ()
|
||||
(defun gobgen-gen-code (CLASS_FULL_NAME
|
||||
CLASS_PREFIX
|
||||
CLASS_NAME
|
||||
class_name
|
||||
ClassFullName
|
||||
func-prefix
|
||||
file-name-header
|
||||
PARENT_PREFIX
|
||||
PARENT_NAME
|
||||
recent-glib
|
||||
need-private)
|
||||
"Generate the contents of a GObject source file."
|
||||
|
||||
(concat
|
||||
"#include \"" file-name-header "\"\n"
|
||||
|
||||
@ -215,11 +245,14 @@
|
||||
|
||||
"}\n"))
|
||||
|
||||
(defun gobgen-generator ()
|
||||
"Generate the header definition for a GObject derived clas.
|
||||
(defun gobgen-generator (class-prefix
|
||||
class-name
|
||||
parent-prefix
|
||||
parent-name
|
||||
recent-glib
|
||||
need-private)
|
||||
"Generate the header definition for a GObject derived clas."
|
||||
|
||||
Parameters:
|
||||
"
|
||||
(let* ((parent-prefix (downcase parent-prefix))
|
||||
(parent-name (downcase parent-name))
|
||||
(class-prefix (downcase class-prefix))
|
||||
@ -263,16 +296,38 @@ Parameters:
|
||||
(split-window-vertically)
|
||||
(other-window 1)
|
||||
(find-file file-name-header)
|
||||
(insert (gobgen-gen-header))
|
||||
(insert (gobgen-gen-header CLASS_FULL_NAME
|
||||
CLASS_PREFIX
|
||||
CLASS_NAME
|
||||
ClassFullName
|
||||
func-prefix
|
||||
parent_prefix
|
||||
ParentPrefix
|
||||
ParentName
|
||||
parent-header
|
||||
recent-glib
|
||||
need-private))
|
||||
|
||||
(split-window-vertically)
|
||||
(other-window 1)
|
||||
(find-file file-name-code)
|
||||
(insert (gobgen-gen-code)))))))
|
||||
(insert (gobgen-gen-code CLASS_FULL_NAME
|
||||
CLASS_PREFIX
|
||||
CLASS_NAME
|
||||
class_name
|
||||
ClassFullName
|
||||
func-prefix
|
||||
file-name-header
|
||||
PARENT_PREFIX
|
||||
PARENT_NAME
|
||||
recent-glib
|
||||
need-private)))))))
|
||||
|
||||
(defun gobgen ()
|
||||
"Create widgets window for GObject creation"
|
||||
|
||||
(interactive)
|
||||
|
||||
(switch-to-buffer "*GObject Creator*")
|
||||
|
||||
(kill-all-local-variables)
|
||||
@ -290,9 +345,10 @@ Parameters:
|
||||
(widget-create 'editable-field
|
||||
:size 25
|
||||
:format "Name: %v"
|
||||
:notify (lambda (widget &rest ignore)
|
||||
:notify (lambda (widget _child &optional event)
|
||||
(save-excursion
|
||||
(widget-value-set gobgen-widget-prefix (get-gobject-prefix (widget-value widget)))))
|
||||
(widget-value-set gobgen-widget-prefix
|
||||
(get-gobject-prefix (widget-value widget)))))
|
||||
:doc "The name of the new class, with its prefix included"
|
||||
"gtk_example_object"))
|
||||
|
||||
@ -309,9 +365,10 @@ Parameters:
|
||||
(widget-create 'editable-field
|
||||
:size 25
|
||||
:format "Parent: %v"
|
||||
:notify (lambda (widget &rest ignore)
|
||||
:notify (lambda (widget _child &optional event)
|
||||
(save-excursion
|
||||
(widget-value-set gobgen-widget-parent-prefix (get-gobject-prefix (widget-value widget)))))
|
||||
(widget-value-set gobgen-widget-parent-prefix
|
||||
(get-gobject-prefix (widget-value widget)))))
|
||||
:doc "Name of the parent class. Use g_object if you don't want to derive from something specific."
|
||||
"g_object"))
|
||||
|
||||
@ -343,14 +400,19 @@ Parameters:
|
||||
(widget-insert "\n\n")
|
||||
|
||||
(widget-create 'push-button
|
||||
:notify (lambda (&rest ignore)
|
||||
:notify (lambda (widget _child &optional event)
|
||||
(let ((class-name (widget-value gobgen-widget-name))
|
||||
(class-prefix (widget-value gobgen-widget-prefix))
|
||||
(parent-name (widget-value gobgen-widget-parent-name))
|
||||
(parent-prefix (widget-value gobgen-widget-parent-prefix))
|
||||
(recent-glib (widget-value gobgen-widget-recent))
|
||||
(need-private (widget-value gobgen-widget-private)))
|
||||
(gobgen-generator)))
|
||||
(gobgen-generator class-prefix
|
||||
class-name
|
||||
parent-prefix
|
||||
parent-name
|
||||
recent-glib
|
||||
need-private)))
|
||||
"Generate")
|
||||
|
||||
(widget-insert " ")
|
||||
@ -368,11 +430,11 @@ Parameters:
|
||||
(widget-insert " ")
|
||||
|
||||
(widget-create 'push-button
|
||||
:notify (lambda (&rest ignore)
|
||||
:notify (lambda (widget _child &optional event)
|
||||
(kill-buffer "*GObject Creator*"))
|
||||
"Close")
|
||||
|
||||
(beginning-of-buffer)
|
||||
(goto-char (point-min))
|
||||
|
||||
(use-local-map widget-keymap)
|
||||
(widget-setup))
|
||||
|
Loading…
x
Reference in New Issue
Block a user