[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/systemd e385575 015/131: initial company support for direc
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/systemd e385575 015/131: initial company support for directives |
Date: |
Sun, 29 Aug 2021 11:35:06 -0400 (EDT) |
branch: elpa/systemd
commit e3855752415b37b7baaac9b98c4cad81f2296fef
Author: Mark Oteiza <mvoteiza@udel.edu>
Commit: Mark Oteiza <mvoteiza@udel.edu>
initial company support for directives
---
systemd-company.el | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++
systemd.el | 8 ++++
2 files changed, 135 insertions(+)
diff --git a/systemd-company.el b/systemd-company.el
new file mode 100644
index 0000000..938f752
--- /dev/null
+++ b/systemd-company.el
@@ -0,0 +1,127 @@
+;;; systemd-company.el --- company backend for systemd unit directives
+
+;; Copyright (C) 2015 Mark Oteiza <mvoteiza@udel.edu>
+
+;; Author: Mark Oteiza <mvoteiza@udel.edu>
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License
+;; as published by the Free Software Foundation; either version 3
+;; of the License, or (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(declare-function company-mode "company")
+(declare-function company-begin-backend "company")
+(declare-function company-grab-symbol "company")
+
+(defconst systemd-company-directives
+ ;; TODO: keep a script of sorts for generating this list. systemd
+ ;; source has a python script in tools/ for parsing the
+ ;; documentation xml for the unit directives.
+ ;;
+ ;; forcer on freenode threw together a curl monstrosity for achieving
+ ;; the same:
+ ;; curl -s
http://www.freedesktop.org/software/systemd/man/systemd.directives.html | tr -d
'\n' | sed 's/>/>\n/g' | sed -ne '/Unit directives/,/Options on the kernel/p' |
sed -ne 's/.*<dt id="\([^-][^"]*\)=">.*/\1/p'
+ '("Accept" "AccuracySec" "After" "Alias" "AllowIsolate" "Also"
+ "AppArmorProfile" "AssertACPower" "AssertArchitecture"
+ "AssertCapability" "AssertDirectoryNotEmpty" "AssertFileIsExecutable"
+ "AssertFileNotEmpty" "AssertFirstBoot" "AssertHost"
+ "AssertKernelCommandLine" "AssertNeedsUpdate" "AssertPathExists"
+ "AssertPathExistsGlob" "AssertPathIsDirectory" "AssertPathIsMountPoint"
+ "AssertPathIsReadWrite" "AssertPathIsSymbolicLink" "AssertSecurity"
+ "AssertVirtualization" "Backlog" "Before" "BindIPv6Only" "BindToDevice"
+ "BindsTo" "BlockIOAccounting" "BlockIODeviceWeight" "BlockIOReadBandwidth"
+ "BlockIOWeight" "BlockIOWriteBandwidth" "Broadcast" "BusName"
+ "BusPolicy" "CPUAccounting" "CPUAffinity" "CPUQuota"
+ "CPUSchedulingPolicy" "CPUSchedulingPriority" "CPUSchedulingResetOnFork"
+ "CPUShares" "Capabilities" "CapabilityBoundingSet" "ConditionACPower"
+ "ConditionArchitecture" "ConditionCapability"
+ "ConditionDirectoryNotEmpty" "ConditionFileIsExecutable"
+ "ConditionFileNotEmpty" "ConditionFirstBoot" "ConditionHost"
+ "ConditionKernelCommandLine" "ConditionNeedsUpdate"
+ "ConditionPathExists" "ConditionPathExistsGlob"
+ "ConditionPathIsDirectory" "ConditionPathIsMountPoint"
+ "ConditionPathIsReadWrite" "ConditionPathIsSymbolicLink"
+ "ConditionSecurity" "ConditionVirtualization" "Conflicts"
+ "DefaultDependencies" "DefaultInstance" "DeferAcceptSec" "Delegate"
+ "Description" "DeviceAllow" "DevicePolicy" "DirectoryMode"
+ "DirectoryNotEmpty" "Documentation" "Environment" "EnvironmentFile"
+ "ExecReload" "ExecStart" "ExecStartPost" "ExecStartPre" "ExecStop"
+ "ExecStopPost" "ExecStopPre" "FailureAction" "FileDescriptorStoreMax"
+ "FreeBind" "Group" "GuessMainPID" "IOSchedulingClass"
+ "IOSchedulingPriority" "IPTOS" "IPTTL" "IgnoreOnIsolate"
+ "IgnoreOnSnapshot" "IgnoreSIGPIPE" "InaccessibleDirectories"
+ "JobTimeoutAction" "JobTimeoutRebootArgument"
+ "JobTimeoutSec" "JoinsNamespaceOf" "KeepAlive" "KeepAliveIntervalSec"
+ "KeepAliveProbes" "KeepAliveTimeSec" "KillMode" "KillSignal"
+ "LimitAS" "LimitCORE" "LimitCPU" "LimitDATA" "LimitFSIZE" "LimitLOCKS"
+ "LimitMEMLOCK" "LimitMSGQUEUE" "LimitNICE" "LimitNOFILE" "LimitNPROC"
+ "LimitRSS" "LimitRTPRIO" "LimitRTTIME" "LimitSIGPENDING" "LimitSTACK"
+ "ListenDatagram" "ListenFIFO" "ListenMessageQueue" "ListenNetlink"
+ "ListenSequentialPacket" "ListenSpecial" "ListenStream" "MakeDirectory"
+ "Mark" "MaxConnections" "MemoryAccounting" "MemoryLimit"
+ "MessageQueueMaxMessages" "MessageQueueMessageSize" "MountFlags"
+ "Nice" "NoDelay" "NoNewPrivileges" "NonBlocking" "NotifyAccess"
+ "OOMScoreAdjust" "OnActiveSec" "OnBootSec" "OnCalendar" "OnFailure"
+ "OnFailureJobMode" "OnStartupSec" "OnUnitActiveSec" "OnUnitInactiveSec"
+ "Options" "PAMName" "PIDFile" "PartOf" "PassCredentials" "PassSecurity"
+ "PathChanged" "PathExists" "PathExistsGlob" "PathModified"
+ "PermissionsStartOnly" "Persistent" "Personality" "PipeSize" "Priority"
+ "PrivateDevices" "PrivateNetwork" "PrivateTmp" "PropagatesReloadTo"
+ "ProtectHome" "ProtectSystem" "ReadOnlyDirectories" "ReadWriteDirectories"
+ "RebootArgument" "ReceiveBuffer" "RefuseManualStart" "RefuseManualStop"
+ "ReloadPropagatedFrom" "RemainAfterExit" "RemoveOnStop" "RequiredBy"
+ "Requires" "RequiresMountsFor" "RequiresOverridable" "Requisite"
+ "RequisiteOverridable" "Restart" "RestartForceExitStatus"
+ "RestartPreventExitStatus" "RestartSec" "RestrictAddressFamilies"
+ "ReusePort" "RootDirectory" "RootDirectoryStartOnly" "RuntimeDirectory"
+ "RuntimeDirectoryMode" "SELinuxContext" "SELinuxContextFromNet"
+ "SecureBits" "SendBuffer" "SendSIGHUP" "SendSIGKILL" "Service" "Slice"
+ "SloppyOptions" "SmackLabel" "SmackLabelIPIn" "SmackLabelIPOut"
+ "SmackProcessLabel" "SocketGroup" "SocketMode" "SocketUser" "Sockets"
+ "SourcePath" "StandardError" "StandardInput" "StandardOutput"
+ "StartLimitAction" "StartLimitBurst" "StartLimitInterval"
+ "StartupBlockIOWeight" "StartupCPUShares" "StopWhenUnneeded"
+ "SuccessExitStatus" "SupplementaryGroups" "Symlinks" "SyslogFacility"
+ "SyslogIdentifier" "SyslogLevel" "SyslogLevelPrefix"
+ "SystemCallArchitectures" "SystemCallErrorNumber" "SystemCallFilter"
+ "TCPCongestion" "TTYPath" "TTYReset" "TTYVHangup" "TTYVTDisallocate"
+ "TimeoutSec" "TimeoutStartSec" "TimeoutStopSec" "TimerSlackNSec"
+ "Transparent" "Type" "UMask" "Unit" "User" "UtmpIdentifier"
+ "WakeSystem" "WantedBy" "Wants" "WatchdogSec" "What" "Where"
+ "WorkingDirectory")
+ "Configuration directives for systemd 218.")
+
+(defun systemd-company--setup (enable)
+ (when (fboundp 'systemd-company--setup-company)
+ (systemd-company--setup-company enable)))
+
+(with-eval-after-load "company"
+ (defun systemd-company-backend (command &optional arg &rest ignored)
+ (interactive (list 'interactive))
+ (cl-case command
+ (interactive (company-begin-backend 'systemd-company-backend))
+ (prefix (and (eq major-mode 'systemd-mode)
+ (company-grab-symbol)))
+ (candidates
+ (cl-remove-if-not (lambda (c) (string-prefix-p arg c))
+ systemd-company-directives))))
+ (defun systemd-company--setup-company (enable)
+ (when enable
+ (add-to-list (make-local-variable 'company-backends)
'systemd-company-backend))
+ (company-mode (if enable 1 -1))))
+
+(provide 'systemd-company)
+
+;;; systemd-company.el ends here
diff --git a/systemd.el b/systemd.el
index 9d499c9..83b3e86 100644
--- a/systemd.el
+++ b/systemd.el
@@ -33,6 +33,8 @@
(require 'thingatpt)
(require 'url-parse)
+(require 'systemd-company)
+
(defgroup systemd ()
"Major mode for editing systemd units."
:link '(url-link "http://www.freedesktop.org/wiki/Software/systemd/")
@@ -51,6 +53,11 @@
(string :tag "Semicolon" ";"))
:group 'systemd)
+(defcustom systemd-use-company-p t
+ "Whether to use `company-mode' for completion, if available."
+ :type 'boolean
+ :group 'systemd)
+
(defvar systemd-font-lock-keywords
`(("^\\([#;]\\(.*\\)\\)$"
(1 'font-lock-comment-delimiter-face)
@@ -148,6 +155,7 @@ at mode initialization.
Key bindings:
\\{systemd-mode-map}"
+ (systemd-company--setup systemd-use-company-p)
(setq-local comment-start systemd-comment-start)
(setq-local font-lock-defaults '(systemd-font-lock-keywords)))
- [nongnu] branch elpa/systemd created (now b6ae63a), ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd e52a5da 005/131: find a default uri harder, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd d58763e 006/131: minor cleanup, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd e385575 015/131: initial company support for directives,
ELPA Syncer <=
- [nongnu] elpa/systemd feb6dad 007/131: add Makefile, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd 1689dd5 010/131: ._., ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd a22a097 009/131: use function-item in customize, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd d0a46fe 014/131: rename systemd-mode.el → systemd.el, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd b60ccd5 022/131: point to commentary from README, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd 039bed6 004/131: add license, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd f32ecf8 011/131: tag it, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd 2a27186 023/131: format the list more programmatically, ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd 00a2520 028/131: add Package-Requires for emacs 24.3 (setq-local), ELPA Syncer, 2021/08/29
- [nongnu] elpa/systemd 8e6a8ce 038/131: remove backslash escapes from doc completions, ELPA Syncer, 2021/08/29