forked from FG42/FG42
first working prototype of fpkg
This commit is contained in:
parent
0795827092
commit
df94b822f4
2
fg42
2
fg42
|
@ -1,4 +1,4 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
#cask exec emacs -Q --no-splash --name FG42 --title FG42 -q -l /home/lxsameer/src/FG42/FG42/fg42-config.el "$@"
|
#cask exec emacs -Q --no-splash --name FG42 --title FG42 -q -l /home/lxsameer/src/FG42/FG42/fg42-config.el "$@"
|
||||||
emacs -l --name FG42 /home/lxsameer/src/FG42/FG42/fg42-config.el "$@"
|
emacs --name FG42 -Q -q --no-splash --title FG42 -l /home/lxsameer/src/FG42/FG42/fg42-config.el "$@"
|
||||||
|
|
|
@ -2,5 +2,6 @@
|
||||||
(toggle-debug-on-error)
|
(toggle-debug-on-error)
|
||||||
(require 'fg42)
|
(require 'fg42)
|
||||||
|
|
||||||
(enable-extensions 'editor)
|
(activate-extensions 'editor)
|
||||||
|
|
||||||
|
(fg42-initialize)
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
|
(require 'fpkg)
|
||||||
(require 'fg42/extension)
|
(require 'fg42/extension)
|
||||||
|
(require 'extensions/editor/init)
|
||||||
|
|
||||||
(defun extension/editor-initialize ()
|
;; Dependencies ----------------------------------
|
||||||
"Base plugin initialization."
|
(depends-on 'color-theme)
|
||||||
(message "inside init"))
|
(depends-on 'ido)
|
||||||
|
(depends-on 'ido-vertical-mode)
|
||||||
|
(depends-on 'multiple-cursors)
|
||||||
|
(depends-on 'expand-region)
|
||||||
|
(depends-on 'flx-ido)
|
||||||
|
(depends-on 'dired+)
|
||||||
|
|
||||||
|
;; Extension -------------------------------------
|
||||||
(extension editor
|
(extension editor
|
||||||
:version "2.67"
|
:version "2.67"
|
||||||
:on-initialize extension/editor-initialize)
|
:on-initialize extension/editor-initialize)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
|
||||||
|
(defvar about_fg42_msg "
|
||||||
|
FG42 %%VERSION%% Copyright © 2010-2015 Sameer Rahmani <lxsameer@gnu.org>
|
||||||
|
FG42 release under the term of GPLv2.
|
||||||
|
|
||||||
|
Home page:
|
||||||
|
\thttp://fg42.lxsameer.com
|
||||||
|
|
||||||
|
Credits:
|
||||||
|
\tSameer Rahmani (lxsameer)
|
||||||
|
\tNima Nazari (niman)
|
||||||
|
\tDanial Parsi (intuxticated)
|
||||||
|
\tKeyvan Hedayati (k1-hedayati)
|
||||||
|
"
|
||||||
|
"About FG42")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(defun about/get_string ()
|
||||||
|
"Get the about message string"
|
||||||
|
(let (msg)
|
||||||
|
(setq msg (replace-regexp-in-string "%%VERSION%%"
|
||||||
|
FG42-VERSION about_fg42_msg))))
|
||||||
|
|
||||||
|
(defun about-fg42-f ()
|
||||||
|
"Show an small about note"
|
||||||
|
(interactive)
|
||||||
|
(let (buf msg)
|
||||||
|
(setq buf (get-buffer-create "*About FG42*"))
|
||||||
|
(setq msg (about/get_string))
|
||||||
|
(set-buffer buf)
|
||||||
|
(insert msg)
|
||||||
|
(view-buffer buf)))
|
||||||
|
|
||||||
|
(define-key-after global-map
|
||||||
|
[menu-bar help-menu about-kuso]
|
||||||
|
'("About FG42" . about-fg42-f)
|
||||||
|
'about-emacs)
|
||||||
|
;(define-key-after global-map [menu-bar help-menu kuso-update-everything] '("Update FG42 (everything)" . el-get-update-all) 'getting-new-versions)
|
||||||
|
;(define-key-after global-map [menu-bar help-menu kuso-update] '("Update FG42" . el-get-update) 'fg42-update-everything)
|
||||||
|
|
||||||
|
(provide 'extensions/editor/about)
|
|
@ -0,0 +1,35 @@
|
||||||
|
;; --------------------------------------------------------------------
|
||||||
|
;; Groups
|
||||||
|
;; --------------------------------------------------------------------
|
||||||
|
(defgroup fg42-user-preferences nil
|
||||||
|
"User preferences group. this group contain user specified options for
|
||||||
|
FG42"
|
||||||
|
:group 'fg42
|
||||||
|
:tag '"User Preferences"
|
||||||
|
)
|
||||||
|
|
||||||
|
;; --------------------------------------------------------------------
|
||||||
|
;; Custom Variables
|
||||||
|
;; --------------------------------------------------------------------
|
||||||
|
(defcustom developer-name nil
|
||||||
|
"FG42 use this option as author name in project if the value be non-nil"
|
||||||
|
:group 'fg42-user-preferences
|
||||||
|
:type 'string
|
||||||
|
:tag '"Developer full name"
|
||||||
|
)
|
||||||
|
|
||||||
|
(defcustom developer-email nil
|
||||||
|
"FG42 use this option as author email in project if the value be non-nil"
|
||||||
|
:group 'fg42-user-preferences
|
||||||
|
:type 'string
|
||||||
|
:tag '"Developer Email"
|
||||||
|
)
|
||||||
|
|
||||||
|
(defcustom fg42-workspace "~/src/"
|
||||||
|
"FG42 use this option as default path for new project."
|
||||||
|
:group 'fg42-user-preferences
|
||||||
|
:type 'string
|
||||||
|
:tag '"Workspace"
|
||||||
|
)
|
||||||
|
|
||||||
|
(provide 'extensions/editor/custom)
|
|
@ -0,0 +1,106 @@
|
||||||
|
;;;###autoload
|
||||||
|
(defun extension/editor-initialize ()
|
||||||
|
"Base plugin initialization."
|
||||||
|
(message "Initializing 'editor' extension.")
|
||||||
|
|
||||||
|
;; Remove splash screen
|
||||||
|
(setq inhibit-splash-screen t)
|
||||||
|
|
||||||
|
;; scratch should be scratch
|
||||||
|
(setq initial-scratch-message nil)
|
||||||
|
|
||||||
|
|
||||||
|
;; Tramp configuration ---------------------------------------------
|
||||||
|
(setq tramp-default-method "ssh")
|
||||||
|
|
||||||
|
;; replace strings
|
||||||
|
(global-set-key (kbd "C-c M-s") 'replace-string)
|
||||||
|
|
||||||
|
;; Basic Key bindings
|
||||||
|
(global-set-key (kbd "\C-c m") 'menu-bar-mode)
|
||||||
|
|
||||||
|
;; Indentation ----------------------------------------------
|
||||||
|
;; Don't allow tab as indent
|
||||||
|
(setq-default indent-tabs-mode nil)
|
||||||
|
|
||||||
|
;; Default indent width
|
||||||
|
(setq tab-width 2)
|
||||||
|
(add-hook 'before-save-hook 'delete-trailing-whitespace)
|
||||||
|
|
||||||
|
;; Enhancements ---------------------------------------------
|
||||||
|
|
||||||
|
;; Global configurations
|
||||||
|
(tool-bar-mode -1)
|
||||||
|
(scroll-bar-mode -1)
|
||||||
|
(setq x-select-enable-clipboard t)
|
||||||
|
(column-number-mode t)
|
||||||
|
|
||||||
|
;; linum mode
|
||||||
|
(global-linum-mode)
|
||||||
|
(setq linum-format " %3d ")
|
||||||
|
|
||||||
|
(menu-bar-mode -1)
|
||||||
|
(show-paren-mode t)
|
||||||
|
(cua-selection-mode t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; expand-region -------------------------------------------
|
||||||
|
(global-set-key (kbd "C-=") 'er/expand-region)
|
||||||
|
|
||||||
|
;; Multiple cursor -----------------------------------------
|
||||||
|
;; multiple cursor configurations
|
||||||
|
(global-set-key (kbd "C->") 'mc/mark-next-like-this)
|
||||||
|
(global-set-key (kbd "C-<") 'mc/mark-previous-like-this)
|
||||||
|
(global-set-key (kbd "C-c C-SPC ") 'mc/mark-all-like-this)
|
||||||
|
|
||||||
|
;; Key Chord ------------------------------------------------
|
||||||
|
;; (require 'key-chord)
|
||||||
|
;; (key-chord-mode 1)
|
||||||
|
|
||||||
|
;; (key-chord-define-global "hj" 'undo)
|
||||||
|
;; (key-chord-define-global "kl" 'right-word)
|
||||||
|
;; (key-chord-define-global "sd" 'left-word)
|
||||||
|
;; (key-chord-define-global "m," 'forward-paragraph)
|
||||||
|
;; (key-chord-define-global "p[" 'backward-paragraph)
|
||||||
|
|
||||||
|
;; HideShow -------------------------------------------------------
|
||||||
|
(global-set-key (kbd "C-\-") 'hs-toggle-hiding)
|
||||||
|
(hs-minor-mode)
|
||||||
|
|
||||||
|
;; IDO configurations ---------------------------------------------
|
||||||
|
(require 'flx-ido)
|
||||||
|
(require 'ido-vertical-mode)
|
||||||
|
(ido-mode t)
|
||||||
|
(ido-everywhere t)
|
||||||
|
(flx-ido-mode 1)
|
||||||
|
(setq ido-use-faces nil)
|
||||||
|
; If don't want to use the flx's highlights you can turn them off like this
|
||||||
|
; (setq flx-ido-use-faces nil)
|
||||||
|
|
||||||
|
(setq ido-enable-flex-matching t)
|
||||||
|
(ido-vertical-mode 1)
|
||||||
|
|
||||||
|
|
||||||
|
;; Backup files ---------------------------------------------
|
||||||
|
;; Put them in one nice place if possible
|
||||||
|
(if (file-directory-p "~/.backup")
|
||||||
|
(setq backup-directory-alist '(("." . "~/.backup")))
|
||||||
|
(make-directory "~/.backup"))
|
||||||
|
|
||||||
|
(setq backup-by-copying t ; Don't delink hardlinks
|
||||||
|
delete-old-versions t ; Clean up the backups
|
||||||
|
version-control t ; Use version numbers on backups,
|
||||||
|
kept-new-versions 3 ; keep some new versions
|
||||||
|
kept-old-versions 2) ; and some old ones, too
|
||||||
|
|
||||||
|
;; get rid of yes-or-no questions - y or n is enough
|
||||||
|
(defalias 'yes-or-no-p 'y-or-n-p)
|
||||||
|
|
||||||
|
(setq my-path (file-name-directory load-file-name))
|
||||||
|
;; Load about submenu
|
||||||
|
(require 'extensions/editor/version)
|
||||||
|
(require 'extensions/editor/about)
|
||||||
|
(require 'extensions/editor/custom))
|
||||||
|
|
||||||
|
(provide 'extensions/editor/init)
|
|
@ -0,0 +1,3 @@
|
||||||
|
(defconst FG42-VERSION "2.0.0")
|
||||||
|
|
||||||
|
(provide 'extensions/editor/version)
|
|
@ -27,4 +27,10 @@
|
||||||
(require 'fpkg)
|
(require 'fpkg)
|
||||||
(require 'fg42/base)
|
(require 'fg42/base)
|
||||||
|
|
||||||
|
(defun fg42-initialize ()
|
||||||
|
"Initialize FG42 editor."
|
||||||
|
(fpkg-initialize)
|
||||||
|
(initialize-extensions))
|
||||||
|
|
||||||
(provide 'fg42)
|
(provide 'fg42)
|
||||||
|
|
||||||
|
|
|
@ -3,17 +3,21 @@
|
||||||
|
|
||||||
(defun load--extension (extension)
|
(defun load--extension (extension)
|
||||||
"Load a single extension and call its :on-initialize function"
|
"Load a single extension and call its :on-initialize function"
|
||||||
(let ((lib (concat "extensions/" (symbol-name extension)))
|
(let ((lib (concat "extensions/" (symbol-name extension))))
|
||||||
(init-func nil))
|
(require (intern lib))))
|
||||||
|
|
||||||
(require (intern lib))
|
(defun initialize--extension (extension)
|
||||||
(setq init-func (fg42-extension-on-initialize (symbol-value extension)))
|
"Initialize given extension by calling its :on-initialize function."
|
||||||
|
(let ((init-func (fg42-extension-on-initialize (symbol-value extension))))
|
||||||
(funcall (symbol-function init-func))))
|
(funcall (symbol-function init-func))))
|
||||||
|
|
||||||
|
(defun initialize-extensions ()
|
||||||
|
"Call the :on-initialize function on all extensions."
|
||||||
|
(mapcar 'initialize--extension activated-extensions))
|
||||||
|
|
||||||
(defun enable-extensions (&rest extensions)
|
(defun activate-extensions (&rest extensions)
|
||||||
"Mark given plugins to load on FG42"
|
"Mark given plugins to load on FG42"
|
||||||
|
(setq activated-extensions extensions)
|
||||||
(mapcar 'load--extension extensions))
|
(mapcar 'load--extension extensions))
|
||||||
|
|
||||||
|
|
||||||
(provide 'fg42/base)
|
(provide 'fg42/base)
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
;; This library provides some basic means to create a new FG42 extensions
|
;; This library provides some basic means to create a new FG42 extensions
|
||||||
(require 'cl-lib)
|
(require 'cl-lib)
|
||||||
|
|
||||||
|
;; Variables -----------------------------
|
||||||
|
(defvar activated-extensions ()
|
||||||
|
"A list of all activated extensions.")
|
||||||
|
|
||||||
;; Structures -----------------------------
|
;; Structures -----------------------------
|
||||||
(cl-defstruct fg42-extension
|
(cl-defstruct fg42-extension
|
||||||
"Each FG42 extension should implement a copy of this structure."
|
"Each FG42 extension should implement a copy of this structure."
|
||||||
|
|
54
lib/fpkg.el
54
lib/fpkg.el
|
@ -25,6 +25,8 @@
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
(require 'cl-lib)
|
(require 'cl-lib)
|
||||||
|
(require 'subr-x)
|
||||||
|
(require 'fpkg/installers)
|
||||||
|
|
||||||
(message "Initializing FPKG")
|
(message "Initializing FPKG")
|
||||||
|
|
||||||
|
@ -33,20 +35,58 @@
|
||||||
"Package structure for FG42."
|
"Package structure for FG42."
|
||||||
name
|
name
|
||||||
(version "0")
|
(version "0")
|
||||||
(github nil)
|
(path nil)
|
||||||
(path nil))
|
(source 'elpa))
|
||||||
|
|
||||||
(defvar required-packages (make-hash-table)
|
(defvar required-packages (make-hash-table)
|
||||||
"A hash of `fg42-package structure representing required packages.")
|
"A hash of `fg42-package structure representing required packages.")
|
||||||
|
|
||||||
;; Functions ----------------------------------
|
;; Functions ----------------------------------
|
||||||
|
(defun all-dependencies-installed? ()
|
||||||
|
"Return t if all the dependencies installed."
|
||||||
|
(let ((result t))
|
||||||
|
(dolist (pkg (hash-table-values required-packages))
|
||||||
|
(when (not (package-installed-p pkg)) (setq result nil)))
|
||||||
|
result))
|
||||||
|
|
||||||
|
(defun install--package (pkg)
|
||||||
|
"Intall a package via its propreate source."
|
||||||
|
(let* ((source (fpkg-dependency-source pkg))
|
||||||
|
(func-name (concat "install-package-via-" (symbol-name source)))
|
||||||
|
(install-func
|
||||||
|
(symbol-function
|
||||||
|
(intern func-name))))
|
||||||
|
(funcall install-func pkg)))
|
||||||
|
|
||||||
(defun fpkg-initialize ()
|
(defun fpkg-initialize ()
|
||||||
"Initilize the package.el and related stuff to be used in FG42"
|
"Initilize the package.el and related stuff to be used in FG42"
|
||||||
(require 'package)
|
(let ((packages (hash-table-values required-packages)))
|
||||||
(require 'melpa)
|
|
||||||
(add-to-list 'package-archives
|
(require 'package)
|
||||||
'("melpa" . "http://melpa.milkbox.net/packages/") t)
|
|
||||||
(package-initialize))
|
(add-to-list 'package-archives
|
||||||
|
'("melpa" . "http://melpa.milkbox.net/packages/") t)
|
||||||
|
(when (< emacs-major-version 24)
|
||||||
|
;; For important compatibility libraries like cl-lib
|
||||||
|
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
|
||||||
|
|
||||||
|
;; Initialize package.el
|
||||||
|
(package-initialize)
|
||||||
|
|
||||||
|
(setq url-http-attempt-keepalives nil)
|
||||||
|
|
||||||
|
(unless (all-dependencies-installed?)
|
||||||
|
;; check for new packages (package versions)
|
||||||
|
(message "%s" "Refreshing package database...")
|
||||||
|
(package-refresh-contents)
|
||||||
|
(message "%s" " done.")
|
||||||
|
|
||||||
|
;; install the missing packages
|
||||||
|
(dolist (pkg packages)
|
||||||
|
(when (not (package-installed-p (fpkg-dependency-name pkg)))
|
||||||
|
(install--package pkg))))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defun depends-on (pkgname &rest args)
|
(defun depends-on (pkgname &rest args)
|
||||||
"Global function to specify a single dependency"
|
"Global function to specify a single dependency"
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
;;; Code:
|
||||||
|
(defun install-package-via-elpa (pkg)
|
||||||
|
"Install a package via package.el."
|
||||||
|
(package-install (fpkg-dependency-name pkg)))
|
||||||
|
|
||||||
|
(provide 'fpkg/installers)
|
Loading…
Reference in New Issue